一般化最小二乗モデル(GLS)からの非相関エラー


8

私たちは金融機関として、時系列データの分析を頻繁に実行します。多くの場合、時系列変数を使用して回帰を行うことになります。これが発生すると、多くの場合、OLS回帰における独立したエラーの基本的な仮定に違反する時系列構造の残差が発生します。最近、別のモデルを構築しています。自己相関エラーのある回帰があるlm(object)と思います。ACFとPACFから明らかなように、線形モデルの残差は明らかにAR(1)構造を持っています。私は2つの異なるアプローチをとりました。最初のアプローチは明らかgls()にRの一般化最小二乗法を使用してモデルを適合させることでした。私の期待は、gls(object)からの残差がホワイトノイズ(独立したエラー)になることでした。しかし、からの残差gls(object)通常の回帰と同じARIMA構造がまだあります。残念なことに、私がやっていることに、理解できないほどの問題があります。したがって、線形モデル(OLS推定)からの回帰係数を手動で調整することにしました。驚くべきことに、調整された回帰からの残差をプロットすると、それは機能しているようです(残差はホワイトノイズです)。私は本当にコーディングをパッケージで使用gls()したいnlmeので、コーディングはずっと簡単で簡単になります。ここで私が取るべきアプローチは何ですか?REMLを使用するはずですか?または、gls()オブジェクトからの相関のない残差(ホワイトノイズ)に対する私の期待は間違っていますか?

gls.bk_ai <- gls(PRNP_BK_actINV ~ PRM_BK_INV_ENDING + NPRM_BK_INV_ENDING, 
                 correlation=corARMA(p=1), method='ML',  data  = fit.cap01A)

gls2.bk_ai  <- update(gls.bk_ai, correlation = corARMA(p=2))

gls3.bk_ai <- update(gls.bk_ai, correlation = corARMA(p=3))

gls0.bk_ai <- update(gls.bk_ai, correlation = NULL)

anova(gls.bk_ai, gls2.bk_ai, gls3.bk_ai, gls0.bk_ai)  
     ## looking at the AIC value, gls model with AR(1) will be the best bet

acf2(residuals(gls.bk_ai)) # residuals are not white noise

私がやっていることに何か問題がありますか???????

回答:


11

からの残差glsは確かに同じ自己相関構造を持っていますが、これは係数推定値とその標準誤差が適切に調整されていないことを意味しません。(明らかにも対角である必要はありません。)これは、残差がとして定義されているためです。の共分散行列がと等しい場合、GLSを使用する必要はありません。E = Y - X β GLS E σ 2 IΩe=YXβ^GLSeσ2I

つまり、何も問題がなく、残差を調整する必要がなく、ルーチンはすべて正しく機能しています。

predict.glsは、予測ベクトルの標準誤差を形成するときに、共分散行列の構造を考慮に入れます。ただし、predict.Arima予測値を生成するときに、データ系列の最後の関連する残差と残差の構造を考慮した、便利な「いくつかの観測を予測する」機能はありません。 arimaには、予測に予測因子のマトリックスを組み込む機能があり、数ステップ先の予測に興味がある場合は、より良い選択かもしれません。

編集:Michael Chernick(+1)からのコメントに促されて、GLSとARMAX(arima)の結果を比較する例を追加します。これは、係数推定値、対数尤度などがすべて同じで、少なくとも10進数で4になることを示しています。場所(2つの異なるアルゴリズムが使用される場合、妥当な精度):

# Generating data
eta <- rnorm(5000)
for (j in 2:5000) eta[j] <- eta[j] + 0.4*eta[j-1]
e <- eta[4001:5000]
x <- rnorm(1000)
y <- x + e

> summary(gls(y~x, correlation=corARMA(p=1), method='ML'))
Generalized least squares fit by maximum likelihood
  Model: y ~ x 
  Data: NULL 
       AIC      BIC    logLik
  2833.377 2853.008 -1412.688

Correlation Structure: AR(1)
 Formula: ~1 
 Parameter estimate(s):
      Phi 
