use*_*263 6 random regression r panel plm
我想使用 PLM 包估计 R 中的一些面板数据模型。由于理论知识有限,我严格遵循“计量经济学学院”(代码此处)的指示。我根据我的数据(自己的因变量/独立变量)定制了该代码,但没有更改所有其他语法/公式。
现在问题来了:
除随机效应模型外,所有模型都可以估计,并且它们的结果也可以总结和解释。这里我收到以下错误消息:
Error in solve.default(crossprod(X.m)) :
system is computationally singular: reciprocal condition number = 9.57127e-023
Run Code Online (Sandbox Code Playgroud)
有谁可以给我提示这个错误的实际含义吗?根本原因可能是什么?我必须如何更正代码才能获得结果?
编辑: 更准确地说,这是我使用的 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)
Run Code Online (Sandbox Code Playgroud)
由于政策限制,我无法上传数据。但我可以提供的信息是,这是资产负债表数据。因变量是资产负债表头寸随时间变化的标准差,应通过不同的资产负债表头寸来解释。这些主要是“位置a/平均值”类型的比率(比率1至4)。作为附加自变量,考虑资产负债表上资产的平均总和。
再说一次:实际上一切都有效,只有最后一个模型(随机)产生所述错误。
最终问题可能是由比率的定义引起的?它们是使用变量“mean”(它本身也是一个独立变量)定义的?
编辑:回溯代码
> 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")
Run Code Online (Sandbox Code Playgroud)
如果您model.matrix限制非常大的值和非常小的值,solve可能无法通过计算求解线性方程组。因此,看看model.matrix(sd1 ~ x, data=pdata)是否是这种情况。如果是这样,请尝试重新缩放一些变量(例如,乘以或除以 100 或 1000 [log()有时也有意义)。请注意,系数的解释会因尺度的变化而变化!