2010-12-13 57 views
12

我想在使用Stata後學習R,我必須說我喜歡它。但是現在我遇到了一些麻煩。我將要使用面板數據進行多次迴歸,因此我使用的是plm軟件包。使用PLM包的異方差強健的標準錯誤

現在我想與R中plm相同的結果,當我使用lm功能和Stata的,當我進行異穩健和實體固定迴歸。

假設我有一個面板數據集,其變量爲Y,ENTITY,TIME,V1

我得到的R相同的標準誤差與此代碼

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

,當我在Stata

xi: reg Y V1 i.ENTITY, robust 

執行此迴歸但是,當我與plm包執行此迴歸我得到其他標準錯誤

plm.model<-plm(Y ~ V1 , index=C("ENTITY","YEAR"), model="within", effect="individual", data=data) 
coeftest(plm.model, vcov.=vcovHC(plm.model, type="HC1)) 
  • 我錯過了設置一些選項嗎?
  • plm模型是否使用其他類型的估計,如果是的話,該如何?
  • 我以某種方式可以有相同的標準誤差與plm如在Stata與, robust
+2

這是你最好的http://www.crossvalidated.com問,他們將能夠幫助你更多。如果你有一些可重複的代碼,以及預期的結果,這將是很好的。這通常會更快地解決問題。 – 2010-12-14 10:09:02

+3

我不知道stata,但它看起來像你的stata迴歸是一個合併的線性模型Y = a0 + a1 * V1 + a2 * ENTITY + epsilon與健壯的het se,這就是你用'lm' ,所以結果相符。在「plm」模型中,您正在進行FE迴歸Y = a0 + a1 * V1 + ui + epsilon,其中ui是每個「個人」的FE,按您指定的「索引」爲ENTITY。所以我認爲你的stata和R結果在第一種情況下是匹配的,因爲在這兩種情況下你正在做一個實體作爲ind var的合併面板。但我不知道stata。 – 2011-01-12 00:54:28

回答

2

有沒有可能是你的塔塔代碼是從您與PLM做什麼不同?

plm的‘內’與‘個人’效果選項意味着形式的模型:

yit = a + Xit*B + eit + ci 

什麼plm確實是貶低係數,使得詞從公式下降。

yit_bar = Xit_bar*B + eit_bar 

這樣,「bar」後綴意味着每個變量的平均值被減去。平均值是隨着時間的推移而計算的,這就是爲什麼這個效應是針對個人的。你也可以有一個固定的時間效應,這對所有的人來說都是共同的,在這種情況下,效果也會隨着時間的推移(儘管如此,這與此無關)。

我不確定在STATA中「xi」命令是幹什麼的,但我認爲它擴展了交互權限?那麼在我看來,您正試圖按照@richardh強調的每個ENTITY使用一個虛擬變量。

對於你的Stata和plm代碼來匹配你必須使用相同的模型。您有兩種選擇:(1)您在stata中設置您的數據,並使用fe修飾符的xtreg選項;或者(2)您使用帶有池選項的plm和每個ENTITY使用一個虛擬設備。

匹配的Stata到R:

xtset entity year 
xtreg y v1, fe robust 

匹配PLM與Stata:

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

然後使用vcovHC與改性劑中的一個。請務必檢查此paper,其中有「HC」選項背後的所有機制以及它們影響方差協方差矩陣的方式。

希望這會有所幫助。

4

默認情況下,plm包不會像Stata一樣使用面板數據的相同小樣本校正。然而在版本號爲plm(在CRAN上)中,您可以選擇模擬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")) 

這應該產生按組標準誤差聚集在Stata的相同(但在評論中提到的,不重複的例子,和什麼樣的結果你希望它是很難回答的問題)。

欲瞭解更多有關此和R和Stata健壯SEs的一些基準的討論,請參閱Fama-MacBeth and Cluster-Robust (by Firm and Time) Standard Errors in R

參見:

+0

'plm''s'type =「sss」'不能完全複製Stata的小樣本調整,因爲Stata在其有限元模型中有截距,因此在調整中使用了不同數量的係數。 'plm'沒有這個截距,因此在調整時使用相對於Stata的「係數量-1」。對於小樣本,這會給出稍微不同的結果,但在大樣本中不會被注意到。 – Helix123 2016-08-07 07:22:57

+0

@ Helix123確實。我已經和'plm'的作者討論過這個問題,總的來說,Stata在這些計算中包含截距的理論依據並不清楚。雖然攔截*可以計算出來,如果需要的話,也可以用'plm'('within_intercept()',可能仍然在SVN中),它似乎在'內部'模型的上下文中是一種人爲的概念。現在,包含一個「數值精確」的Stata聚簇SE複製似乎並不明智......這就是說,Gretl似乎複製了這些計算*完全符合Stata。 – landroni 2016-08-08 07:03:40