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
* lambda selected by cross-validation

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
Note: Chi-squared test is a wald test of the coefficients of the variables of interest jointly equal to zero. Lassos select controls for model estimation. Type lassoinfo to see number of selected variables in each lasso. Note: Lassos are performed accounting for clusters in idcode

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.