Nouveau dans
Lasso avec des données en grappes
Vous pouvez maintenant tenir compte des données en grappes dans votre analyse lasso. Ignorer la mise en grappes peut conduire à des résultats incorrects en présence d’une corrélation entre les observations au sein d’une même grappe. Mais avec les commandes lasso de Stata, aussi bien pour la prédiction que pour l’inférence, vous pouvez maintenant obtenir des résultats qui tiennent compte de la mise en grappes.
Avec les commandes lasso pour la prédiction, vous ajoutez simplement l’option cluster(). Par exemple, tapez
. lasso linear y x1-x5000, cluster(idcode)
pour tenir compte d’une éventuelle corrélation entre les observations ayant le même code d’identification lors de la sélection du modèle. Vous pouvez le faire avec des modèles lasso autres que linéaires, comme logit ou Poisson, et avec des méthodes de sélection de variables autres que lasso, comme elastic net et square-root lasso.
Avec les commandes lasso pour l’inférence, vous ajoutez l’option vce(cluster). Par exemple, tapez
. poregress y x1, controls(x2-x5000) vce(cluster idcode)
pour produire des erreurs standardrobustes en grappes qui tiennent compte de la mise en grappes dans l’idcode en utilisant le lasso à sortie partielle pour les résultats linéaires. L’option vce(cluster) est supportée par toutes les commandes lasso inférentielles, y compris la nouvelle commande d’estimation des effets de traitement avec lasso.
Points forts
- Prédictions Lasso avec données groupées pour
- Lasso
- Réseau élastique
- Lasso à racine carrée
- Inférence lasso avec données en grappes pour
- Modèles lasso à sortie partielle
- Modèles lasso à sortie partielle croisés
- Modèles lasso à double sélection
- Erreurs standard robustes en grappes pour
- Modèles lasso à sortie partielle
- Modèles lasso à sortie partielle croisés
- Modèles lasso à double sélection
- Modèles lasso à effets de traitement
Voyons comment cela fonctionne
Nous voulons ajuster un modèle linéaire-lasso pour le log des salaires (ln_wage) en utilisant un ensemble de variables et leurs interactions de second ordre. Nous disposons de données sur l’âge de l’individu, l’âge ; l’expérience professionnelle, l’expérience ; l’ancienneté de l’emploi, l’ancienneté ; si l’individu vit dans une zone rurale, rurale ; s’il vit dans le sud, sud ; et s’il n’a pas fait d’études supérieures, pas d’études supérieures. Nous voulons une bonne prédiction du logarithme des salaires compte tenu de ces contrôles.
Nous avons des observations répétées d’individus dans le temps ; nous avons des données en grappes. Chaque individu est identifié par un code d’identification.
Nous définissons la macro globale $vars comme des variables et $controls comme la liste complète des variables de contrôle.
. global vars c.(age tenure experience) i.(rural south nocollege)
. global controls ($vars)##($vars)
Nous ajustons le modèle lasso et spécifions l’option cluster(idcode) pour tenir compte du regroupement, et nous spécifions l’option rseed(1234) pour rendre les résultats reproductibles.
. lasso linear ln_wage $controls, cluster(idcode) rseed(1234) 10-fold cross-validation with 100 lambdas ... (output omitted) ... change in the deviance stopping tolerance reached ... last lambda selected Lasso linear model No. of obs = 28,093 No. of covariates = 45 Cluster: idcode No. of clusters = 4,699 Selection: Cross-validation No. of CV folds = 10
No. of Out-of- CV mean | ||
nonzero sample prediction | ||
ID | Description lambda coef. R-squared error | |
1 | first lambda .2261424 0 0.0010 .2526964 | |
81 | lambda before .0001325 23 0.3088 .1748403 | |
* 82 | selected lambda .0001207 23 0.3088 .1748393 | |
83 | lambda after .00011 23 0.3088 .1748406 | |
92 | last lambda .0000476 24 0.3087 .1748552 | |
Il y a 4 699 clusters. En coulisses, la procédure de validation croisée tire des échantillons aléatoires par idcode pour arriver au lambda optimal.
Nous pouvons maintenant utiliser la commande predict pour obtenir des prédictions de ln_wage.
Supposons que nous ne soyons pas uniquement intéressés par la prédiction. Disons que nous voulons connaître l’effet de l’ancienneté de l’emploi (tenure) sur le log des salaires (ln_wage). Toutes les autres variables sont traitées comme des contrôles potentiels, que lasso peut inclure ou exclure du modèle. Le lasso d’inférence nous permet d’obtenir l’estimation de l’effet de la tenure et son erreur standard. Étant donné que les individus sont corrélés dans le temps, nous souhaitons utiliser des erreurs standard de type cluster-robust au niveau de l’idcode. Nous ajustons un modèle linéaire avec des méthodes lasso à double sélection en utilisant la commande dsregress.
Tout d’abord, nous définissons la macro globale $vars2 comme les variables de contrôle non interagies, et nous les interagissons pour former l’ensemble complet de contrôles dans $controls2.
. global vars2 c.(age experience) i.(rural south nocollege)
. global controls2 ($vars2)##($vars2)
Pour ajuster le modèle et estimer les erreurs standard robustes par grappes, nous utilisons dsregress et spécifions l’option vce(cluster idcode).
. dsregress ln_wage tenure, controls($controls2) vce(cluster idcode) Estimating lasso for ln_wage using plugin Estimating lasso for tenure using plugin Double-selection linear model Number of obs = 28,093 Number of controls = 35 Number of selected controls = 10 Wald chi2(1) = 195.87 Prob > chi2 = 0.0000 (Std. err. adjusted for 4,699 clusters in idcode)
Robust | ||
ln_wage | Coefficient std. err. z P>|z| [95% conf. interval] | |
tenure | .0228961 .001636 14.00 0.000 .0196897 .0261025 | |
L’estimation ponctuelle de 0,02 signifie qu’une augmentation d’un an de l’ancienneté dans l’emploi entraîne une augmentation du logarithme du salaire de 0,02. L’estimation de l’erreur standard est robuste aux observations corrélées au sein de la grappe.