Kesalahan tidak berkorelasi dari model Generalized Least Square (GLS)

8

Sebagai lembaga keuangan, kami sering mengalami analisis data deret waktu. Banyak kali kita akhirnya melakukan regresi menggunakan variabel deret waktu. Ketika ini terjadi, kita sering menemukan residu dengan struktur deret waktu yang melanggar asumsi dasar kesalahan independen dalam regresi OLS. Baru-baru ini kami sedang membangun model lain di mana saya percaya kami memiliki regresi dengan kesalahan autokorelasi. Residu dari model linier lm(object)telah jelas memiliki struktur AR (1), sebagaimana terbukti dari ACF dan PACF. Saya mengambil dua pendekatan yang berbeda, yang pertama jelas sesuai dengan model menggunakan Generalized least square gls()di R. Harapan saya adalah bahwa residu dari gls (objek) akan menjadi white noise (kesalahan independen). Tetapi sisa darigls(object)masih memiliki struktur ARIMA yang sama seperti pada regresi biasa. Sayangnya ada sesuatu yang salah dalam apa yang saya lakukan yang tidak bisa saya pahami. Karenanya saya memutuskan untuk secara manual menyesuaikan koefisien regresi dari model linier (perkiraan OLS). Anehnya yang tampaknya bekerja ketika saya merencanakan residu dari regresi yang disesuaikan (residu adalah white noise). Saya benar-benar ingin menggunakan gls()dalam nlmepaket sehingga pengkodean akan jauh lebih sederhana dan lebih mudah. Apa pendekatan yang harus saya ambil di sini? Apakah saya harus menggunakan REML? atau apakah harapan saya terhadap residu yang tidak berkorelasi (white noise) dari objek gls () salah?

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

Apakah ada yang salah dengan apa yang saya lakukan ???????

Anand
sumber

Jawaban:

11

Sisa dari glsmemang akan memiliki struktur autokorelasi yang sama, tetapi itu tidak berarti estimasi koefisien dan kesalahan standar mereka belum disesuaikan dengan tepat. (Jelas tidak ada persyaratan bahwa menjadi diagonal, baik.) Ini karena residual didefinisikan sebagai . Jika matriks kovarians dari sama dengan , tidak perlu menggunakan GLS!Ωe=YXβ^GLSeσ2I

Singkatnya, Anda tidak melakukan kesalahan, tidak perlu menyesuaikan residunya, dan semua rutinitas bekerja dengan benar.

predict.glstidak memperhitungkan struktur matriks kovarians ketika membentuk kesalahan standar vektor prediksi. Namun, ia tidak memiliki fitur "prediksi beberapa pengamatan di depan" predict.Arimayang nyaman, yang memperhitungkan residu yang relevan pada akhir seri data dan struktur residu ketika menghasilkan nilai prediksi. arimamemiliki kemampuan untuk menggabungkan matriks prediktor dalam estimasi, dan jika Anda tertarik pada prediksi beberapa langkah ke depan, ini mungkin merupakan pilihan yang lebih baik.

EDIT: Didorong oleh komentar dari Michael Chernick (+1), saya menambahkan contoh membandingkan GLS dengan hasil ARMAX (arima), menunjukkan bahwa estimasi koefisien, kemungkinan log, dll. Semuanya keluar sama, setidaknya hingga empat desimal tempat (tingkat akurasi yang masuk akal mengingat dua algoritma berbeda digunakan):

# 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: Diminta oleh komentar dari anand (OP), berikut adalah perbandingan prediksi dari glsdan arimadengan struktur data dasar yang sama seperti di atas dan beberapa jalur output asing dihapus:

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

Seperti yang bisa kita lihat, nilai-nilai yang diprediksi berbeda, meskipun mereka konvergen ketika kita bergerak lebih jauh ke masa depan. Ini karena glstidak memperlakukan data sebagai deret waktu dan memperhitungkan nilai spesifik residu pada pengamatan 995 ketika membentuk prediksi, tetapi arimamelakukannya. Efek residu di obs. 995 berkurang saat cakrawala perkiraan meningkat, mengarah ke konvergensi nilai yang diprediksi.

Akibatnya, untuk prediksi jangka pendek dari data deret waktu, arimaakan lebih baik.

Jbowman
sumber
1
Menerapkan struktur arma ke residu akan saya pikir sedikit berbeda dari hasil yang diberikan gls mengenai parameter regresi.
Michael R. Chernick
Juga pendekatan pemodelan ARMA cocok dengan struktur korelasi dalam residu daripada menentukannya dalam matriks kovarians.
Michael R. Chernick
Bowman, terima kasih tuan atas penjelasan yang singkat dan jelas. Jadi, singkatnya menggunakan struktur residual pada akhir seri data, bukan matriks Covariance akan menjadi pendekatan yang lebih baik dalam prediksi. Apa artinya itu predict.arima () akan memberi Anda prediksi yang lebih baik daripada predict.gls () benar?
Anand
Saya telah menambahkan beberapa contoh hal prediksi ke respons, tetapi versi singkatnya adalah ya, karena data deret waktu predict.arima()akan memberi Anda prediksi yang lebih baik daripada predict.gls().
jbowman
jBowman, bolehkah saya mengajukan dua tindak lanjut untuk pertanyaan yang agak lama ini (saya baru saja masuk untuk menanyakan hal yang sama dengan OP ini)? 1) Saya menganggap hal yang sama berlaku untuk heteroskedastisitas - yaitu residu dari GLS masih tidak akan terlihat homoseksual? 2) Apakah situasinya berbeda untuk regresi dengan kesalahan arima (contoh arima Anda)? Saya selalu membaca bahwa untuk melihat apakah Anda memiliki model yang ditentukan dengan benar, residu harus white noise?
B_Miner
3

Anda ingin residu yang dinormalisasi. Lihat ?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")
Roland
sumber