Các lỗi không tương quan từ mô hình Quảng trường tối thiểu (GLS)


8

Là một tổ chức tài chính, chúng tôi thường chạy vào phân tích dữ liệu chuỗi thời gian. Rất nhiều lần chúng ta kết thúc việc hồi quy bằng các biến chuỗi thời gian. Khi điều này xảy ra, chúng ta thường gặp các phần dư với cấu trúc chuỗi thời gian vi phạm giả định cơ bản về các lỗi độc lập trong hồi quy OLS. Gần đây, chúng tôi đang xây dựng một mô hình khác trong đó tôi tin rằng chúng tôi đã hồi quy với các lỗi tự động. Phần dư từ mô hình tuyến tính lm(object)rõ ràng có cấu trúc AR (1), như hiển nhiên từ ACF và PACF. Tôi đã thực hiện hai cách tiếp cận khác nhau, cách đầu tiên rõ ràng là phù hợp với mô hình sử dụng bình phương tối thiểu hóa tổng quát gls()trong R. Kỳ vọng của tôi là phần dư từ gls (đối tượng) sẽ là nhiễu trắng (lỗi độc lập). Nhưng phần dư từgls(object)vẫn có cấu trúc ARIMA giống như trong hồi quy thông thường. Thật không may, có điều gì đó sai trong những gì tôi đang làm mà tôi không thể tìm ra. Do đó tôi quyết định điều chỉnh thủ công các hệ số hồi quy từ mô hình tuyến tính (ước tính OLS). Đáng ngạc nhiên là dường như đang hoạt động khi tôi vẽ các phần dư từ hồi quy điều chỉnh (phần dư là tiếng ồn trắng). Tôi thực sự muốn sử dụng gls()trong nlmegói để mã hóa sẽ đơn giản và dễ dàng hơn nhiều. Điều gì sẽ là cách tiếp cận tôi nên thực hiện ở đây? Tôi có nên sử dụng REML không? hoặc là kỳ vọng của tôi về phần dư không tương quan (nhiễu trắng) từ đối tượng gls () sai?

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

Có điều gì đó sai với những gì tôi đang làm ???????

Câu trả lời:


11

Phần dư từ glsthực sự sẽ có cùng cấu trúc tự tương quan, nhưng điều đó không có nghĩa là ước tính hệ số và sai số chuẩn của chúng chưa được điều chỉnh phù hợp. (Rõ ràng là không có yêu cầu rằng phải là đường chéo.) Điều này là do phần dư được định nghĩa là . Nếu ma trận hiệp phương sai của bằng , thì không cần sử dụng GLS!e = Y - X β GLS e σ 2 tôiΩe= =Y-Xβ^GLSeσ2Tôi

Nói tóm lại, bạn chưa làm gì sai, không cần điều chỉnh phần dư và các thói quen đều hoạt động chính xác.

predict.glskhông tính đến cấu trúc của ma trận hiệp phương sai khi hình thành các lỗi tiêu chuẩn của vectơ dự đoán. Tuy nhiên, nó không có tính năng "dự đoán một vài quan sát phía trước" tiện lợi predict.Arima, có tính đến phần dư có liên quan ở cuối chuỗi dữ liệu và cấu trúc của phần dư khi tạo giá trị dự đoán. arimacó khả năng kết hợp một ma trận của các yếu tố dự đoán trong ước tính và nếu bạn quan tâm đến dự đoán trước một vài bước, nó có thể là một lựa chọn tốt hơn.

EDIT: Được nhắc nhở bởi một nhận xét từ Michael Chernick (+1), tôi đang thêm một ví dụ so sánh kết quả GLS với ARMAX (arima), cho thấy ước tính hệ số, khả năng đăng nhập, v.v ... đều xuất hiện như nhau, ít nhất là bốn thập phân các vị trí (một mức độ chính xác hợp lý cho rằng hai thuật toán khác nhau được sử dụng):

# 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: Được nhắc nhở bởi một nhận xét từ anand (OP), đây là so sánh các dự đoán từ glsarimavới cùng cấu trúc dữ liệu cơ bản như trên và một số dòng đầu ra không liên quan đã bị xóa:

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

Như chúng ta có thể thấy, các giá trị dự đoán là khác nhau, mặc dù chúng đang hội tụ khi chúng ta tiến xa hơn trong tương lai. Điều này là do glskhông coi dữ liệu là một chuỗi thời gian và tính đến giá trị cụ thể của phần dư khi quan sát 995 khi hình thành dự đoán, nhưng arimathực tế. Tác dụng của phần dư tại obs. 995 giảm khi đường chân trời dự báo tăng, dẫn đến sự hội tụ của các giá trị dự đoán.

Do đó, đối với các dự đoán ngắn hạn về dữ liệu chuỗi thời gian, arimasẽ tốt hơn.


1
Áp dụng cấu trúc arma cho phần dư tôi nghĩ sẽ khác một chút so với kết quả mà gls đưa ra liên quan đến các tham số hồi quy.
Michael R. Chernick

Ngoài ra, phương pháp mô hình ARMA phù hợp với cấu trúc tương quan trong phần dư hơn là chỉ định nó trong ma trận hiệp phương sai.
Michael R. Chernick

Bowman, cảm ơn ngài cho một lời giải thích ngắn gọn và rõ ràng. Vì vậy, trong ngắn hạn sử dụng cấu trúc phần dư ở cuối chuỗi dữ liệu thay vì ma trận hiệp phương sai sẽ là một cách tiếp cận tốt hơn trong dự đoán. Điều đó có nghĩa là dự đoán.arima () sẽ cho bạn dự đoán tốt hơn dự đoán.gls () đúng?
Anand

Tôi đã thêm một số công cụ ví dụ dự đoán vào phản hồi, nhưng phiên bản ngắn là có, đối với dữ liệu chuỗi thời gian predict.arima()sẽ cung cấp cho bạn dự đoán tốt hơn predict.gls().
jbowman

jBowman, tôi có thể hỏi hai câu hỏi tiếp theo cho câu hỏi khá cũ này không (tôi chỉ đăng nhập để hỏi giống như OP này)? 1) Tôi giả sử các khoản giữ tương tự cho tính không đồng nhất - tức là phần dư từ GLS vẫn không trông giống homoscedastic? 2) Tình huống có khác với hồi quy với lỗi arima (ví dụ arima của bạn) không? Tôi đã luôn luôn đọc rằng để xem nếu bạn có mô hình được chỉ định đúng, phần dư sẽ là tiếng ồn trắng?
B_Miner

3

Bạn muốn phần dư được chuẩn hóa. Xem ?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")
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.