[编辑 2]
通过添加random.method="walhus"
到 plm(也适用于random.method="nerlove"
)并继续使用 Between(variable)
变量的集群/时间平均值来解决它
我想为不平衡的面板数据创建一个回归模型,并发现我必须实施一个相关的随机效应模型,因为我的变量之一(gind
,相应公司的行业,例如房地产、信息技术等)是时间不变的。数据来自 Compustat 数据库。
随机效应模型如下所示:
random<- plm(fsts~firm_size+rota+debt_to_assets+r_d_intensity+gind,
data=firm_ceo,index=c("gvkey", "fyear"), model="random")
gvkey
是唯一的公司标识符,fyear
是相应的年份。
fsts
是国外销售额与总销售额的比率(衡量公司国际化程度),rota
是衡量公司业绩(总资产回报率)的指标。
数据是不平衡的,因为每家公司都在 1-6 年之间被观察到。
要将模型转换为相关的随机效应模型(也称为“中间模型”、“Mundlak 过程”或“混合方法”),我读到必须添加随时间变化的变量的聚类均值(所以在我的情况firm_size, rota, debt_to_assets
和r_d_intensity
)。
在一篇关于该主题的论文 ( https://www.researchgate.net/publication/336608555_On_Ignoring_the_Random_Effects_Assumption_in_Multilevel_Models_Review_Critique_and_Recommendations ) 中,他们展示了如何在 R 中实施一个示例。可以想象它显示了 500 家公司,每家公司都观察了 10 年。x 是时变变量,z 是时不变变量。这是生成模型的代码(从上述论文中复制):
N <- 500
M <- 10
lead_n <- as.factor(rep(1:N,M))
a <- rep(rnorm(N),M)
z <- rep(round(25 + 2*rnorm(N) + .2*a))
rater <- rep(1:M, each = N)
x <- a + rnorm(N*M)
y <- .5*x + 5*a - .5*z + 2*rnorm(N*M)
然后他们像这样计算 x 的聚类平均值:
x_cl <- rep(aggregate(x, list(lead_n), mean)[,2],M)
完成的 CRE 模型如下所示:
pdata <- pdata.frame(data.frame(y,x,z,x_cl,lead_n), index = "lead_n")
m6 <- plm(y ~ x + x_cl + z, data = pdata, model = "random")
我现在的问题是如何修改计算x_cl
以使其适合我的数据和模型?如何修改lead_n?如何执行计算,以便为每个公司 (= gvkey
) 重新计算以年为单位的时间跨度?
总的来说,我对 R 和编程并不是很有经验,所以我无法理解它。
Between(variable)
当然,也欢迎对可能已经实现整个问题的其他 R 包提出建议(类似于下面的)!
我尝试按照以下链接Estimating within-between model specification using plm中描述的实现来计算集群意味着,并提出了这个模型:
cre<- plm(fsts~firm_size+rota+debt_to_assets+r_d_intensity+gind+
Between(firm_size,na.rm=TRUE)+Between(rota,na.rm=TRUE)+
Between(debt_to_assets,na.rm=TRUE)+Between(r_d_intensity, na.rm=TRUE),
data=firm_ceo,index=c("gvkey", "fyear"),
model="random")
不幸的是,这会引发错误:
Error in solve.default(crossprod(ZBeta)) :
Lapack routine dgesv: system is exactly singular: U[8,8] = 0
我认为发生错误是因为面板不平衡。这是真的吗?(它不能源于数据中的 NA,因为na.rm=TRUE
无论如何我都事先从数据中添加并删除了所有 NA 值)
[编辑]
经过更多的调查,我发现这个错误不会发生,因为面板不平衡,而是因为时间平均值和变量之间存在多重共线性(所以firm_size
和Between(firm_size)
相关,rota
和Between(rota)
相关等),这显然不足为奇。
当添加变量的平均值时,总是会出现结构多重共线性。我已经尝试标准化(scale(x)
)集群意味着,但错误仍然存在。
为什么我的数据似乎有问题,而这是这种回归模型的推荐方法?