2010-12-13 12 views
12

Ich versuche R nach dem Verwenden von Stata zu lernen, und ich muss sagen, dass ich es liebe. Aber jetzt habe ich einige Probleme. Ich werde einige Mehrfachregressionen mit Panel Data durchführen, daher verwende ich das plm Paket.Heteroscedasticity robuste Standardfehler mit dem PLM-Paket

Jetzt möchte ich die gleichen Ergebnisse mit plm in R wie wenn ich die lm Funktion und Stata verwenden, wenn ich eine heteroskedastische robust und Entität feste Regression durchführen.

Lassen Sie uns sagen, dass ich ein Paneldatensatz mit den Variablen haben Y, ENTITY, TIME, V1.

Ich erhalte die gleichen Standardfehler in R mit diesem Code

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

als wenn ich diese Regression in Stata führen

xi: reg Y V1 i.ENTITY, robust 

Aber wenn ich diese Regression mit dem plm Paket ausführen ich andere Standardfehler

plm.model<-plm(Y ~ V1 , index=C("ENTITY","YEAR"), model="within", effect="individual", data=data) 
coeftest(plm.model, vcov.=vcovHC(plm.model, type="HC1)) 
  • Habe ich einige Optionen verpasst?
  • Verwendet das plm Modell eine andere Art von Schätzung und wenn ja wie?
  • Kann ich in irgendeiner Weise mit plm wie in Stata die gleichen Standardfehler haben mit , robust
+2

dies ist bei http://www.crossvalidated.com etwas, das man besser fragen, werden sie in der Lage sein, Ihnen mehr zu helfen. Und es wäre schön, einen reproduzierbaren Code zu haben, während Sie dabei sind, zusammen mit dem erwarteten Ergebnis. Dadurch wird das Problem oft schneller behoben. –

+3

Ich kenne Stata nicht, aber es sieht so aus, als wäre deine Stataregression ein gepooltes lineares Modell von Y = a0 + a1 * V1 + a2 * ENTITY + epsilon mit robustem het se, was du mit 'lm' machst , so stimmen die Ergebnisse überein. Im 'plm'-Modell machen Sie eine FE-Regression Y = a0 + a1 * V1 + ui + epsilon, wobei ui die FE für jedes "Individuum" ist, welches durch' Index 'als ENTITY angegeben wurde. Ich denke also, dass Ihre Stata- und R-Ergebnisse im ersten Fall übereinstimmen, weil Sie in beiden Fällen ein Pool-Panel mit Entity als Ind-Variable erstellen. Aber ich kenne Stata nicht. –

Antwort

2

Ist es möglich, dass Ihr Stata Code unterscheidet von dem, was Sie mit plm tun?

plm ‚s‚in‘Option mit‚individuell‘-Effekte bedeutet ein Modell der Form:

yit = a + Xit*B + eit + ci 

Was plm tut, ist die Koeffizienten zu erniedrigen, so dass ci aus der Gleichung fällt.

yit_bar = Xit_bar*B + eit_bar 

So, dass das Suffix "bar" bedeutet, dass für jede Variable der Mittelwert subtrahiert wurde. Der Mittelwert wird über die Zeit berechnet und deshalb ist der Effekt für das Individuum. Sie könnten auch einen festen Zeiteffekt haben, der allen Individuen gemeinsam wäre, in welchem ​​Fall der Effekt auch durch die Zeit wäre (das ist in diesem Fall jedoch irrelevant).

Ich bin nicht sicher, was der "xi" Befehl in STATA tut, aber ich denke, dass es eine Interaktion richtig erweitert? Dann scheint es mir, dass Sie versuchen, eine Dummy-Variable pro ENTITY zu verwenden, wie von @richardh hervorgehoben wurde.

Damit Ihre Stata- und plm-Codes übereinstimmen, müssen Sie dasselbe Modell verwenden.

Sie haben zwei Möglichkeiten: (1) Sie setzen Ihre Daten in Stata und verwenden die Option xtreg mit dem Modifikator fe oder (2) verwenden Sie plm mit der Pooling-Option und einen Dummy pro ENTITY.

Passende Stata bis R:

xtset entity year 
xtreg y v1, fe robust 

Passende PLM Stata:

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

Dann vcovHC mit einem der Modifikatoren verwenden. Stellen Sie sicher, dass Sie diese überprüfen, die eine schöne Übersicht über alle Mechanismen hinter den "HC" -Optionen und die Art, wie sie die Varianz-Kovarianz-Matrix beeinflussen, hat.

Hoffe, das hilft.

4

Standardmäßig verwendet das plm-Paket nicht die genaue gleiche kleine-Sample-Korrektur für Panel-Daten wie Stata. In Version 1.5 von plm (auf CRAN) haben Sie jedoch eine Option, die emuliert, was Stata macht.

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")) 

Dies sollte das gleiche von der Gruppe Standard-Fehlern wie in Stata gruppiert ergeben (aber wie in den Kommentaren erwähnt, ohne ein reproduzierbares Beispiel und welche Ergebnisse Sie erwarten, dass es schwieriger ist, die Frage zu beantworten).

Weitere Erläuterungen zu diesem und einigen Benchmarks von R- und Stata-robusten SEs finden Sie unter Fama-MacBeth and Cluster-Robust (by Firm and Time) Standard Errors in R. auch

Siehe:

+0

'plm's' type = "sss" 'repliziert die kleine Sample-Anpassung von Stata nicht exakt, da Stata in seinem FE-Modell einen Achsenabschnitt hat und daher eine unterschiedliche Menge an Koeffizienten in der Anpassung verwendet. 'plm' hat diesen Abschnitt nicht und verwendet daher" Anzahl der Koeffizienten - 1 "relativ zu Stata in der Anpassung. Bei kleinen Proben ergeben sich leicht abweichende Ergebnisse, die bei großen Proben jedoch nicht erkannt werden. – Helix123

+0

@ Helix123 Tatsächlich. Ich habe dies mit den Autoren von 'plm' diskutiert und insgesamt ist nicht klar, was die theoretische Begründung für Stata ist, um den Schnittpunkt in diese Berechnungen aufzunehmen. Während ein Intercept * can * berechnet werden kann und 'plm' dies auch tut (' within_intercept() ', möglicherweise noch in SVN), scheint es im Kontext von" inneren "Modellen ein künstliches Konzept zu sein. Vorerst schien es nicht klug, ein "numerisch exaktes" Replikat von Stata-Clustered-SEs einzubeziehen ... Dies besagt, dass Gretl diese Berechnungen * exakt * à la Stata zu replizieren scheint. – landroni

Verwandte Themen