我正在使用plm
中的R
软件包对一个18岁,88个人的相对较大的小组进行分析。
在其他分析中,我想计算模型的随机效应估计量,但出现此错误:
Error in solve.default(crossprod(ZBeta)) :
system is computationally singular: reciprocal condition number = 3.27049e-18
现在,我知道这是由于以下事实:计算R将非常小的数字视为零。这使得不可能计算协方差矩阵的逆。在其他packages and functions中,可以设置一个公差值,以防止R将某个数量级近似为零。例如,就我而言,我可以声明tol=1e-19
解决我的问题,但是显然plm
不接受tol
选项。
有人可以建议其他任何命令来为此程序包设置更大的容差吗?
traceback()
6: solve.default(crossprod(ZBeta))
5: solve(crossprod(ZBeta))
4: ercomp.formula(formula, data, effect, method = random.method,
models = random.models, dfcor = random.dfcor)
3: ercomp(formula, data, effect, method = random.method, models = random.models,
dfcor = random.dfcor)
2: plm.fit(formula, data, model, effect, random.method, random.models,
random.dfcor, inst.method)
1: plm(log(tot_events + 1) ~ var_log, data = pdata_ctrls_num, model = "random",
na.action = na.omit)
编辑:
我终于解决了该问题,将random.method
从默认的"swar"
更改为"walhus"
。
也许另一种可能性是调整restrict.matrix
选项,以避免数量如此之少,但是我不确定。
这只是一种解决方法,如果可以更改公差设置,我会感到更加高兴。