প্রথমে সচেতন থাকুন যে forecast
নমুনা বহির্ভূত পূর্বাভাসগুলি গণনা করে তবে আপনি নমুনা পর্যবেক্ষণে আগ্রহী।
কলম্যান ফিল্টার অনুপস্থিত মানগুলি পরিচালনা করে। সুতরাং আপনি আউটপুট দ্বারা ফিরে থেকে Arima মডেল রাষ্ট্র স্থান আকার নিতে পারে forecast::auto.arima
বা stats::arima
তা পাস KalmanRun
।
সম্পাদনা করুন (stats0007 দ্বারা উত্তরের ভিত্তিতে কোডটি ঠিক করুন )
পূর্ববর্তী সংস্করণে আমি পর্যবেক্ষিত সিরিজের সাথে সম্পর্কিত ফিল্টার হওয়া রাজ্যের কলামটি নিয়েছি, তবে আমার সম্পূর্ণ ম্যাট্রিক্সটি ব্যবহার করা উচিত এবং পর্যবেক্ষণের সমীকরণের সংশ্লিষ্ট ম্যাট্রিক্স অপারেশন করা উচিত, । (মন্তব্যের জন্য @ stats0007 কে ধন্যবাদ)) নীচে আমি কোডটি আপডেট করি এবং সে অনুযায়ী প্লট করি।Yটি= জেডαটি
আমি এর ts
পরিবর্তে কোনও বস্তুকে নমুনা সিরিজ হিসাবে ব্যবহার করি zoo
তবে এটি একই হওয়া উচিত:
require(forecast)
# sample series
x0 <- x <- log(AirPassengers)
y <- x
# set some missing values
x[c(10,60:71,100,130)] <- NA
# fit model
fit <- auto.arima(x)
# Kalman filter
kr <- KalmanRun(x, fit$model)
# impute missing values Z %*% alpha at each missing observation
id.na <- which(is.na(x))
for (i in id.na)
y[i] <- fit$model$Z %*% kr$states[i,]
# alternative to the explicit loop above
sapply(id.na, FUN = function(x, Z, alpha) Z %*% alpha[x,],
Z = fit$model$Z, alpha = kr$states)
y[id.na]
# [1] 4.767653 5.348100 5.364654 5.397167 5.523751 5.478211 5.482107 5.593442
# [9] 5.666549 5.701984 5.569021 5.463723 5.339286 5.855145 6.005067
আপনি ফলাফলটি প্লট করতে পারেন (পুরো সিরিজের জন্য এবং পুরো বছরের জন্য নমুনার মাঝখানে অনুপস্থিত পর্যবেক্ষণগুলি সহ):
par(mfrow = c(2, 1), mar = c(2.2,2.2,2,2))
plot(x0, col = "gray")
lines(x)
points(time(x0)[id.na], x0[id.na], col = "blue", pch = 19)
points(time(y)[id.na], y[id.na], col = "red", pch = 17)
legend("topleft", legend = c("true values", "imputed values"),
col = c("blue", "red"), pch = c(19, 17))
plot(time(x0)[60:71], x0[60:71], type = "b", col = "blue",
pch = 19, ylim = range(x0[60:71]))
points(time(y)[60:71], y[60:71], col = "red", pch = 17)
lines(time(y)[60:71], y[60:71], col = "red")
legend("topleft", legend = c("true values", "imputed values"),
col = c("blue", "red"), pch = c(19, 17), lty = c(1, 1))
আপনি কলমান ফিল্টারের পরিবর্তে কলম্যান স্মুথ ব্যবহার করে একই উদাহরণ পুনরাবৃত্তি করতে পারেন। আপনাকে যে পরিবর্তন করতে হবে তা হ'ল এই লাইনগুলি:
kr <- KalmanSmooth(x, fit$model)
y[i] <- kr$smooth[i,]
কলম্যান ফিল্টারের মাধ্যমে নিখোঁজ পর্যবেক্ষণগুলি নিয়ে কাজ করার বিষয়টি কখনও কখনও সিরিজের এক্সট্রোপোলেশন হিসাবে ব্যাখ্যা করা হয়; যখন কলমান স্মুথ ব্যবহার করা হয়, অনুপস্থিত পর্যবেক্ষণগুলি পর্যবেক্ষণ করা সিরিজের অন্তরঙ্গকরণ দ্বারা পূরণ করা হবে বলে জানা যায়।