আমার পরামর্শটি আপনার প্রস্তাবের সাথে সমান। তবে আমি চলমান গড়ের পরিবর্তে সময় সিরিজের মডেলটি ব্যবহার করব। আরিমা মডেলগুলির কাঠামোটি কেবলমাত্র রেজিস্ট্রার হিসাবে সিরিজ এমএসসিআই নয়, জিসিসি সিরিজের পিছনে রয়েছে যা তথ্যগুলির গতিশীলতাও ধারণ করতে পারে including
প্রথমত, আপনি এমএসসিআই সিরিজটির জন্য একটি এআরআইএমএ মডেল ফিট করতে পারেন এবং এই সিরিজের অনুপস্থিত পর্যবেক্ষণগুলি ফাঁস করে দিতে পারেন। তারপরে, আপনি এমসিসিআই কে বহিরাগত রেজিস্ট্রার হিসাবে ব্যবহার করে সিরিজ জিসিসির জন্য একটি আরিমা মডেল ফিট করতে পারেন এবং এই মডেলের উপর ভিত্তি করে জিসিসির জন্য পূর্বাভাস পেতে পারেন। এটি করার ক্ষেত্রে, আপনাকে অবশ্যই সিরিজের গ্রাফিক্যালি পর্যবেক্ষণ করা বিরতিগুলির সাথে সতর্কতা অবলম্বন করতে হবে এবং এটি আরিমা মডেলটির নির্বাচন এবং ফিটকে বিকৃত করতে পারে।
আমি এখানে এই বিশ্লেষণটি করতে যাচ্ছি R
। আমি forecast::auto.arima
এআরআইএমএ মডেলটি নির্বাচন করতে এবং tsoutliers::tso
সম্ভাব্য স্তরের শিফ্টগুলি (এলএস), অস্থায়ী পরিবর্তনগুলি (টিসি) বা অ্যাডিটিভ আউটলিয়ার্স (এও) সনাক্ত করতে ফাংশনটি ব্যবহার করি ।
এগুলি একবারে লোড হওয়া ডেটা:
gcc <- structure(c(117.709, 120.176, 117.983, 120.913, 134.036, 145.829, 143.108, 149.712, 156.997, 162.158, 158.526, 166.42, 180.306, 185.367, 185.604, 200.433, 218.923, 226.493, 230.492, 249.953, 262.295, 275.088, 295.005, 328.197, 336.817, 346.721, 363.919, 423.232, 492.508, 519.074, 605.804, 581.975, 676.021, 692.077, 761.837, 863.65, 844.865, 947.402, 993.004, 909.894, 732.646, 598.877, 686.258, 634.835, 658.295, 672.233, 677.234, 491.163, 488.911, 440.237, 486.828, 456.164, 452.141, 495.19, 473.926,
492.782, 525.295, 519.081, 575.744, 599.984, 668.192, 626.203, 681.292, 616.841, 676.242, 657.467, 654.66, 635.478, 603.639, 527.326, 396.904, 338.696, 308.085, 279.706, 252.054, 272.082, 314.367, 340.354, 325.99, 326.46, 327.053, 354.192, 339.035, 329.668, 318.267, 309.847, 321.98, 345.594, 335.045, 311.363,
299.555, 310.802, 306.523, 315.496, 324.153, 323.256, 334.802, 331.133, 311.292, 323.08, 327.105, 320.258, 312.749, 305.073, 297.087, 298.671), .Tsp = c(2002.91666666667, 2011.66666666667, 12), class = "ts")
msci <- structure(c(1000, 958.645, 1016.085, 1049.468, 1033.775, 1118.854, 1142.347, 1298.223, 1197.656, 1282.557, 1164.874, 1248.42, 1227.061, 1221.049, 1161.246, 1112.582, 929.379, 680.086, 516.511, 521.127, 487.562, 450.331, 478.255, 560.667, 605.143, 598.611, 609.559, 615.73, 662.891, 655.639, 628.404, 602.14, 601.1, 622.624, 661.875, 644.751, 588.526, 587.4, 615.008, 606.133,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 609.51, 598.428, 595.622, 582.905, 599.447, 627.561, 619.581, 636.284, 632.099, 651.995, 651.39, 687.194, 676.76, 694.575, 704.806, 727.625, 739.842, 759.036, 787.057, 817.067, 824.313, 857.055, 805.31, 873.619), .Tsp = c(2007.33333333333, 2014.5, 12), class = "ts")
পদক্ষেপ 1: এমএসসিআই সিরিজটিতে একটি আরিমা মডেল ফিট করুন
গ্রাফিক কিছু বিরতির উপস্থিতি প্রকাশ করেও, কোনও বহিরাগত তাদের দ্বারা সনাক্ত করা যায়নি tso
। এটি নমুনার মাঝখানে বেশ কয়েকটি নিখোঁজ পর্যবেক্ষণ থাকার কারণে হতে পারে। আমরা দুটি পদক্ষেপে এটি মোকাবেলা করতে পারি। প্রথমে একটি এআরআইএমএ মডেলটি ফিট করুন এবং অনুপস্থিত পর্যবেক্ষণগুলিকে ফাঁসানোর জন্য এটি ব্যবহার করুন; দ্বিতীয়ত, সম্ভাব্য এলএস, টিসি, এও পরীক্ষা করার জন্য ইন্টারপোল্টেড সিরিজ চেক করার জন্য একটি এআরআইএমএ মডেলটি ফিট করুন এবং যদি পরিবর্তনগুলি পাওয়া যায় তবে ইন্টারপোল্টেড মানগুলিকে পরিমার্জন করুন।
এমএসসিআই সিরিজের জন্য আরিমা মডেলটি চয়ন করুন:
require("forecast")
fit1 <- auto.arima(msci)
fit1
# ARIMA(1,1,2) with drift
# Coefficients:
# ar1 ma1 ma2 drift
# -0.6935 1.1286 0.7906 -1.4606
# s.e. 0.1204 0.1040 0.1059 9.2071
# sigma^2 estimated as 2482: log likelihood=-328.05
# AIC=666.11 AICc=666.86 BIC=678.38
এই পোস্টে আমার উত্তরে আলোচিত পদ্ধতির পরে নিখোঁজ পর্যবেক্ষণগুলি পূরণ করুন
:
kr <- KalmanSmooth(msci, fit1$model)
tmp <- which(fit1$model$Z == 1)
id <- ifelse (length(tmp) == 1, tmp[1], tmp[2])
id.na <- which(is.na(msci))
msci.filled <- msci
msci.filled[id.na] <- kr$smooth[id.na,id]
ভরাট সিরিজে একটি আরিমা মডেল ফিট করুন msci.filled
। এখন কিছু বিদেশি পাওয়া গেছে। তবুও, বিকল্প বিকল্প ব্যবহার করে বিভিন্ন বিদেশী সনাক্ত করা হয়েছিল। বেশিরভাগ ক্ষেত্রে যেটি পাওয়া গেছে আমি সেটিকেই রাখব, ২০০৮ সালের অক্টোবরে স্তর পর্যায়ক্রমে (পর্যবেক্ষণ ১৮) আপনি উদাহরণস্বরূপ এগুলি এবং অন্যান্য বিকল্পগুলির জন্য চেষ্টা করতে পারেন।
require("tsoutliers")
tso(msci.filled, remove.method = "bottom-up", tsmethod = "arima",
args.tsmethod = list(order = c(1,1,1)))
tso(msci.filled, remove.method = "bottom-up", args.tsmethod = list(ic = "bic"))
নির্বাচিত মডেলটি এখন:
mo <- outliers("LS", 18)
ls <- outliers.effects(mo, length(msci))
fit2 <- auto.arima(msci, xreg = ls)
fit2
# ARIMA(2,1,0)
# Coefficients:
# ar1 ar2 LS18
# -0.1006 0.4857 -246.5287
# s.e. 0.1139 0.1093 45.3951
# sigma^2 estimated as 2127: log likelihood=-321.78
# AIC=651.57 AICc=652.06 BIC=661.39
অনুপস্থিত পর্যবেক্ষণগুলির সংযোগটি সংশোধন করতে পূর্ববর্তী মডেলটি ব্যবহার করুন:
kr <- KalmanSmooth(msci, fit2$model)
tmp <- which(fit2$model$Z == 1)
id <- ifelse (length(tmp) == 1, tmp[1], tmp[2])
msci.filled2 <- msci
msci.filled2[id.na] <- kr$smooth[id.na,id]
প্রাথমিক এবং চূড়ান্ত ব্যবধানগুলি একটি প্লটের সাথে তুলনা করা যেতে পারে (স্থান বাঁচাতে এখানে দেখানো হয়নি):
plot(msci.filled, col = "gray")
lines(msci.filled2)
পদক্ষেপ 2: এক্সসিএনজি রেজিস্ট্রার হিসাবে এমএসসি.ফিল্ড 2 ব্যবহার করে জিসিসিতে একটি আরিমা মডেল ফিট করুন
আমি শুরুতে অনুপস্থিত পর্যবেক্ষণগুলি উপেক্ষা করি msci.filled2
। এই মুহুর্তে আমি auto.arima
পাশাপাশি ব্যবহার করতে কিছু অসুবিধা পেয়েছি tso
, তাই আমি বেশ কয়েকটি আরিমা মডেল হাতে হাতে চেষ্টা করেছি tso
এবং শেষ পর্যন্ত এআরআইএমএ (1,1,0) বেছে নিয়েছি।
xreg <- window(cbind(gcc, msci.filled2)[,2], end = end(gcc))
fit3 <- tso(gcc, remove.method = "bottom-up", tsmethod = "arima",
args.tsmethod = list(order = c(1,1,0), xreg = data.frame(msci=xreg)))
fit3
# ARIMA(1,1,0)
# Coefficients:
# ar1 msci AO72
# -0.1701 0.5131 30.2092
# s.e. 0.1377 0.0173 6.7387
# sigma^2 estimated as 71.1: log likelihood=-180.62
# AIC=369.24 AICc=369.64 BIC=379.85
# Outliers:
# type ind time coefhat tstat
# 1 AO 72 2008:11 30.21 4.483
জিসিসির প্লটটি ২০০৮ এর শুরুতে একটি পরিবর্তন দেখায় However তবে এটি মনে হয় এটি ইতিমধ্যে রেজিস্ট্রার এমএসসিআই দ্বারা বন্দী হয়েছিল এবং ২০০৮ সালের নভেম্বর মাসে অ্যাডিটিভাল আউটলেটর ছাড়া কোনও অ্যাডিটোনাল রেজিস্ট্রারকে অন্তর্ভুক্ত করা হয়নি।
অবশিষ্টাংশের প্লটটি কোনও স্বতঃসংশ্লিষ্ট কাঠামোর পরামর্শ দেয়নি তবে প্লটটি ২০০৮ সালের নভেম্বরে স্তর স্তর পরিবর্তন এবং ফেব্রুয়ারী ২০১১ এ একটি অ্যাডিটিভ আউটলার প্রস্তাব করেছিল। তবে, মডেলটির ডায়াগনস্টিকটি সম্পর্কিত হস্তক্ষেপটি আরও খারাপ ছিল। এই মুহুর্তে আরও বিশ্লেষণের প্রয়োজন হতে পারে। এখানে, আমি শেষ মডেলের উপর ভিত্তি করে পূর্বাভাস পাওয়া চালিয়ে যাব fit3
।
95 %
newxreg <- data.frame(msci=window(msci.filled2, start = c(2011, 10)), AO72=rep(0, 34))
p <- predict(fit3$fit, n.ahead = 34, newxreg = newxreg)
head(p$pred)
# [1] 298.3544 298.2753 298.0958 298.0641 297.6829 297.7412
par(mar = c(3,3.5,2.5,2), las = 1)
plot(cbind(gcc, msci), xaxt = "n", xlab = "", ylab = "", plot.type = "single", type = "n")
grid()
lines(gcc, col = "blue", lwd = 2)
lines(msci, col = "green3", lwd = 2)
lines(window(msci.filled2, start = c(2010, 9), end = c(2012, 7)), col = "green", lwd = 2)
lines(p$pred, col = "red", lwd = 2)
lines(p$pred + 1.96 * p$se, col = "red", lty = 2)
lines(p$pred - 1.96 * p$se, col = "red", lty = 2)
xaxis1 <- seq(2003, 2014)
axis(side = 1, at = xaxis1, labels = xaxis1)
legend("topleft", col = c("blue", "green3", "green", "red", "red"), lwd = 2, bty = "n", lty = c(1,1,1,1,2), legend = c("GCC", "MSCI", "Interpolated values", "Forecasts", "95% confidence interval"))