2016-11-22 1 views
0

Ma question est semblable à R: using predict() on new data with high dimensionality mais pour StataComment utiliser le modèle PCA pour prédire les scores sur les nouvelles données dans Stata?

Je veux lancer un modèle en composantes principales (pca) sur un sous-ensemble de données (le groupe témoin d'une expérience) pour extraire le premier composant. Ensuite, je souhaite réexécuter le modèle PCA sur un sous-ensemble de données distinct (le groupe de traitement d'une expérience) et obtenir également des scores pour ces données. Essentiellement, je veux utiliser un modèle pca exécuté sur dataset_1 pour prédire les scores dans un nouveau dataset_2. Dans R, on adapterait le modèle au groupe de contrôle seulement, alors on utiliserait la commande "predict" sur le modèle ajusté, avec l'ensemble de données complet dans l'argument "new data". Cela générerait des prédictions pour toutes les observations d'un modèle ajusté sur le groupe témoin seulement. Cependant, comment fait-on cela à Stata?

global xlist2a std_agreedisagree1_1_a std_revagreedisagree1_2_a std_revagreedisagree1_3_a std_agreedisagree1_4_a std_revagreedisagree1_10_a std_revagreedisagree1_5_a 
pca $xlist2a 
screeplot, yline(1)  
rotate, clear  
pca $xlist2a, com(3) 
rotate, varimax blanks (.30) 
predict pca5_p1b pca5_p2b pca5_p3b, score 

Code fixe en fonction de la réponse de Nick:

global xlist2a std_agreedisagree1_1_a std_revagreedisagree1_2_a std_revagreedisagree1_3_a std_agreedisagree1_4_a std_revagreedisagree1_10_a std_revagreedisagree1_5_a 
pca $xlist2a if zgroupa10==1 
screeplot, yline(1)  
rotate, clear  
pca $xlist2a if zgroupa10==1, com(3) 
rotate, varimax blanks (.30) 
predict pca5_p1b pca5_p2b pca5_p3b, score 
+2

Les bonnes questions ici montrent ** quelques ** tentative de code. –

+0

Merci, j'ai modifié la publication pour inclure le code. – emily004

+0

Merci d'avoir ajouté du code, mais le code ci-dessus exécute 'pca' sur ** toutes ** les observations pour certaines variables et ensuite' predict' sur toutes les observations. Ce n'est pas ce que vous devriez faire, mais votre commentaire ci-dessous ma réponse implique que votre code réel appliqué l'approche nécessaire. –

Répondre

0

Quel code avez-vous essayé? La plus simple des expériences montre que la même approche fonctionne également dans Stata:

. sysuse auto, clear 
(1978 Automobile Data) 

. pca headroom trunk length displacement if foreign 

Principal components/correlation     Number of obs =   22 
               Number of comp. =   4 
               Trace   =   4 
    Rotation: (unrotated = principal)   Rho    =  1.0000 

    -------------------------------------------------------------------------- 
     Component | Eigenvalue Difference   Proportion Cumulative 
    -------------+------------------------------------------------------------ 
      Comp1 |  1.93666  .656823    0.4842  0.4842 
      Comp2 |  1.27983  .615381    0.3200  0.8041 
      Comp3 |  .664453  .545396    0.1661  0.9702 
      Comp4 |  .119057   .    0.0298  1.0000 
    -------------------------------------------------------------------------- 

Principal components (eigenvectors) 

    -------------------------------------------------------------------- 
     Variable | Comp1  Comp2  Comp3  Comp4 | Unexplained 
    -------------+----------------------------------------+------------- 
     headroom | 0.0288 0.7373 0.6749 0.0083 |   0 
      trunk | 0.2443 0.6496 -0.7199 -0.0090 |   0 
      length | 0.6849 -0.1313 0.1229 -0.7061 |   0 
    displacement | 0.6858 -0.1313 0.1054 0.7080 |   0 
    -------------------------------------------------------------------- 

. predict score1 score2 if !foreign 
(score assumed) 
(2 components skipped) 

Scoring coefficients 
    sum of squares(column-loading) = 1 

    ------------------------------------------------------ 
     Variable | Comp1  Comp2  Comp3  Comp4 
    -------------+---------------------------------------- 
     headroom | 0.0288 0.7373 0.6749 0.0083 
      trunk | 0.2443 0.6496 -0.7199 -0.0090 
      length | 0.6849 -0.1313 0.1229 -0.7061 
    displacement | 0.6858 -0.1313 0.1054 0.7080 
    ------------------------------------------------------ 

.

+0

Avant de ne pas insérer zgroup10 == 1, vous avez aidé à répondre à ma question, et j'ai inséré zgroup10 == 1 et cela a fonctionné. Merci pour votre patience. – emily004