由于错误(系统在计算上是奇异的),无法估计随机效应模型。

5
我想使用PLM包在R中估计一些面板数据模型。由于在理论方面的知识受限,我严格按照“计量经济学学院”(这里是代码)的说明进行操作。我根据自己的数据(独立/依赖变量)定制了该代码,但没有改变其他语法/公式。
现在出现了问题:
所有模型都可以估计,其结果也可以总结和解释,除了随机效应模型。在这里,我收到以下错误消息:
Error in solve.default(crossprod(X.m)) : 
  system is computationally singular: reciprocal condition number = 9.57127e-023

有没有人能给我指点一下这个错误实际上是什么意思?可能的潜在原因是什么,我应该如何更正代码以获得结果?

编辑: 更准确地说,这是我使用的R代码的部分:

# read in data
mydata<- read.csv2("Panel.csv")
attach(mydata)

# define dependant variable
    sd1 <- cbind(sd)

# define independant variable
x <- cbind(ratio1, ratio2, ratio3, ratio4, mean)

# Set data as panel data
pdata <- plm.data(mydata, index=c("id","t"))

# Pooled OLS estimator
pooling <- plm(sd1 ~ x, data=pdata, model= "pooling")
summary(pooling)

# Between estimator
between <- plm(sd1 ~ x, data=pdata, model= "between")
summary(between)

# First differences estimator
firstdiff <- plm(sd1 ~ x, data=pdata, model= "fd")
summary(firstdiff)

# Fixed effects or within estimator
fixed <- plm(sd1 ~ x data=pdata, model= "within")
summary(fixed)

# Random effects estimator
random <- plm(sd1 ~ x, data=pdata, model= "random")
summary(random)

由于政策限制,我不允许上传数据。但是我可以提供信息,这是资产负债表数据。被解释的因变量是一段时间内资产负债表余额的标准偏差,应该由不同的资产负债表余额解释。这些主要是类型为“位置a/平均值”的比率(1到4的比率)。作为附加独立变量,考虑了资产负债表上的资产平均总额。
再次强调:实际上一切都正常,只有最后一个模型(随机)产生了所述错误。
最终问题可能是由比率定义引起的吗?它们使用变量“平均值”(这也是自己的独立变量)定义?
编辑:Traceback-Code
> random <- plm(sd1 ~ x, data=pdata, model= "random")
Error in solve.default(crossprod(X.m)) : 
  system is computationally singular: reciprocal condition number = 1.65832e-022
> traceback()
8: solve.default(crossprod(X.m))
7: solve(crossprod(X.m))
6: diag(solve(crossprod(X.m)) %*% crossprod(X.sum))
5: swar(object, data, effect)
4: ercomp.formula(formula, data, effect, method = random.method)
3: ercomp(formula, data, effect, method = random.method)
2: plm.fit(formula, data, model, effect, random.method, inst.method)
1: plm(sd1 ~ x, data = pdata, model = "random")

也许我需要补充说明一下,我正在处理不平衡面板数据。汇总的池估计结果显示:n=16,T=18-40,N=455。 - user3405263
1
欢迎来到StackOverflow!您能否在此处粘贴引发错误的代码片段?如果有一些数据,那就更好了,这样可以使其可重现。谢谢。 - llrs
3
错误信息意味着算法试图求逆的矩阵X.m(其内积为solve(crossprod(X.m)))没有完全秩——X.m的列之间存在(至少在数值上)线性依赖关系。这可能是由于以下原因之一:1)尝试估计比观测量还要多的参数;2)某些列之间存在完美相关性。如果没有可重现的示例或错误的traceback(),很难进一步说明。 - fabians
我编辑了我的问题并添加了回溯代码输出。 - user3405263
1个回答

1
如果您的model.matrix包含非常大和非常小的值,solve可能无法通过计算解决线性方程组。因此,如果是这种情况,请查看model.matrix(sd1 ~ x, data=pdata)。如果是这样,请尝试重新调整一些变量的比例(例如乘以或除以100或1000 [有时也可以使用log())。请注意,由于比例的变化,系数的解释也会发生变化!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接