0

[编辑 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 和编程并不是很有经验,所以我无法理解它。

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_sizeBetween(firm_size)相关,rotaBetween(rota)相关等),这显然不足为奇。

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

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

4

0 回答 0