प्रश्न में दिए गए समीकरण में परिभाषित एआर (1) मॉडल को नीचे दिखाए अनुसार फिट किया जा सकता है। ध्यान दें कि तर्क कैसे transfer
परिभाषित किया गया है; आपको xtransf
हर एक हस्तक्षेप (नाड़ी और क्षणभंगुर परिवर्तन) के लिए एक संकेतक चर की आवश्यकता है :
require(TSA)
cds <- structure(c(2580L, 2263L, 3679L, 3461L, 3645L, 3716L, 3955L, 3362L,
2637L, 2524L, 2084L, 2031L, 2256L, 2401L, 3253L, 2881L,
2555L, 2585L, 3015L, 2608L, 3676L, 5763L, 4626L, 3848L,
4523L, 4186L, 4070L, 4000L, 3498L),
.Dim = c(29L, 1L),
.Dimnames = list(NULL, "CD"),
.Tsp = c(2012, 2014.33333333333, 12),
class = "ts")
fit <- arimax(log(cds), order = c(1, 0, 0),
xtransf = data.frame(Oct13a = 1 * (seq_along(cds) == 22),
Oct13b = 1 * (seq_along(cds) == 22)),
transfer = list(c(0, 0), c(1, 0)))
fit
# Coefficients:
# ar1 intercept Oct13a-MA0 Oct13b-AR1 Oct13b-MA0
# 0.5599 7.9643 0.1251 0.9231 0.4332
# s.e. 0.1563 0.0684 0.1911 0.1146 0.2168
# sigma^2 estimated as 0.02131: log likelihood = 14.47, aic = -18.94
आप गुणांक और के t-आँकड़ा को देखकर प्रत्येक हस्तक्षेप के महत्व का परीक्षण कर सकते हैं । सुविधा के लिए, आप फ़ंक्शन का उपयोग कर सकते हैं ।ω 1ω0ω1coeftest
require(lmtest)
coeftest(fit)
# Estimate Std. Error z value Pr(>|z|)
# ar1 0.559855 0.156334 3.5811 0.0003421 ***
# intercept 7.964324 0.068369 116.4896 < 2.2e-16 ***
# Oct13a-MA0 0.125059 0.191067 0.6545 0.5127720
# Oct13b-AR1 0.923112 0.114581 8.0564 7.858e-16 ***
# Oct13b-MA0 0.433213 0.216835 1.9979 0.0457281 *
# ---
# Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
इस मामले में पल्स महत्व के स्तर पर महत्वपूर्ण नहीं है। इसके प्रभाव को पहले ही क्षणभंगुर परिवर्तन द्वारा पकड़ लिया जा सकता है।5%
हस्तक्षेप प्रभाव को निम्न प्रकार से निर्धारित किया जा सकता है:
intv.effect <- 1 * (seq_along(cds) == 22)
intv.effect <- ts(
intv.effect * 0.1251 +
filter(intv.effect, filter = 0.9231, method = "rec", sides = 1) * 0.4332)
intv.effect <- exp(intv.effect)
tsp(intv.effect) <- tsp(cds)
आप निम्न के रूप में हस्तक्षेप के प्रभाव की साजिश कर सकते हैं:
plot(100 * (intv.effect - 1), type = "h", main = "Total intervention effect")
यह प्रभाव अपेक्षाकृत स्थिर है क्योंकि करीब है (यदि बराबर था तो हम एक स्थायी स्तर बदलाव का निरीक्षण करेंगे)। 1 ω 2 1ω21ω21
संख्यात्मक रूप से, ये अक्टूबर 2013 में हस्तक्षेप के कारण उत्पन्न हर समय बिंदु पर मात्रा में वृद्धि का अनुमान है:
window(100 * (intv.effect - 1), start = c(2013, 10))
# Jan Feb Mar Apr May Jun Jul Aug Sep Oct
# 2013 74.76989
# 2014 40.60004 36.96366 33.69046 30.73844 28.07132
# Nov Dec
# 2013 49.16560 44.64838
हस्तक्षेप अक्टूबर 2013 में मनाया चर के मूल्य को लगभग बढ़ाता है । बाद की अवधि में प्रभाव बना रहता है लेकिन घटते वजन के साथ।75%
हम हाथ से हस्तक्षेप भी बना सकते हैं और उन्हें stats::arima
बाहरी रजिस्टरों के रूप में पारित कर सकते हैं । हस्तक्षेप एक पल्स प्लस हैं जो पैरामीटर साथ एक परिवर्तनशील परिवर्तन है और निम्नानुसार बनाया जा सकता है।0.9231
xreg <- cbind(
I1 = 1 * (seq_along(cds) == 22),
I2 = filter(1 * (seq_along(cds) == 22), filter = 0.9231, method = "rec",
sides = 1))
arima(log(cds), order = c(1, 0, 0), xreg = xreg)
# Coefficients:
# ar1 intercept I1 I2
# 0.5598 7.9643 0.1251 0.4332
# s.e. 0.1562 0.0671 0.1563 0.1620
# sigma^2 estimated as 0.02131: log likelihood = 14.47, aic = -20.94
ऊपर के रूप में गुणांक के समान अनुमान प्राप्त किए जाते हैं। यहाँ हमने को पर । मैट्रिक्स एक प्रकार का डमी वैरिएबल है जिसे आपको विभिन्न परिदृश्यों को आज़माने की आवश्यकता हो सकती है। आप लिए अलग-अलग मान भी सेट कर सकते हैं और इसके प्रभाव की तुलना कर सकते हैं। .9231 ω 2ω20.9231xreg
ω2
ये हस्तक्षेप एक additive outlier (AO) और पैकेज में परिभाषित एक क्षणभंगुर परिवर्तन (TC) के बराबर हैं tsoutliers
। इन प्रभावों का पता लगाने के लिए आप इस पैकेज का उपयोग कर सकते हैं जैसा कि @forecaster द्वारा उत्तर में दिखाया गया है या पहले इस्तेमाल किए गए रजिस्टरों का निर्माण करना है। उदाहरण के लिए, इस मामले में:
require(tsoutliers)
mo <- outliers(c("AO", "TC"), c(22, 22))
oe <- outliers.effects(mo, length(cds), delta = 0.9231)
arima(log(cds), order = c(1, 0, 0), xreg = oe)
# Coefficients:
# ar1 intercept AO22 TC22
# 0.5598 7.9643 0.1251 0.4332
# s.e. 0.1562 0.0671 0.1563 0.1620
# sigma^2 estimated as 0.02131: log likelihood=14.47
# AIC=-20.94 AICc=-18.33 BIC=-14.1
संपादित करें 1
मैंने देखा है कि आपके द्वारा दिए गए समीकरण को फिर से लिखा जा सकता है:
(ω0+ω1)−ω0ω2B1−ω2BPt
और यह निर्दिष्ट किया जा सकता है जैसा आपने उपयोग किया था transfer=list(c(1, 1))
।
जैसा कि नीचे दिखाया गया है, यह पैरामीटरकरण, इस मामले में, पैरामीटर के अनुमानों की ओर जाता है जिसमें पिछले पैरामीटर के मुकाबले एक अलग प्रभाव शामिल होता है। यह मुझे एक नब्ज और एक क्षणभंगुर परिवर्तन के बजाय एक नवोन्मेषी परिणाम के प्रभाव की याद दिलाता है।
fit2 <- arimax(log(cds), order=c(1, 0, 0), include.mean = TRUE,
xtransf=data.frame(Oct13 = 1 * (seq(cds) == 22)), transfer = list(c(1, 1)))
fit2
# ARIMA(1,0,0) with non-zero mean
# Coefficients:
# ar1 intercept Oct13-AR1 Oct13-MA0 Oct13-MA1
# 0.7619 8.0345 -0.4429 0.4261 0.3567
# s.e. 0.1206 0.1090 0.3993 0.1340 0.1557
# sigma^2 estimated as 0.02289: log likelihood=12.71
# AIC=-15.42 AICc=-11.61 BIC=-7.22
मैं पैकेज के अंकन से बहुत परिचित नहीं हूं TSA
लेकिन मुझे लगता है कि हस्तक्षेप के प्रभाव को अब निम्न प्रकार से निर्धारित किया जा सकता है:
intv.effect <- 1 * (seq_along(cds) == 22)
intv.effect <- ts(intv.effect * 0.4261 +
filter(intv.effect, filter = -0.4429, method = "rec", sides = 1) * 0.3567)
tsp(intv.effect) <- tsp(cds)
window(100 * (exp(intv.effect) - 1), start = c(2013, 10))
# Jan Feb Mar Apr May Jun Jul Aug
# 2014 -3.0514633 1.3820052 -0.6060551 0.2696013 -0.1191747
# Sep Oct Nov Dec
# 2013 118.7588947 -14.6135216 7.2476455
plot(100 * (exp(intv.effect) - 1), type = "h",
main = "Intervention effect (parameterization 2)")
प्रभाव को अब अक्टूबर 2013 में तेज वृद्धि के रूप में वर्णित किया जा सकता है और इसके बाद विपरीत दिशा में कमी की जा सकती है; तब हस्तक्षेप का प्रभाव वजन घटाने के सकारात्मक और नकारात्मक प्रभावों को जल्दी से गायब कर देता है।
यह प्रभाव कुछ अजीब है लेकिन वास्तविक डेटा में संभव हो सकता है। इस बिंदु पर मैं आपके डेटा और उन घटनाओं के संदर्भ को देखूंगा जिन्होंने डेटा को प्रभावित किया है। उदाहरण के लिए, एक नीति परिवर्तन, विपणन अभियान, खोज, ... जो कि अक्टूबर 2013 में हस्तक्षेप की व्याख्या कर सकता है। यदि हां, तो क्या यह अधिक समझदार है कि इस घटना का डेटा पर एक प्रभाव है जैसा कि पहले वर्णित है या जैसा कि हमने पाया। प्रारंभिक पैरामीटर के साथ?
एआईसी के अनुसार, प्रारंभिक मॉडल को प्राथमिकता दी जाएगी क्योंकि यह ( मुकाबले ) कम है । मूल श्रृंखला का प्लॉट दूसरे हस्तक्षेप चर के माप में शामिल तेज बदलावों के साथ एक स्पष्ट मैच का सुझाव नहीं देता है।- 15.42−18.94−15.42
डेटा के संदर्भ को जाने बिना, मैं कहूंगा कि पैरामीटर साथ एक क्षणभंगुर परिवर्तन के साथ एक एआर (1) मॉडल डेटा को मॉडल करने और हस्तक्षेप को मापने के लिए उपयुक्त होगा।0.9
संपादित करें २
का मान निर्धारित करता है कि हस्तक्षेप का प्रभाव कितनी तेजी से शून्य हो जाता है, इसलिए यह मॉडल में प्रमुख पैरामीटर है। हम इसका निरीक्षण करके मॉडल को के मानों की श्रेणी के लिए फिट कर सकते हैं । नीचे, इनमें से प्रत्येक मॉडल के लिए एआईसी संग्रहीत है।ω 2ω2ω2
omegas <- seq(0.5, 1, by = 0.01)
aics <- rep(NA, length(omegas))
for (i in seq(along = omegas)) {
tc <- filter(1 * (seq_along(cds) == 22), filter = omegas[i], method = "rec",
sides = 1)
tc <- ts(tc, start = start(cds), frequency = frequency(cds))
fit <- arima(log(cds), order = c(1, 0, 0), xreg = tc)
aics[i] <- AIC(fit)
}
omegas[which.min(aics)]
# [1] 0.88
plot(omegas, aics, main = "AIC for different values of the TC parameter")
सबसे कम AIC लिए पाया जाता है (पहले अनुमानित मूल्य के साथ अनुबंध में)। इस पैरामीटर में एक अपेक्षाकृत लगातार लेकिन क्षणभंगुर प्रभाव शामिल है। हम यह निष्कर्ष निकाल सकते हैं कि प्रभाव अस्थायी है क्योंकि एआईसी से अधिक मूल्यों के साथ अस्थायी है (याद रखें कि सीमा में, , हस्तक्षेप एक स्थायी स्तर की शिफ्ट बन जाता है)।0.9 ω 2 = 1ω2=0.880.9ω2=1
पूर्वानुमान में हस्तक्षेप को शामिल किया जाना चाहिए। पहले से ही देखी गई अवधि के लिए पूर्वानुमान प्राप्त करना पूर्वानुमानों के प्रदर्शन का आकलन करने के लिए एक उपयोगी अभ्यास है। नीचे दिया गया कोड मानता है कि श्रृंखला अक्टूबर 2013 में समाप्त हो रही है। इसके बाद पूर्वानुमानों को पैरामीटर साथ हस्तक्षेप सहित प्राप्त किया जाता है ।ω2=0.9
पहले हम एक रूप में हस्तक्षेप के साथ एआर (1) मॉडल फिट करते हैं (पैरामीटर ):ω2=0.9
tc <- filter(1 * (seq.int(length(cds) + 12) == 22), filter = 0.9, method = "rec",
sides = 1)
tc <- ts(tc, start = start(cds), frequency = frequency(cds))
fit <- arima(window(log(cds), end = c(2013, 10)), order = c(1, 0, 0),
xreg = window(tc, end = c(2013, 10)))
पूर्वानुमान निम्नानुसार प्राप्त और प्रदर्शित किए जा सकते हैं:
p <- predict(fit, n.ahead = 19, newxreg = window(tc, start = c(2013, 11)))
plot(cbind(window(cds, end = c(2013, 10)), exp(p$pred)), plot.type = "single",
ylab = "", type = "n")
lines(window(cds, end = c(2013, 10)), type = "b")
lines(window(cds, start = c(2013, 10)), col = "gray", lty = 2, type = "b")
lines(exp(p$pred), type = "b", col = "blue")
legend("topleft",
legend = c("observed before the intervention",
"observed after the intervention", "forecasts"),
lty = rep(1, 3), col = c("black", "gray", "blue"), bty = "n")
पहले पूर्वानुमान अपेक्षाकृत अच्छे देखे गए मूल्यों (ग्रे डॉटेड लाइन) से मेल खाते हैं। शेष पूर्वानुमान दिखाते हैं कि श्रृंखला मूल माध्य के लिए मार्ग कैसे जारी रखेगी। अनिश्चितता को दर्शाते हुए, विश्वास अंतराल बहुत बड़ा है। इसलिए हमें सतर्क रहना चाहिए और मॉडल को संशोधित करना चाहिए क्योंकि नए डेटा रिकॉर्ड किए जाते हैं।
95% अंतराल को पिछले प्लॉट में इस प्रकार जोड़ा जा सकता है:
lines(exp(p$pred + 1.96 * p$se), lty = 2, col = "red")
lines(exp(p$pred - 1.96 * p$se), lty = 2, col = "red")