Nicht korrelierte Fehler aus dem Generalized Least Square-Modell (GLS)


8

Als Finanzinstitut stoßen wir häufig auf die Analyse von Zeitreihendaten. Oft führen wir Regressionen mithilfe von Zeitreihenvariablen durch. Dabei stoßen wir häufig auf Residuen mit Zeitreihenstruktur, die gegen die Grundannahme unabhängiger Fehler in der OLS-Regression verstoßen. Kürzlich bauen wir ein weiteres Modell, in dem wir meiner Meinung nach eine Regression mit autokorrelierten Fehlern haben. Die Residuen des linearen Modells haben lm(object)eindeutig eine AR (1) -Struktur, wie aus ACF und PACF hervorgeht. Ich habe zwei verschiedene Ansätze gewählt, der erste bestand offensichtlich darin, das Modell unter Verwendung der verallgemeinerten kleinsten Quadrate gls()in R anzupassen. Meine Erwartung war, dass die Residuen von gls (Objekt) ein weißes Rauschen sein würden (unabhängige Fehler). Aber die Residuen vongls(object)haben immer noch die gleiche ARIMA-Struktur wie bei der gewöhnlichen Regression. Leider stimmt etwas nicht, was ich nicht herausfinden konnte. Daher habe ich beschlossen, die Regressionskoeffizienten aus dem linearen Modell (OLS-Schätzungen) manuell anzupassen. Überraschenderweise scheint das zu funktionieren, wenn ich die Residuen aus der angepassten Regression gezeichnet habe (die Residuen sind weißes Rauschen). Ich möchte es wirklich gls()im nlmePaket verwenden, damit die Codierung viel einfacher und einfacher wird. Was wäre der Ansatz, den ich hier verfolgen sollte? Soll ich REML verwenden? oder ist meine erwartung von nicht korrelierten residenzen (weißes rauschen) von gls () objekt falsch?

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

Stimmt etwas nicht mit dem, was ich mache ???????

Antworten:


11

Die Residuen von glshaben zwar dieselbe Autokorrelationsstruktur, dies bedeutet jedoch nicht, dass die Koeffizientenschätzungen und ihre Standardfehler nicht angemessen angepasst wurden. (Es ist offensichtlich auch nicht erforderlich, dass diagonal ist.) Dies liegt daran, dass die Residuen als . Wenn die Kovarianzmatrix von gleich , müsste GLS nicht verwendet werden!e = Y - X β GLS e σ 2 IΩe=YXβ^GLSeσ2I

Kurz gesagt, Sie haben nichts falsch gemacht, Sie müssen die Residuen nicht anpassen und die Routinen funktionieren alle korrekt.

predict.glsberücksichtigt die Struktur der Kovarianzmatrix bei der Bildung von Standardfehlern des Vorhersagevektors. Es verfügt jedoch nicht über die praktische Funktion "Einige Beobachtungen voraussagen" predict.Arima, die die relevanten Residuen am Ende der Datenreihe und die Struktur der Residuen bei der Erzeugung vorhergesagter Werte berücksichtigt. arimahat die Fähigkeit, eine Matrix von Prädiktoren in die Schätzung einzubeziehen, und wenn Sie ein paar Schritte voraus an der Vorhersage interessiert sind, ist dies möglicherweise die bessere Wahl.

BEARBEITEN: Auf Anregung eines Kommentars von Michael Chernick (+1) füge ich ein Beispiel hinzu, in dem GLS mit ARMAX (Arima) -Ergebnissen verglichen wird. Dies zeigt, dass Koeffizientenschätzungen, Log-Wahrscheinlichkeiten usw. alle gleich sind, mindestens mit vier Dezimalstellen Orte (ein angemessenes Maß an Genauigkeit, da zwei verschiedene Algorithmen verwendet werden):

# 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

BEARBEITEN: Auf Anregung eines Kommentars von anand (OP) finden Sie hier einen Vergleich der Vorhersagen von glsund arimamit derselben grundlegenden Datenstruktur wie oben, wobei einige überflüssige Ausgabezeilen entfernt wurden:

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

Wie wir sehen können, sind die vorhergesagten Werte unterschiedlich, obwohl sie konvergieren, wenn wir uns weiter in die Zukunft bewegen. Dies liegt daran gls, dass die Daten nicht als Zeitreihen behandelt werden und der spezifische Wert des Residuums bei Beobachtung 995 bei der Bildung von Vorhersagen berücksichtigt wird, dies jedoch der arimaFall ist. Die Wirkung des Residuums bei obs. 995 nimmt mit zunehmendem Prognosehorizont ab, was zur Konvergenz der prognostizierten Werte führt.

Folglich ist es für kurzfristige Vorhersagen von Zeitreihendaten arimabesser.


1
Das Anwenden einer Arma-Struktur auf die Residuen würde sich meiner Meinung nach ein wenig von dem Ergebnis unterscheiden, das die gls in Bezug auf die Regressionsparameter liefert.
Michael R. Chernick

Auch der ARMA-Modellierungsansatz passte die Korrelationsstruktur in die Residuen an, anstatt sie in der Kovarianzmatrix anzugeben.
Michael R. Chernick

Bowman, vielen Dank, Sir, für diese prägnante und klare Erklärung. Kurz gesagt, die Verwendung der Residuenstruktur am Ende von Datenreihen anstelle der Kovarianzmatrix ist ein besserer Ansatz für die Vorhersage. Was dies bedeutet, ist, dass Predict.arima () Ihnen eine bessere Vorhersage liefert als Predict.gls ().
Anand

Ich habe der Antwort einige Beispiele für Vorhersagen beigefügt, aber die Kurzversion lautet "Ja", da Zeitreihendaten predict.arima()eine bessere Vorhersage liefern als predict.gls().
Jbowman

jBowman, darf ich zwei Nachfragen zu dieser ziemlich alten Frage stellen (ich habe mich gerade angemeldet, um das Gleiche wie bei diesem OP zu fragen)? 1) Ich gehe davon aus, dass dies auch für die Heteroskedastizität gilt - dh die Residuen von GLS sehen immer noch nicht homoskedastisch aus? 2) Ist die Situation bei der Regression mit Arima-Fehlern anders (Ihr Arima-Beispiel)? Ich habe immer gelesen, dass die Residuen weißes Rauschen sein sollten, um zu sehen, ob Sie das Modell richtig angegeben haben.
B_Miner

3

Sie möchten die normalisierten Residuen. Siehe ?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")
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.