【问题标题】:R/plm: Cannot estimate random effects model due to error (system is computationally singular)?R/plm:由于错误(系统在计算上是奇异的)而无法估计随机效应模型?
【发布时间】:2014-04-14 18:46:32
【问题描述】:

我想使用 PLM 包估计 R 中的一些面板数据模型。由于理论知识有限,我严格按照“计量经济学学院”(code here)的指示进行操作。我根据我的数据(自己的依赖/独立变量)自定义了该代码,但没有更改所有其他语法/公式。

现在问题来了:

除了随机效应模型外,所有模型都可以进行估计,也可以对其结果进行总结和解释。在这里我收到以下错误消息:

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)。作为额外的自变量,考虑了资产负债表上资产的平均总和。

再次重申:实际上一切正常,只有最后一个模型(随机)会产生所述错误。

最终问题可能是由比率的定义引起的?它们是使用变量“mean”定义的(它本身也是一个独立变量)?

编辑: 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
  • 欢迎来到 StackOverflow!您能否在此处粘贴引发此错误的一段代码?使用少量数据,将其设为reproducible 会更好。谢谢
  • 错误消息意味着矩阵X.m 其算法试图反转其内积(solve(crossprod(X.m)))没有满秩——列之间存在(至少在数字上)线性相关性的X.m。这可能是由于:1)试图估计的参数多于您的观察值 2)某些列之间的完美相关性。如果没有可重复的示例或至少有一个关于错误的traceback(),很难说更多。
  • 我编辑了我的问题并添加了回溯代码输出。

标签: r random panel regression plm


【解决方案1】:

如果您的model.matrix 包含非常大的值以及非常小的值,solve 可能无法通过计算求解线性方程组。因此,如果是这种情况,请查看model.matrix(sd1 ~ x, data=pdata)。如果是这样,请尝试重新调整一些变量(例如,将 oder 除以 100 或 1000 [也 log() 有时也有意义)。注意,系数的解释会随着尺度的变化而变化!

【讨论】:

    猜你喜欢
    • 2020-08-24
    • 2018-06-20
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    相关资源
    最近更新 更多