Проста лінійна модель з автокорельованими помилками в R [закрито]


19

Як мені підходити лінійна модель з автокорельованими помилками в R? У статистиці я використовував би praisкоманду, але не можу знайти еквівалент R ...

Відповіді:


23

Подивіться на gls(узагальнені найменші квадрати) з пакету nlme

Ви можете встановити профіль кореляції для помилок у регресії, наприклад, ARMA тощо:

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

для помилок ARMA (1,1).


1
Чи можу я використовувати функцію "прогнозування" на новому наборі даних і зберігати ту саму структуру помилок? Як команда gls знає, в якому порядку проводяться спостереження?
Зак

27

Крім gls()функції від 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. Дивіться? Predict.gls. Також ви можете вказати порядок спостереження терміном "форма" у кореляційній структурі. Наприклад:
corr=corAR1(form=~1)вказує, що порядок даних є таким, яким вони є в таблиці. corr=corAR1(form=~Year)вказує, що порядок є коефіцієнтом Рік .. Нарешті, значення "0,5" у, corr=corAR1(0.5,form=~1)?як правило, встановлюється до значення параметра, який оцінюється для відображення структури дисперсії (phi, у випадку AR, тета у випадку МА. .). Необов’язково його налаштовувати та використовувати для оптимізації, як згадував Роб Хайндман.


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