如何计算 R 中不平衡面板数据的相关随机效应模型 (CRE) 中变量的聚类均值?

问题描述

[编辑 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_assetsr_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_sizeBetween(firm_size) 相关,{{1} } 和 rota 相关等等,这显然不足为奇。

添加变量的平均值时总是会出现结构多重共线性。 我已经尝试标准化 (Between(rota)) 集群意味着但错误仍然存​​在。

为什么我的数据似乎有问题,而这是这种回归模型的推荐方法

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)