Ошибка с функцией gls в пакете nlme в R - PullRequest
5 голосов
/ 15 июля 2011

Я получаю сообщение об ошибке, подобное этому:

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.

Roland

1 Ответ

19 голосов
/ 16 июля 2011

@ Комментарий Гэвина Симпсона, приведенный выше, о том, что попытка оценить модель с 5 параметрами из 10 наблюдений очень обнадеживающая, верна.Общее правило заключается в том, что вы должны иметь как минимум 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)

ACF 1

Это автокорреляционная функция остатков,с 95% доверительными интервалами (обратите внимание, что это по кривой доверительные интервалы, поэтому мы ожидаем, что примерно 1/20 точек выйдут за эти границы в любом случае).

Так что действительно есть некоторые(графическое) доказательство некоторой автокорреляции здесь.Мы подберем модель AR (1) с подробным выводом (чтобы понять масштаб, по которому оцениваются эти параметры, вам, вероятно, придется покопаться в Пиньейру и Бейтсе 2000: то, что представлено в распечатке, это неограниченные значения параметров, в сводках напечатаны ограниченные *1021* значения ...

g1 <- gls(archlogfl ~co2,correlation=corARMA(p=1),
    control=glsControl(msVerbose=TRUE))

Давайте посмотрим, что осталось после подгонки к AR1:

plot(ACF(g1,resType="normalized"),alpha=0.05)

ACF 2

Теперь установите AR (2):

g2 <- gls(archlogfl ~co2,correlation=corARMA(p=2),
    control=glsControl(msVerbose=TRUE))

plot(ACF(g2,resType="normalized"),alpha=0.05)

ACF 3

Как вы правильно заявили, пытаясь перейти к 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) с нуля, и попытался бы запустить ее с немного более надежным оптимизатором, но у меня действительно была бы хорошая причина для работычто трудно ...

Еще один измененныйnative должен использовать arima для подгонки к остаткам из подгонки gls или lm без автокорреляции: arima(residuals(g0),c(3,0,0)).(Вы можете видеть, что если вы сделаете это с arima(residuals(g0),c(2,0,0)), ответы будут близки (но не совсем равны) к результатам gls с corARMA(p=2).)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...