问题描述
[编辑 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 和编程的总体经验不是很丰富,所以我无法理解它。
当然也欢迎提出有关可能已经实现整个问题的其他 R 包的建议(类似于下面的 Between(variable)
)!
我尝试按照以下链接 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),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)
相关,{{1} } 和 rota
相关等等,这显然不足为奇。
在添加变量的平均值时总是会出现结构多重共线性。
我已经尝试标准化 (Between(rota)
) 集群意味着但错误仍然存在。
为什么我的数据似乎有问题,而这是这种回归模型的推荐方法?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)