我在使用某种面板数据结构(但没有时间索引)复制固定效果估计时遇到问题。
我已经看到有关FE模型的几个很好的解释以及在R中的一些简单应用。但我在一些论文中工作,其中不包括时间索引而是三个不同的索引(人,村,块)。块是FE(某个行政单位)。
这是作者所做的(FE估计):
以下是他们的一些结果:
问题:我想复制第3栏,系数和强大的SE。
(链接到数据:https://www.aeaweb.org/articles?id=10.1257/aer.20150474)
到目前为止我的方法:
想出一个主意:
# making up some data
person_id <- c(1,3,4,5,7,8)
person_id <- as.integer(person_id) # integer
village_id <- c(1,1,1,2,2,2)
village_id <- as.integer(village_id) # # integer
block <- c("a","a","b","b","c","c") # character
block <- as.factor(block) # factor
treat <- c(0,1,1,0,1,0) # numeric
treat <- as.integer(treat) # integer
outcome <- c(13,7,8,22,91,2) # numeric
# combining data
df <- cbind(person_id, village_id, block, outcome, treat)
df <- as.data.frame(df)
# converting data, not really necessary
pdata <- plm.data(df, index=c("person_id", "village_id"))
# just for comparison
lm(outcome ~ treat, data=df) # no problem
lm(outcome ~ treat + block, data=df) # no problem
# using panel data structure, error: empty model
FE <- plm(outcome ~ treat, data=pdata, method="within")
# alternative, , error: empty model
FE <- plm(outcome ~ treat, data=pdata, method="within", index=c("person_id", "village_id"))
不可能仅仅使用pdata <- plm.data(df, index=c("person_id", "village_id", "block"))
中的3个索引创建面板数据,但我无法说明原因。似乎R仍将这些指数解释为&#34; time&#34;。
我设法建立了一个合并模型(这会产生完美的系数,不知道为什么,我想要一个内部模型):
pooling<- plm(DV_dap ~ gotminikit + paddyarea + block, data=r_farmlevel_year2, model="pooling", index=c("farmer_id", "village_id")) # coef 393.768 fits!
并调整了稳健SE的计算(只是反复试验):
coeftest(pooling, vcov=pvcovHC(pooling, method="arellano", cluster="time", type="HC0")) # 135.377
coeftest(pooling, vcov=pvcovHC(pooling, method="arellano", cluster="time", type="HC1")) # 135.927
coeftest(pooling, vcov=pvcovHC(pooling, method="arellano", cluster="time", type="HC2")) # 136.705 - pretty close!
coeftest(pooling, vcov=pvcovHC(pooling, method="arellano", cluster="time", type="HC3")) # 138.087
我没有足够的计量经济学背景来决定这些SE计算方法。但是它们都没有产生给定数量的136.410。
线性模型(如建议的那样)让我非常接近结果,但并不能产生完美的匹配:
lmodel <- lm(DV_dap ~ r_farmlevel_year2$gotminikit + r_farmlevel_year2$paddyarea + r_farmlevel_year2$block)
coeftest(lmodel , vcov = sandwich) # coef 393.768 SE 137.775
我将不胜感激任何暗示:)