Answers:
除了中的gls()
功能外nlme
,您还可以使用MLE来使用软件包中的arima()
功能stats
。这是两个功能的示例。
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
选项prais
乍一看看上去与Stata的区别更大,但它更灵活,您还可以tsdiag
用来很好地了解AR(1)假设的实际适用性。
使用软件包nlme中的gls函数。这是例子。
##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,但一如既往,最好尝试多个值以确保收敛。
正如G博士所指出的,您还可以使用其他关联结构,即ARMA。
请注意,如果回归误差的协方差矩阵不是单位矩阵的倍数,则通常,最小二乘估计值是一致的,因此,如果您使用特定协方差结构拟合模型,则首先需要测试它是否合适。
您可以在gls输出上使用预测。请参阅?predict.gls。您也可以通过相关结构中的“形式”项指定观察顺序。例如:
corr=corAR1(form=~1)
指示数据的顺序就是表中的顺序。
corr=corAR1(form=~Year)
最后,corr=corAR1(0.5,form=~1)?
通常将in的“ 0.5”值设置为估计的代表方差结构的参数的值(对于AR,为phi;对于MA,为theta。)。 )。如Rob Hyndman所述,可以选择将其设置并用于优化。