原因是index=
选项是plm()
内部使用pdata.frame()
它期望第一列是"id"
第二列是"time"
如果相应的名称没有指定index=(<id>, <time>)
From ?pdata.frame
我们可以读到:
索引参数指示面板的尺寸。有可能:
- 两个字符串组成的向量,其中包含个人姓名和时间索引,
- 一个字符串,它是各个索引变量的名称。在这种情况下,时间索引会自动创建并
添加一个名为“时间”的新变量,假设连续且
按照原始数据的顺序升序时间段,...
下面的例子将帮助我们理解这一点。首先我们加载Grunfeld
数据,看起来像这样。
library(plm)
data(Grunfeld)
head(Grunfeld, 3)
# firm year inv value capital
# 1 1 1935 317.6 3078.5 2.8
# 2 1 1936 391.8 4661.7 52.6
# 3 1 1937 410.6 5387.1 156.9
第一列是 ID,第二列是时间。我们来估计一个模型。
summary(plm(inv ~ value + capital, data=Grunfeld,
model="within"))$coe
# Estimate Std. Error t-value Pr(>|t|)
# value 0.1101238 0.01185669 9.287901 3.921108e-17
# capital 0.3100653 0.01735450 17.866564 2.220007e-42
现在,当我们混淆第一列和第二列时,
summary(plm(inv ~ value + capital, data=Grunfeld[c(2, 1, 3:5)],
model="within"))$coe
# Estimate Std. Error t-value Pr(>|t|)
# value 0.1167978 0.006331302 18.447672 3.586220e-43
# capital 0.2197066 0.032296107 6.802881 1.503653e-10
结果不同。但当我们告诉plm
by index=(<id>, <time>)
使用哪些列,
summary(plm(inv ~ value + capital, data=Grunfeld[c(2, 1, 3:5)],
index=c("firm", "year"),
model="within"))$coe
# Estimate Std. Error t-value Pr(>|t|)
# value 0.1101238 0.01185669 9.287901 3.921108e-17
# capital 0.3100653 0.01735450 17.866564 2.220007e-42
我们得到了旧的结果。如果我们完全混淆了列,
summary(plm(inv ~ value + capital, data=Grunfeld[c(3:5, 1, 2)],
model="within"))$coe
# Error
plm()
确实很困惑:)但是就像以前一样,当我们提供帮助时plm()
它的行为符合预期并再次产生right result.
summary(plm(inv ~ value + capital, data=Grunfeld[c(3:5, 1, 2)],
index=c("firm", "year"),
model="within"))$coe
# Estimate Std. Error t-value Pr(>|t|)
# value 0.1101238 0.01185669 9.287901 3.921108e-17
# capital 0.3100653 0.01735450 17.866564 2.220007e-42
Notice,您实际上只是在计算公司固定效应。如果您打算计算具有公司和年份固定效应的模型,让我们将其作为 LSDV 模型进行计算,
summary(lm(inv ~ value + capital + factor(firm) + factor(year) - 1, Grunfeld))$coe[1:2, ]
# Estimate Std. Error t value Pr(>|t|)
# value 0.1177159 0.01375128 8.560354 6.652575e-15
# capital 0.3579163 0.02271901 15.754043 5.453066e-35
我们看到这些值与上面不同,因为plm
到目前为止,s 刚刚包含了固定固定效应,请参阅:
summary(lm(inv ~ value + capital + factor(firm) - 1, Grunfeld))$coe[1:2, ]
# Estimate Std. Error t value Pr(>|t|)
# value 0.1101238 0.01185669 9.287901 3.921108e-17
# capital 0.3100653 0.01735450 17.866564 2.220007e-42
为了得到正确的结果,我们还需要指定effect="twoways"
以获得公司和年度固定效应。
summary(plm(inv ~ value + capital, data=Grunfeld,
index=c("firm", "year"),
model="within", effect="twoways"))$coe
# Estimate Std. Error t-value Pr(>|t|)
# value 0.1177159 0.01375128 8.560354 6.652575e-15
# capital 0.3579163 0.02271901 15.754043 5.453066e-35