我不断收到这样的错误:
Error in `coef<-.corARMA`(`*tmp*`, value = c(18.3113452983211, -1.56626248550284, :
Coefficient matrix not invertible
或像这样:
Error in gls(archlogfl ~ co2, correlation = corARMA(p = 3)) : false convergence (8)
与
gls
中的nlme
函数一起使用。前一个示例是
gls(archlogflfornma~nma,correlation=corARMA(p=3))
模型,其中archlogflfornma
是[1] 2.611840 2.618454 2.503317 2.305531 2.180464 2.185764 2.221760 2.211320
并且
nma
是[1] 138 139 142 148 150 134 137 135
您可以在后者中看到该模型,
archlogfl
是[1] 2.611840 2.618454 2.503317 2.305531 2.180464 2.185764 2.221760 2.211320
[9] 2.105556 2.176747
并且
co2
是[1] 597.5778 917.9308 1101.0430 679.7803 886.5347 597.0668 873.4995
[8] 816.3483 1427.0190 423.8917
我有R 2.13.1。
罗兰
最佳答案
@GavinSimpson在上面的评论中,尝试从10个观测值中估计具有5个参数的模型是非常有希望的,这是正确的。一般的经验法则是,数据点的数量至少应为参数的10倍,这是用于标准固定效果/回归参数的。 (通常,与回归参数相比,诸如AR参数之类的方差结构参数要难一些/需要更多的数据。)
也就是说,在理想世界中,甚至可以从过度拟合的模型中估计参数。让我们来看看会发生什么:
archlogfl <- c(2.611840,2.618454,2.503317,
2.305531,2.180464,2.185764,2.221760,2.211320,
2.105556,2.176747)
co2 <- c(597.5778,917.9308,1101.0430,679.7803,
886.5347,597.0668,873.4995,
816.3483,1427.0190,423.8917)
看一下数据,
plot(archlogfl~co2,type="b")
library(nlme)
g0 <- gls(archlogfl~co2)
plot(ACF(g0),alpha=0.05)
这是残差的自相关函数,具有95%的置信区间(请注意,这些是曲线置信区间,因此无论如何我们都希望约有1/20点落在这些边界之外)。
因此,这里确实有一些(图形)证据表明存在自相关。我们将使用一个详细输出的AR(1)模型(要了解估计这些参数的规模,您可能需要在Pinheiro和Bates 2000中进行深入研究:打印输出中显示的是参数,摘要中显示的是受约束的值...
g1 <- gls(archlogfl ~co2,correlation=corARMA(p=1),
control=glsControl(msVerbose=TRUE))
让我们看一下适合AR1之后还剩下什么:
plot(ACF(g1,resType="normalized"),alpha=0.05)
现在适合AR(2):
g2 <- gls(archlogfl ~co2,correlation=corARMA(p=2),
control=glsControl(msVerbose=TRUE))
plot(ACF(g2,resType="normalized"),alpha=0.05)
正如您正确指出的那样,尝试转到AR(3)失败。
gls(archlogfl ~co2,correlation=corARMA(p=3))
您可以考虑公差,起始条件等因素,但是我认为这不会有太大帮助。
gls(archlogfl ~co2,correlation=corARMA(p=3,value=c(0.9,-0.5,0)),
control=glsControl(tolerance=1e-4,msVerbose=TRUE),verbose=TRUE)
如果我绝对想得到这些值,我将编写我自己的广义最小二乘函数,从头开始构建AR(3)相关矩阵,并尝试使用稍微更强大的优化器运行它,但是我真的必须拥有努力工作的一个很好的理由...
另一种选择是使用
arima
来拟合gls
或lm
拟合中的残差而没有自相关:arima(residuals(g0),c(3,0,0))
。 (您可以看到,如果使用arima(residuals(g0),c(2,0,0))
进行此操作,则答案与使用gls
的corARMA(p=2)
的结果接近(但不完全相等)。)关于r - R中的nlme软件包中的gls函数出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6706143/