1) สำหรับคำถามแรกของคุณสถิติการทดสอบบางอย่างได้รับการพัฒนาและอภิปรายในวรรณกรรมเพื่อทดสอบโมฆะของความคงที่และโมฆะของหน่วยราก บางส่วนของเอกสารที่เขียนในเรื่องนี้มีดังต่อไปนี้:
เกี่ยวข้องกับแนวโน้ม:
- ผ้ากันเปื้อน, D. y Fuller, W. (1979a), การกระจายตัวประมาณค่าสำหรับอนุกรมเวลาแบบตอบโต้อัตโนมัติด้วยหน่วยราก, วารสารสมาคมสถิติอเมริกัน 74, 427-31
- ผ้ากันเปื้อน, D. y Fuller, W. (1981), สถิติอัตราส่วนความน่าจะเป็นสำหรับอนุกรมเวลาแบบตอบโต้อัตโนมัติพร้อมรูทยูนิต, Econometrica 49, 1057-1071
- Kwiatkowski, D. , Phillips, P. , Schmidt, P. y Shin, Y. (1992), การทดสอบสมมติฐานว่างของความคงที่กับทางเลือกของรูทยูนิต: เราแน่ใจได้อย่างไรว่าอนุกรมเวลาทางเศรษฐกิจมีหน่วยราก? , วารสารเศรษฐมิติที่ 54, 159-178
- Phillips, P. y Perron, P. (1988), การทดสอบหารูทยูนิตในการถดถอยอนุกรมเวลา Biometrika 75, 335-46
- Durlauf, S. y Phillips, P. (1988), แนวโน้มเปรียบเทียบกับการสุ่มการวิเคราะห์อนุกรมเวลา, Econometrica 56, 1333-54
เกี่ยวข้องกับองค์ประกอบตามฤดูกาล:
- Hylleberg, S. , Engle, R. , Granger, C. y Yoo, B. (1990), การบูรณาการตามฤดูกาลและการรวมตัวกัน, วารสารเศรษฐมิติ 44, 215-38
- Canova, F. y Hansen, BE (1995), รูปแบบฤดูกาลเปลี่ยนแปลงตลอดเวลาหรือไม่? แบบทดสอบความมั่นคงตามฤดูกาลวารสารธุรกิจและสถิติเศรษฐกิจ 13, 237-252
- Franses, P. (1990), การทดสอบหารากหน่วยตามฤดูกาลในข้อมูลรายเดือน, รายงานทางเทคนิค 9032, สถาบันเศรษฐมิติ
- Ghysels, E. , Lee, H. y Noh, J. (1994), การทดสอบรากหน่วยในซีรีย์เวลาตามฤดูกาล ส่วนขยายเชิงทฤษฎีบางส่วนและการตรวจสอบ monte carlo, วารสารเศรษฐมิติ 62, 415-442
หนังสือเรียน Banerjee, A. , Dolado, J. , Galbraith, J. y Hendry, D. (1993), การรวมกลุ่ม, การแก้ไขข้อผิดพลาดและการวิเคราะห์ทางเศรษฐศาสตร์ของข้อมูลที่ไม่คงที่, ตำราขั้นสูงในเศรษฐมิติ สำนักพิมพ์มหาวิทยาลัยออกซฟอร์ดก็เป็นแหล่งอ้างอิงที่ดีเช่นกัน
2) ข้อกังวลที่สองของคุณได้รับการพิสูจน์จากวรรณกรรม หากมีการทดสอบรูทยูนิทแล้วสถิติแบบดั้งเดิมที่คุณจะใช้กับแนวโน้มเชิงเส้นจะไม่เป็นไปตามการแจกแจงมาตรฐาน ดูตัวอย่างเช่น Phillips, P. (1987), การถดถอยอนุกรมเวลาด้วยยูนิตราก, Econometrica 55 (2), 277-301
หากมีหน่วยรูทอยู่และถูกละเว้นความน่าจะเป็นที่จะปฏิเสธโมฆะที่ค่าสัมประสิทธิ์ของแนวโน้มเชิงเส้นลดลงเป็นศูนย์ นั่นคือเราจะสิ้นสุดการสร้างแบบจำลองแนวโน้มเชิงเส้นที่กำหนดขึ้นบ่อยเกินไปสำหรับระดับความสำคัญที่กำหนด ในการมีรูทยูนิตเราควรเปลี่ยนข้อมูลแทนโดยรับความแตกต่างเป็นประจำกับข้อมูล
3) สำหรับภาพประกอบถ้าคุณใช้ R คุณสามารถทำการวิเคราะห์ต่อไปนี้กับข้อมูลของคุณ
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")
ก่อนอื่นคุณสามารถใช้การทดสอบ Dickey-Fuller สำหรับค่า null ของหน่วยรูท:
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
และการทดสอบ KPSS สำหรับสมมติฐานว่างกลับ, ความคงที่กับทางเลือกของความคงที่รอบแนวโน้มเชิงเส้น:
kpss.test(x, null = "Trend", lshort = TRUE)
# KPSS Test for Trend Stationarity
# KPSS Trend = 0.2691, Truncation lag parameter = 1, p-value = 0.01
ผลลัพธ์: การทดสอบ ADF ที่ระดับนัยสำคัญ 5% รากของหน่วยจะไม่ถูกปฏิเสธ การทดสอบ KPSS ค่าความไม่คงที่ของค่าคงที่ถูกปฏิเสธเนื่องจากเป็นโมเดลที่มีแนวโน้มเชิงเส้น
นอกเหนือจากบันทึก: การใช้ lshort=FALSE
ค่า null ของการทดสอบ KPSS จะไม่ถูกปฏิเสธที่ระดับ 5% อย่างไรก็ตามจะเลือก 5 lags; การตรวจสอบเพิ่มเติมไม่ได้แสดงไว้ที่นี่ชี้ให้เห็นว่าการเลือก 1-3 lags เหมาะสมสำหรับข้อมูลและนำไปสู่การปฏิเสธสมมติฐานว่าง
โดยหลักการแล้วเราควรชี้แนะตนเองโดยการทดสอบที่เราสามารถปฏิเสธสมมติฐานว่าง (แทนที่จะทดสอบที่เราไม่ได้ปฏิเสธ (เรายอมรับ) โมฆะ) อย่างไรก็ตามการถดถอยของซีรีส์ดั้งเดิมเกี่ยวกับแนวโน้มเชิงเส้นจะไม่น่าเชื่อถือ ในอีกด้านหนึ่ง R-square นั้นสูง (มากกว่า 90%) ซึ่งชี้ไปในวรรณกรรมว่าเป็นตัวบ่งชี้ถึงการถดถอยแบบเผด็จการ
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
ในทางตรงกันข้ามส่วนที่เหลือจะมีความสัมพันธ์โดยอัตโนมัติ:
acf(residuals(fit)) # not displayed to save space
ยิ่งไปกว่านั้น null ของหน่วยหลักในส่วนที่เหลือไม่สามารถปฏิเสธได้
adf.test(residuals(fit))
# Augmented Dickey-Fuller Test
#Dickey-Fuller = -2.0685, Lag order = 3, p-value = 0.547
#alternative hypothesis: stationary
ณ จุดนี้คุณสามารถเลือกรูปแบบที่จะใช้ในการรับการคาดการณ์ ตัวอย่างเช่นการพยากรณ์ตามแบบอนุกรมอนุกรมเวลาโครงสร้างและแบบจำลอง ARIMA สามารถรับได้ดังนี้
# 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
เนื้อเรื่องของการคาดการณ์:
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)
การคาดการณ์มีความคล้ายคลึงกันในทั้งสองกรณีและดูสมเหตุสมผล โปรดสังเกตว่าการคาดการณ์เป็นไปตามรูปแบบที่กำหนดขึ้นค่อนข้างคล้ายกับแนวโน้มเชิงเส้น แต่เราไม่ได้จำลองแบบแนวโน้มเชิงเส้นอย่างชัดเจน เหตุผลมีดังต่อไปนี้: i) ในตัวแบบแนวโน้มท้องถิ่นความแปรปรวนขององค์ประกอบความชันนั้นประมาณเป็นศูนย์ สิ่งนี้จะเปลี่ยนองค์ประกอบแนวโน้มให้เป็นดริฟท์ที่มีผลกระทบของแนวโน้มเชิงเส้น ii) ARIMA (0,1,1) แบบจำลองที่มีการดริฟท์ถูกเลือกในแบบจำลองสำหรับซีรีย์ที่แตกต่างกันผลกระทบของคำคงที่ในซีรีส์ที่แตกต่างนั้นเป็นแนวโน้มเชิงเส้น เรื่องนี้จะกล่าวถึงในโพสต์นี้
คุณอาจตรวจสอบว่าถ้าเลือกโมเดลท้องถิ่นหรือ ARIMA (0,1,0) โดยไม่มีการเลื่อนดังนั้นการคาดการณ์จะเป็นเส้นแนวนอนและดังนั้นจึงไม่มีความคล้ายคลึงกับไดนามิกของข้อมูลที่สังเกต นี่เป็นส่วนหนึ่งของปริศนาของการทดสอบรูทยูนิตและส่วนประกอบที่กำหนดขึ้น
แก้ไข 1 (การตรวจสอบของคงเหลือ):
ความสัมพันธ์อัตโนมัติและ ACF บางส่วนไม่แนะนำโครงสร้างในส่วนที่เหลือ
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")
ตามที่ IrishStat แนะนำให้ทำการตรวจสอบว่ามีคนผิดปกติหรือไม่ 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
เมื่อดูที่ ACF เราสามารถพูดได้ว่าในระดับนัยสำคัญ 5% ส่วนที่เหลือจะถูกสุ่มในรูปแบบนี้เช่นกัน
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")
ในกรณีนี้การปรากฏตัวของค่าผิดปกติที่อาจเกิดขึ้นจะไม่บิดเบือนประสิทธิภาพของรุ่นต่างๆ สิ่งนี้ได้รับการสนับสนุนจากการทดสอบ Jarque-Bera เพื่อความเป็นมาตรฐาน โมฆะของปกติในส่วนที่เหลือจากรุ่นเริ่มต้น ( fit1
, fit2
) จะไม่ถูกปฏิเสธในระดับนัยสำคัญ 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
แก้ไข 2 (พล็อตของส่วนที่เหลือและค่าของพวกเขา)
นี่คือลักษณะที่เหลือ:
และนี่คือค่าในรูปแบบ 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