Ответы:
Посмотрите на gls
(обобщенные наименьшие квадраты) из пакета nlme
Вы можете установить профиль корреляции для ошибок в регрессии, например, ARMA и т.д .:
gls(Y ~ X, correlation=corARMA(p=1,q=1))
для ошибок ARMA (1,1).
В дополнение к 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)
arima
Опция выглядит более отличной от Stata prais
на первый взгляд, но она более гибкая, и вы также можете использовать ее, tsdiag
чтобы получить хорошее представление о том, насколько хорошо соответствует ваше предположение AR (1).
Используйте функцию 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.
Обратите внимание, что в общем случае оценки методом наименьших квадратов являются согласованными, если ковариационная матрица ошибок регрессии не кратна единичной матрице, поэтому, если вы подгоняете модель к определенной ковариационной структуре, сначала необходимо проверить, является ли она подходящей.
Вы можете использовать прогнозирование на выходе GLS. Видите? Также вы можете указать порядок наблюдения с помощью термина «форма» в структуре корреляции. Например:
corr=corAR1(form=~1)
указывает, что порядок данных - это тот, в котором они находятся в таблице.
corr=corAR1(form=~Year)
указывает, что порядок соответствует коэффициенту Year. Наконец, значение «0.5» в corr=corAR1(0.5,form=~1)?
общем случае устанавливается равным значению параметра, оцениваемого для представления структуры дисперсии (phi, в случае AR, theta в случае MA .. .). Необязательно устанавливать его и использовать для оптимизации, как упоминал Роб Хиндман.