1) Liên quan đến câu hỏi đầu tiên của bạn, một số thống kê kiểm tra đã được phát triển và thảo luận trong tài liệu để kiểm tra null của tính ổn định và null của một đơn vị gốc. Một số trong nhiều bài báo được viết về vấn đề này như sau:
Liên quan đến xu hướng:
- Dickey, D. y Fuller, W. (1979a), Phân phối các công cụ ước tính cho chuỗi thời gian tự phát với một đơn vị gốc, Tạp chí của Hiệp hội Thống kê Hoa Kỳ 74, 427-31.
- Dickey, D. y Fuller, W. (1981), Thống kê tỷ lệ khả năng cho chuỗi thời gian tự phát với một đơn vị gốc, Kinh tế lượng 49, 1057-1071.
- Kwiatkowski, D., Phillips, P., Schmidt, P. y Shin, Y. (1992), Kiểm tra giả thuyết khống về sự đứng đắn chống lại sự thay thế của một đơn vị gốc: Làm thế nào chắc chắn rằng chuỗi thời gian kinh tế của chúng ta có gốc đơn vị? , Tạp chí Kinh tế lượng 54, 159-178.
- Phillips, P. y Perron, P. (1988), Kiểm tra một đơn vị gốc trong hồi quy chuỗi thời gian, Biometrika 75, 335-46.
- Durlauf, S. y Phillips, P. (1988), Xu hướng so với bước đi ngẫu nhiên trong phân tích chuỗi thời gian, Kinh tế lượng 56, 1333-54.
Liên quan đến thành phần theo mùa:
- Hylleberg, S., Engle, R., Granger, C. y Yoo, B. (1990), Hội nhập và hợp nhất theo mùa, Tạp chí Kinh tế lượng 44, 215-38.
- Canova, F. y Hansen, BE (1995), Các mô hình theo mùa có liên tục theo thời gian không? một thử nghiệm cho sự ổn định theo mùa, Tạp chí Thống kê Kinh doanh và Kinh tế 13, 237-252.
- Franses, P. (1990), Thử nghiệm cho các đơn vị gốc theo mùa trong dữ liệu hàng tháng, Báo cáo kỹ thuật 9032, Viện Kinh tế lượng.
- Ghysels, E., Lee, H. y Noh, J. (1994), Thử nghiệm cho các đơn vị gốc trong chuỗi thời gian theo mùa. một số phần mở rộng lý thuyết và một cuộc điều tra monte carlo, Tạp chí Kinh tế lượng 62, 415-442.
Sách giáo khoa Banerjee, A., Dolado, J., Galbraith, J. y Hendry, D. (1993), Đồng tích hợp, Sửa lỗi và phân tích kinh tế lượng của dữ liệu không cố định, Các văn bản nâng cao trong Kinh tế lượng. Oxford University Press cũng là một tài liệu tham khảo tốt.
2) Mối quan tâm thứ hai của bạn được chứng minh bằng các tài liệu. Nếu có một kiểm tra gốc đơn vị thì thống kê t truyền thống mà bạn sẽ áp dụng theo xu hướng tuyến tính không tuân theo phân phối chuẩn. Xem ví dụ, Phillips, P. (1987), Hồi quy chuỗi thời gian với gốc đơn vị, Kinh tế lượng 55 (2), 277-301.
Nếu một đơn vị gốc tồn tại và bị bỏ qua, thì xác suất từ chối null mà hệ số của xu hướng tuyến tính bằng 0 sẽ giảm. Đó là, cuối cùng chúng ta sẽ mô hình hóa một xu hướng tuyến tính xác định quá thường xuyên cho một mức ý nghĩa nhất định. Thay vào đó là sự hiện diện của một đơn vị gốc, chúng ta nên chuyển đổi dữ liệu bằng cách lấy sự khác biệt thường xuyên với dữ liệu.
3) Để minh họa, nếu bạn sử dụng R, bạn có thể thực hiện phân tích sau với dữ liệu của mình.
x <- structure(c(7657, 5451, 10883, 9554, 9519, 10047, 10663, 10864,
11447, 12710, 15169, 16205, 14507, 15400, 16800, 19000, 20198,
18573, 19375, 21032, 23250, 25219, 28549, 29759, 28262, 28506,
33885, 34776, 35347, 34628, 33043, 30214, 31013, 31496, 34115,
33433, 34198, 35863, 37789, 34561, 36434, 34371, 33307, 33295,
36514, 36593, 38311, 42773, 45000, 46000, 42000, 47000, 47500,
48000, 48500, 47000, 48900), .Tsp = c(1, 57, 1), class = "ts")
Đầu tiên, bạn có thể áp dụng thử nghiệm Dickey-Fuller cho null của một đơn vị gốc:
require(tseries)
adf.test(x, alternative = "explosive")
# Augmented Dickey-Fuller Test
# Dickey-Fuller = -2.0685, Lag order = 3, p-value = 0.453
# alternative hypothesis: explosive
và thử nghiệm KPSS cho giả thuyết null ngược, ổn định chống lại sự thay thế của văn phòng phẩm xung quanh một xu hướng tuyến tính:
kpss.test(x, null = "Trend", lshort = TRUE)
# KPSS Test for Trend Stationarity
# KPSS Trend = 0.2691, Truncation lag parameter = 1, p-value = 0.01
Kết quả: Thử nghiệm ADF, ở mức ý nghĩa 5%, một đơn vị gốc không bị từ chối; Thử nghiệm KPSS, null của văn phòng phẩm bị từ chối ủng hộ một mô hình có xu hướng tuyến tính.
Ngoài ra, lưu ý: sử dụng lshort=FALSE
null của bài kiểm tra KPSS không bị từ chối ở mức 5%, tuy nhiên, nó chọn 5 độ trễ; một kiểm tra thêm không được hiển thị ở đây cho thấy rằng việc chọn độ trễ 1-3 là phù hợp với dữ liệu và dẫn đến bác bỏ giả thuyết khống.
Về nguyên tắc, chúng ta nên tự hướng dẫn mình bằng thử nghiệm mà chúng ta có thể bác bỏ giả thuyết khống (thay vì thử nghiệm mà chúng ta không từ chối (chúng ta chấp nhận) null). Tuy nhiên, hồi quy của loạt ban đầu về xu hướng tuyến tính hóa ra không đáng tin cậy. Một mặt, bình phương R cao (trên 90%) được chỉ ra trong tài liệu là một chỉ số của hồi quy giả.
fit <- lm(x ~ 1 + poly(c(time(x))))
summary(fit)
#Coefficients:
# Estimate Std. Error t value Pr(>|t|)
#(Intercept) 28499.3 381.6 74.69 <2e-16 ***
#poly(c(time(x))) 91387.5 2880.9 31.72 <2e-16 ***
#---
#Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
#Residual standard error: 2881 on 55 degrees of freedom
#Multiple R-squared: 0.9482, Adjusted R-squared: 0.9472
#F-statistic: 1006 on 1 and 55 DF, p-value: < 2.2e-16
Mặt khác, phần dư được tự động hóa:
acf(residuals(fit)) # not displayed to save space
Hơn nữa, null của một đơn vị gốc trong phần dư không thể bị từ chối.
adf.test(residuals(fit))
# Augmented Dickey-Fuller Test
#Dickey-Fuller = -2.0685, Lag order = 3, p-value = 0.547
#alternative hypothesis: stationary
Tại thời điểm này, bạn có thể chọn một mô hình sẽ được sử dụng để thu được dự báo. Ví dụ, dự báo dựa trên mô hình chuỗi thời gian cấu trúc và trên mô hình ARIMA có thể thu được như sau.
# StructTS
fit1 <- StructTS(x, type = "trend")
fit1
#Variances:
# level slope epsilon
#2982955 0 487180
#
# forecasts
p1 <- predict(fit1, 10, main = "Local trend model")
p1$pred
# [1] 49466.53 50150.56 50834.59 51518.62 52202.65 52886.68 53570.70 54254.73
# [9] 54938.76 55622.79
# ARIMA
require(forecast)
fit2 <- auto.arima(x, ic="bic", allowdrift = TRUE)
fit2
#ARIMA(0,1,0) with drift
#Coefficients:
# drift
# 736.4821
#s.e. 267.0055
#sigma^2 estimated as 3992341: log likelihood=-495.54
#AIC=995.09 AICc=995.31 BIC=999.14
#
# forecasts
p2 <- forecast(fit2, 10, main = "ARIMA model")
p2$mean
# [1] 49636.48 50372.96 51109.45 51845.93 52582.41 53318.89 54055.37 54791.86
# [9] 55528.34 56264.82
Một âm mưu của các dự báo:
par(mfrow = c(2, 1), mar = c(2.5,2.2,2,2))
plot((cbind(x, p1$pred)), plot.type = "single", type = "n",
ylim = range(c(x, p1$pred + 1.96 * p1$se)), main = "Local trend model")
grid()
lines(x)
lines(p1$pred, col = "blue")
lines(p1$pred + 1.96 * p1$se, col = "red", lty = 2)
lines(p1$pred - 1.96 * p1$se, col = "red", lty = 2)
legend("topleft", legend = c("forecasts", "95% confidence interval"),
lty = c(1,2), col = c("blue", "red"), bty = "n")
plot((cbind(x, p2$mean)), plot.type = "single", type = "n",
ylim = range(c(x, p2$upper)), main = "ARIMA (0,1,0) with drift")
grid()
lines(x)
lines(p2$mean, col = "blue")
lines(ts(p2$lower[,2], start = end(x)[1] + 1), col = "red", lty = 2)
lines(ts(p2$upper[,2], start = end(x)[1] + 1), col = "red", lty = 2)
Các dự báo là tương tự trong cả hai trường hợp và nhìn hợp lý. Lưu ý rằng các dự báo theo một mô hình tương đối xác định tương tự như một xu hướng tuyến tính, nhưng chúng tôi không mô hình hóa rõ ràng một xu hướng tuyến tính. Lý do là như sau: i) trong mô hình xu hướng cục bộ, phương sai của thành phần độ dốc được ước tính bằng không. Điều này biến thành phần xu hướng thành một sự trôi dạt có tác động của xu hướng tuyến tính. ii) ARIMA (0,1,1), một mô hình có độ trôi được chọn trong một mô hình cho chuỗi khác biệt. Hiệu ứng của thuật ngữ không đổi trên chuỗi khác biệt là xu hướng tuyến tính. Điều này được thảo luận trong bài viết này .
Bạn có thể kiểm tra xem nếu mô hình cục bộ hoặc ARIMA (0,1,0) không bị trôi được chọn, thì các dự báo là một đường thẳng nằm ngang và do đó, sẽ không giống với động của dữ liệu được quan sát. Vâng, đây là một phần của câu đố kiểm tra gốc đơn vị và các thành phần xác định.
Chỉnh sửa 1 (kiểm tra phần dư):
Tự động tương quan và ACF một phần không đề xuất cấu trúc trong phần dư.
resid1 <- residuals(fit1)
resid2 <- residuals(fit2)
par(mfrow = c(2, 2))
acf(resid1, lag.max = 20, main = "ACF residuals. Local trend model")
pacf(resid1, lag.max = 20, main = "PACF residuals. Local trend model")
acf(resid2, lag.max = 20, main = "ACF residuals. ARIMA(0,1,0) with drift")
pacf(resid2, lag.max = 20, main = "PACF residuals. ARIMA(0,1,0) with drift")
Như IrishStat đề xuất, kiểm tra sự hiện diện của các ngoại lệ cũng được khuyến khích. Hai ngoại lệ phụ gia được phát hiện bằng cách sử dụng gói tsoutliers
.
require(tsoutliers)
resol <- tsoutliers(x, types = c("AO", "LS", "TC"),
remove.method = "bottom-up",
args.tsmethod = list(ic="bic", allowdrift=TRUE))
resol
#ARIMA(0,1,0) with drift
#Coefficients:
# drift AO2 AO51
# 736.4821 -3819.000 -4500.000
#s.e. 220.6171 1167.396 1167.397
#sigma^2 estimated as 2725622: log likelihood=-485.05
#AIC=978.09 AICc=978.88 BIC=986.2
#Outliers:
# type ind time coefhat tstat
#1 AO 2 2 -3819 -3.271
#2 AO 51 51 -4500 -3.855
Nhìn vào ACF, chúng ta có thể nói rằng, ở mức ý nghĩa 5%, phần dư là ngẫu nhiên trong mô hình này.
par(mfrow = c(2, 1))
acf(residuals(resol$fit), lag.max = 20, main = "ACF residuals. ARIMA with additive outliers")
pacf(residuals(resol$fit), lag.max = 20, main = "PACF residuals. ARIMA with additive outliers")
Trong trường hợp này, sự hiện diện của các ngoại lệ tiềm năng không xuất hiện để làm biến dạng hiệu suất của các mô hình. Điều này được hỗ trợ bởi thử nghiệm Jarque-Bera về tính quy tắc; null của tính quy tắc trong phần dư từ các mô hình ban đầu ( fit1
, fit2
) không bị từ chối ở mức ý nghĩa 5%.
jarque.bera.test(resid1)[[1]]
# X-squared = 0.3221, df = 2, p-value = 0.8513
jarque.bera.test(resid2)[[1]]
#X-squared = 0.426, df = 2, p-value = 0.8082
Chỉnh sửa 2 (biểu đồ của phần dư và giá trị của chúng)
Đây là cách phần dư trông như thế nào:
Và đây là những giá trị của chúng trong định dạng csv:
0;6.9205
-0.9571;-2942.4821
2.6108;4695.5179
-0.5453;-2065.4821
-0.2026;-771.4821
0.1242;-208.4821
0.1909;-120.4821
-0.0179;-535.4821
0.1449;-153.4821
0.484;526.5179
1.0748;1722.5179
0.3818;299.5179
-1.061;-2434.4821
0.0996;156.5179
0.4805;663.5179
0.8969;1463.5179
0.4111;461.5179
-1.0595;-2361.4821
0.0098;65.5179
0.5605;920.5179
0.8835;1481.5179
0.7669;1232.5179
1.4024;2593.5179
0.3785;473.5179
-1.1032;-2233.4821
-0.3813;-492.4821
2.2745;4642.5179
0.2935;154.5179
-0.1138;-165.4821
-0.8035;-1455.4821
-1.2982;-2321.4821
-1.9463;-3565.4821
-0.1648;62.5179
-0.1022;-253.4821
0.9755;1882.5179
-0.5662;-1418.4821
-0.0176;28.5179
0.5;928.5179
0.6831;1189.5179
-1.8889;-3964.4821
0.3896;1136.5179
-1.3113;-2799.4821
-0.9934;-1800.4821
-0.4085;-748.4821
1.2902;2482.5179
-0.0996;-657.4821
0.5539;981.5179
2.0007;3725.5179
1.0227;1490.5179
0.27;263.5179
-2.336;-4736.4821
1.8994;4263.5179
0.1301;-236.4821
-0.0892;-236.4821
-0.1148;-236.4821
-1.1207;-2236.4821
0.4801;1163.5179