0.4229375 

Coefficients:
                 Value  Std.Error  t-value p-value
(Intercept) -0.0375764 0.05448021 -0.68973  0.4905
x            0.9730496 0.03011741 32.30854  0.0000

 Correlation: 
  (Intr)
x -0.022

Standardized residuals:
        Min          Q1         Med          Q3         Max 
-2.97562731 -0.65969048  0.01350339  0.70718362  3.32913451 

Residual standard error: 1.096575 
Degrees of freedom: 1000 total; 998 residual
> 
> arima(y, order=c(1,0,0), xreg=x)

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

Coefficients:
         ar1  intercept       x
      0.4229    -0.0376  0.9730
s.e.  0.0287     0.0544  0.0301

sigma^2 estimated as 0.9874:  log likelihood = -1412.69,  aic = 2833.38

EDIT:アナンドからのコメント(OP)に促され、ここからの予測の比較だglsと、arima上記と同様の基本的なデータ構造を持つと、いくつかの余分な出力行が削除します:

df.est <- data.frame(list(y = y[1:995], x=x[1:995]))
df.pred <- data.frame(list(y=NA, x=x[996:1000]))

model.gls <- gls(y~x, correlation=corARMA(p=1), method='ML', data=df.est)
model.armax <- arima(df.est$y, order=c(1,0,0), xreg=df.est$x)

> predict(model.gls, newdata=df.pred)
[1] -0.3451556 -1.5085599  0.8999332  0.1125310  1.0966663

> predict(model.armax, n.ahead=5, newxreg=df.pred$x)$pred
[1] -0.79666213 -1.70825775  0.81159072  0.07344052  1.07935410

見てわかるように、予測値は異なりますが、将来に向かって移動するにつれて予測値は収束します。これは、glsがデータを時系列として処理せず、予測を形成するときに観測値995での残差の特定の値を考慮に入れていarimaないためです。obsでの残差の影響。995は、予測期間が増加するにつれて減少し、予測値の収束につながります。

したがって、時系列データの短期予測の場合は、arimaより適切になります。


1
アルマ構造を残差に適用することは、回帰パラメーターに関してglsが与える結果とは少し異なると思います。
Michael R.Chernick

また、ARMAモデリングアプローチでは、相関構造を共分散行列で指定するのではなく、残差に適合させます。
Michael R.Chernick

ボーマン、そのような簡潔で明確な説明をありがとうございます。したがって、要約すると、共分散行列の代わりにデータ系列の最後に残差構造を使用する方が、予測において優れたアプローチになります。つまり、predict.arima()は、predict.gls()よりも優れた予測を提供します。
アナンド

応答に予測の例をいくつか追加しましたが、短いバージョンは「はい」です。時系列データのpredict.arima()方が予測よりも優れていますpredict.gls()
jbowman 2012

jBowman、私はこのかなり古い質問に対して2つのフォローアップを求めてもよいですか(このOPと同じように質問するためにログインしていました)?1)私は異分散性についても同じことが成り立つと仮定します-つまり、GLSからの残差はまだ等分散性に見えませんか?2)Arimaエラーのある回帰(状況のArimaの例)の状況は異なりますか?私は常にモデルを適切に指定しているかどうかを確認するために読んだことがありますが、残差はホワイトノイズでなければなりませんか?
B_Miner 2014

3

正規化された残差が必要です。を参照してください?residuals.lme

#Reproducible code from ?corARMA
fm1Ovar.lme <- lme(follicles ~ sin(2*pi*Time) + cos(2*pi*Time),
                   data = Ovary, random = pdDiag(~sin(2*pi*Time)))
fm5Ovar.lme <- update(fm1Ovar.lme,
                corr = corARMA(p = 1, q = 1))

#raw residuals divided by the corresponding standard errors
acf(residuals(fm5Ovar.lme),type="partial")

#standardized residuals pre-multiplied 
#by the inverse square-root factor of the estimated error correlation matrix
acf(residuals(fm5Ovar.lme,type="normalized"),type="partial")
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.