回答:
からのgls()
関数に加えて、MLEを使用してパッケージ内の関数をnlme
使用することもできます。以下に両方の機能の例を示します。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
オプションは、Stataの外観とはprais
一見異なりますが、柔軟性が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を使用できます。?predict.glsを参照してください。また、相関構造の「フォーム」項で観測の順序を指定できます。例:
corr=corAR1(form=~1)
は、データの順序がテーブル内の順序であることを示します。
corr=corAR1(form=~Year)
は、順序が因子年の順序であることを示しcorr=corAR1(0.5,form=~1)?
ます。 。)。Rob Hyndmanが述べたように、設定して最適化に使用することはオプションです。