Простая линейная модель с автокоррелированными ошибками в R [закрыто]


19

Как мне согласовать линейную модель с автокоррелированными ошибками в R? В stata я бы использовал praisкоманду, но я не могу найти эквивалент R ...

Ответы:


23

Посмотрите на gls(обобщенные наименьшие квадраты) из пакета nlme

Вы можете установить профиль корреляции для ошибок в регрессии, например, ARMA и т.д .:

 gls(Y ~ X, correlation=corARMA(p=1,q=1))

для ошибок ARMA (1,1).


1
Могу ли я использовать функцию «прогнозирования» для нового набора данных и сохранить ту же структуру ошибок? Как команда gls знает, в каком порядке находятся наблюдения?
Зак

27

В дополнение к gls()функции from nlme, вы также можете использовать arima()функцию в statsпакете, используя MLE. Вот пример с обеими функциями.

x <- 1:100
e <- 25*arima.sim(model=list(ar=0.3),n=100)
y <- 1 + 2*x + e

###Fit the model using gls()
require(nlme)
(fit1 <- gls(y~x, corr=corAR1(0.5,form=~1)))
Generalized least squares fit by REML
  Model: y ~ x 
  Data: NULL 
  Log-restricted-likelihood: -443.6371

Coefficients:
(Intercept)           x 
   4.379304    1.957357 

Correlation Structure: AR(1)
 Formula: ~1 
 Parameter estimate(s):
      Phi 
0.3637263 
Degrees of freedom: 100 total; 98 residual
Residual standard error: 22.32908 

###Fit the model using arima()
(fit2 <- arima(y, xreg=x, order=c(1,0,0)))

Call:
arima(x = y, order = c(1, 0, 0), xreg = x)

Coefficients:
         ar1  intercept       x
      0.3352     4.5052  1.9548
s.e.  0.0960     6.1743  0.1060

sigma^2 estimated as 423.7:  log likelihood = -444.4,  aic = 896.81 

Преимущество функции arima () состоит в том, что вы можете использовать гораздо более широкий спектр процессов ошибок ARMA. Если вы используете функцию auto.arima () из пакета прогноза, вы можете автоматически определить ошибку ARMA:

require(forecast)    
fit3 <- auto.arima(y, xreg=x)

1
Что означает 0,5 в "corr = corAR1 (0,5, форма = ~ 1)?"
Зак

1
Это дает начальное значение для оптимизации. Это почти не имеет значения, если оно опущено.
Роб Хиндман

1
+1 arimaОпция выглядит более отличной от Stata praisна первый взгляд, но она более гибкая, и вы также можете использовать ее, tsdiagчтобы получить хорошее представление о том, насколько хорошо соответствует ваше предположение AR (1).
Уэйн

1
Как мне использовать arima (), если я регрессирую y только на константе?
user43790

7

Используйте функцию gls из пакета nlme . Вот пример.

##Generate data frame with regressor and AR(1) error. The error term is 
## \eps_t=0.3*\eps_{t-1}+v_t
df <- data.frame(x1=rnorm(100), err=filter(rnorm(100)/5,filter=0.3,method="recursive"))

##Create ther response
df$y <- 1 + 2*df$x + df$err

###Fit the model
gls(y~x, data=df, corr=corAR1(0.5,form=~1))

Generalized least squares fit by REML
  Model: y ~ x 
  Data: df 
  Log-restricted-likelihood: 9.986475

 Coefficients:
 (Intercept)           x 
   1.040129    2.001884 

 Correlation Structure: AR(1)
 Formula: ~1 
 Parameter estimate(s):
     Phi 
 0.2686271 
Degrees of freedom: 100 total; 98 residual
Residual standard error: 0.2172698 

Поскольку модель подбирается с максимальной вероятностью, вам необходимо указать начальные значения. Начальное значение по умолчанию - 0, но, как всегда, лучше попробовать несколько значений, чтобы обеспечить сходимость.

Как отметил д-р Г., вы также можете использовать другие корреляционные структуры, а именно ARMA.

Обратите внимание, что в общем случае оценки методом наименьших квадратов являются согласованными, если ковариационная матрица ошибок регрессии не кратна единичной матрице, поэтому, если вы подгоняете модель к определенной ковариационной структуре, сначала необходимо проверить, является ли она подходящей.


Что означает 0,5 в "corr = corAR1 (0,5, форма = ~ 1)?"
Зак

3

Вы можете использовать прогнозирование на выходе GLS. Видите? Также вы можете указать порядок наблюдения с помощью термина «форма» в структуре корреляции. Например:
corr=corAR1(form=~1)указывает, что порядок данных - это тот, в котором они находятся в таблице. corr=corAR1(form=~Year)указывает, что порядок соответствует коэффициенту Year. Наконец, значение «0.5» в corr=corAR1(0.5,form=~1)?общем случае устанавливается равным значению параметра, оцениваемого для представления структуры дисперсии (phi, в случае AR, theta в случае MA .. .). Необязательно устанавливать его и использовать для оптимизации, как упоминал Роб Хиндман.


Прогнозируемые или подобранные значения будут сильно отличаться, хотя и будут правильными (gls () и Arima ())? Поскольку gls будет использовать только фиксированные эффекты, в то время как Arima будет включать ошибки arima в установленные значения.
B_Miner
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.