2010-12-13 36 views
12

J'essaie d'apprendre R après avoir utilisé Stata et je dois dire que je l'aime. Mais maintenant j'ai quelques problèmes. Je suis sur le point de faire plusieurs régressions multiples avec Panel Data, donc j'utilise le package plm.Heteroscedasticity robustes erreurs standard avec le package PLM

Maintenant, je veux avoir les mêmes résultats avec plm dans R comme lorsque j'utilise la fonction lm et Stata lorsque j'effectue une régression robuste d'hétéroscedasticité et fixe d'entité.

Disons que j'ai un panel de données avec les variables Y, ENTITY, TIME, V1.

-je obtenir les mêmes erreurs standard dans R avec ce code

lm.model<-lm(Y ~ V1 + factor(ENTITY), data=data) 
coeftest(lm.model, vcov.=vcovHC(lm.model, type="HC1)) 

comme quand je joue cette régression dans Stata

xi: reg Y V1 i.ENTITY, robust 

Mais quand je joue cette régression avec le paquet plm je reçois d'autres erreurs-type

plm.model<-plm(Y ~ V1 , index=C("ENTITY","YEAR"), model="within", effect="individual", data=data) 
coeftest(plm.model, vcov.=vcovHC(plm.model, type="HC1)) 
  • Ai-je manqué de définir certaines options?
  • Est-ce que le modèle plm utilise un autre type d'estimation et si oui, comment?
  • Puis-je en quelque sorte les mêmes erreurs standard avec plm comme dans Stata avec , robust
+2

c'est quelque chose que vous demandez à mieux http://www.crossvalidated.com, ils seront en mesure de vous aider plus. Et ce serait bien d'avoir un code reproductible pendant que vous y êtes, ainsi que le résultat attendu. Cela efface souvent un problème assez rapidement. –

+3

Je ne connais pas stata, mais on dirait que votre régression stata est un modèle linéaire regroupé de Y = a0 + a1 * V1 + a2 * ENTITY + epsilon avec het se robuste, ce que vous faites avec 'lm' , de sorte que les résultats correspondent. Dans le modèle 'plm', vous faites une régression FE Y = a0 + a1 * V1 + ui + epsilon, où ui est la FE pour chaque" individu ", qui par' index' vous avez spécifié être ENTITY. Donc je pense que vos résultats stata et R correspondent dans le premier cas parce que vous faites un panel groupé avec l'entité comme ind var dans les deux cas. Mais je ne sais pas stata. –

Répondre

2

Est-il possible que votre code Stata est différent de ce que vous faites avec plm?

option « dans les » s » plm avec des effets « individuels » signifie un modèle de la forme:

yit = a + Xit*B + eit + ci 

Qu'est-ce que plm fait est de rabaisser les coefficients afin que ci passe de l'équation.

yit_bar = Xit_bar*B + eit_bar 

De sorte que le suffixe «barre» signifie que chaque variable a sa moyenne soustraite. La moyenne est calculée au fil du temps et c'est pourquoi l'effet est pour l'individu. Vous pourriez également avoir un effet de temps fixe qui serait commun à tous les individus, auquel cas l'effet serait également dans le temps (ce qui n'est pas pertinent dans ce cas).

Je ne suis pas sûr de ce que fait la commande "xi" dans STATA, mais je pense que cela élargit une interaction non? Ensuite, il me semble que vous essayez d'utiliser une variable fictive par ENTITY comme l'a souligné @richardh.

Pour que vos codes Stata et plm correspondent, vous devez utiliser le même modèle.

Vous avez deux options: (1) vous xtset vos données dans stata et utilisez l'option xtreg avec le modificateur fe ou (2) vous utilisez plm avec l'option de regroupement et un dummy par ENTITY.

correspondants Stata à R:

xtset entity year 
xtreg y v1, fe robust 

correspondants plm à Stata:

plm(Y ~ V1 + as.factor(ENTITY) , index=C("ENTITY","YEAR"), model="pooling", effect="individual", data=data) 

utiliser ensuite vcovHC avec l'un des modificateurs. Assurez-vous de vérifier cette paper qui a une bonne revue de tous les mécanismes derrière les options "HC" et la façon dont ils affectent la matrice de covariance de la variance.

Espérons que cela aide.

4

Par défaut, le package plm n'utilise pas le exact même petite correction d'échantillon pour les données de panneau comme Stata. Cependant dans la version 1.5 de plm (sur CRAN) vous avez une option qui imitera ce que fait Stata.

plm.model<-plm(Y ~ V1 , index=C("ENTITY","YEAR"), model="within", 
    effect="individual", data=data) 
coeftest(plm.model, vcov.=function(x) vcovHC(x, type="sss")) 

Cela devrait produire le même cluster par des erreurs standard du groupe comme dans Stata (mais comme mentionné dans les commentaires, sans exemple reproductible et les résultats que vous attendez est plus difficile de répondre à la question).

Pour plus d'informations sur ce sujet et sur certains points de référence des SE robustes R et Stata, voir Fama-MacBeth and Cluster-Robust (by Firm and Time) Standard Errors in R.

Voir aussi:

+0

'plm'' type = "sss" 'ne reproduit pas le petit ajustement d'échantillon de Stata exactement parce que Stata a une ordonnée à l'origine dans son modèle FE et utilise donc une quantité différente de coefficients dans l'ajustement. 'plm' n'a pas cette interception et, par conséquent, utilise" quantité de coefficients - 1 "par rapport à Stata dans l'ajustement. Pour les petits échantillons, cela donne des résultats légèrement différents mais passeront inaperçus dans les grands échantillons. – Helix123

+0

@ Helix123 Effectivement. J'en ai discuté avec les auteurs de 'plm' et, globalement, il n'est pas clair quelle est la justification théorique pour Stata d'inclure l'interception dans ces calculs. Bien qu'une interception * can * puisse être calculée et que 'plm' le fasse aussi bien si elle est demandée (' within_intercept() ', peut-être encore dans SVN), elle semble être quelque peu artificielle dans le contexte des modèles' within'. Pour le moment, il n'a pas semblé judicieux d'inclure une réplique "numériquement exacte" des SE groupées de Stata ... Ceci dit, Gretl semble répliquer ces calculs * exactement à la Stata. – landroni