আর এর সাথে আরিম্যাক্স-মডেল কীভাবে ফিট করবেন?


33

আমার কাছে প্রতি ঘন্টা পরিমাপের চারটি আলাদা সময় সিরিজ রয়েছে:

  1. একটি বাড়ির ভিতরে তাপ গ্রাস
  2. বাড়ির বাইরে তাপমাত্রা
  3. সৌর বিকিরণ
  4. বাতাসের গতি

আমি বাড়ির ভিতরে তাপ গ্রাহ্য পূর্বাভাস করতে সক্ষম হতে চাই। বার্ষিক ভিত্তিতে এবং প্রতিদিনের ভিত্তিতে উভয়ই একটি স্পষ্ট মৌসুমী প্রবণতা রয়েছে। যেহেতু বিভিন্ন সিরিজের মধ্যে একটি স্পষ্ট সম্পর্ক রয়েছে, তাই আমি একটি এরিমিক্স-মডেল ব্যবহার করে সেগুলি ফিট করতে চাই। এটি আরজে করা যাবে, প্যাকেজ টিএসএ থেকে অ্যারিম্যাক্স ফাংশনটি ব্যবহার করে।

আমি এই ফাংশনে ডকুমেন্টেশন পড়ার চেষ্টা করেছি এবং স্থানান্তর ফাংশনগুলি পড়তে পারি, তবে এখনও পর্যন্ত আমার কোড:

regParams = ts.union(ts(dayy))
transferParams = ts.union(ts(temp))
model10 = arimax(heat,order=c(2,1,1),seasonal=list(order=c(0,1,1),period=24),xreg=regParams,xtransf=transferParams,transfer=list(c(1,1))
pred10 = predict(model10, newxreg=regParams)

আমাকে দেয়: এখানে চিত্র বর্ণনা লিখুন

যেখানে কালো রেখাটি হ'ল প্রকৃত পরিমাপ করা ডেটা এবং সবুজ রেখাটি আমার তুলনায় তুলনামূলকভাবে উপযুক্ত model এটি কেবল একটি ভাল মডেলই নয়, স্পষ্টতই কিছু ভুল।

আমি স্বীকার করব যে আমার এরিম্যাক্স-মডেল এবং স্থানান্তর ফাংশন সম্পর্কে আমার জ্ঞান সীমাবদ্ধ। অ্যারিম্যাক্স (), (যতদূর আমি বুঝতে পেরেছি) ফাংশনে, xtransf হ'ল বহির্মুখী টাইম সিরিজ যা আমি ব্যবহার করতে চাই (স্থানান্তর ফাংশন ব্যবহার করে) আমার মূল সময় সিরিজের পূর্বাভাস দিতে। তবে xreg এবং xxtransf এর মধ্যে পার্থক্য কী?

আরও সাধারণভাবে আমি কী ভুল করেছি? আমি এলএম (তাপ-টেম্পোরাল রেডি উইন্ড * টাইম) থেকে প্রাপ্ত ব্যক্তির চেয়ে আরও ভাল ফিট করতে সক্ষম হতে চাই ।

সম্পাদনা: কয়েকটি মন্তব্যের ভিত্তিতে, আমি স্থানান্তর সরিয়েছি এবং এর পরিবর্তে xreg যুক্ত করেছি:

regParams = ts.union(ts(dayy), ts(temp), ts(time))
model10 = arimax(heat,order=c(2,1,1),seasonal=list(order=c(0,1,1),period=24),xreg=regParams)

যেখানে দিনটি হ'ল "বছরের সংখ্যা দিন", এবং সময়টি দিনের ঘন্টা। টেম্প আবার বাইরে তাপমাত্রা। এটি আমাকে নিম্নলিখিত ফলাফল দেয়:

এখানে চিত্র বর্ণনা লিখুন

যা ভাল, তবে আমি যা দেখতে প্রত্যাশা করছিলাম তা প্রায় নয়।

উত্তর:


34

আপনি একটি আরিমা মডেল ব্যবহার করে 2 স্তরের মৌসুমী নিয়ে একটি সিরিজ মডেলিং করতে কিছুটা সমস্যা পেতে যাচ্ছেন have এই অধিকারটি পাওয়া জিনিস সঠিকভাবে সেট আপ করার উপর নির্ভর করে চলেছে। আপনি কি এখনও একটি সরল রৈখিক মডেল বিবেচনা করেছেন? এআরআইএমএ মডেলগুলির তুলনায় এগুলি অনেক দ্রুত এবং সহজ and

  1. আমি ধরে নিচ্ছি আপনার কাছে প্রতি ঘন্টা ডেটা রয়েছে তাই আপনার টিএস অবজেক্টটি 24 এর ফ্রিকোয়েন্সি সহ সেটআপ করা আছে তা নিশ্চিত করুন।
  2. ডামি ভেরিয়েবলগুলি ব্যবহার করে আপনি অন্যান্য স্তরের মৌসুমীর মডেল করতে পারেন। উদাহরণস্বরূপ, আপনি বছরের মাসের প্রতিনিধিত্ব করে 0/1 ডামিগুলির একটি সেট চাইবেন।
  3. যে xregকোনও সিভারিেটস (তাপমাত্রার মতো) এর সাথে যুক্তিতে ডামি ভেরিয়েবলগুলি অন্তর্ভুক্ত করুন ।
  4. বেস আর এই ফাংশনটি মধ্যে Arima ফাংশন ব্যবহারের মাধ্যমে ARMAX মডেলের সব ব্যবস্থা করতে সক্ষম সঙ্গে মডেল ফিট xregযুক্তি।
  5. ব্যবহার করে দেখুন এরিমা এবং auto.arima পূর্বাভাস প্যাকেজের মধ্যে ফাংশন। অটো.রিমাটি দুর্দান্ত কারণ এটি আপনার আরিমা মডেলের জন্য স্বয়ংক্রিয়ভাবে ভাল পরামিতিগুলি আবিষ্কার করবে। তবে এটি আপনার ডেটাসেটে ফিট করতে চিরকাল লাগবে।
  6. প্রতিটি মৌসুমী স্তরের জন্য ডমি ভেরিয়েবলগুলি ব্যবহার করে, অরিমা প্যাকেজে tslm ফাংশন ব্যবহার করে দেখুন। এটি আরিমা মডেলের তুলনায় অনেক দ্রুত ফিট হবে এবং আপনার পরিস্থিতিতে আরও ভাল কাজ করতে পারে।
  7. যদি 4/5/6 কাজ না করে, তবে তারা স্থানান্তর ফাংশন সম্পর্কে উদ্বেগ শুরু করুন। হাঁটতে পারার আগে আপনাকে ক্রল করতে হবে।
  8. আপনি যদি ভবিষ্যতে পূর্বাভাসের পরিকল্পনা করে থাকেন তবে আপনাকে প্রথমে আপনার xreg ভেরিয়েবলের পূর্বাভাস দিতে হবে। এটি মরসুমের ডমিগুলির পক্ষে সহজ, তবে কীভাবে একটি ভাল আবহাওয়ার পূর্বাভাস দেওয়া যায় তা সম্পর্কে আপনাকে ভাবতে হবে। Historicalতিহাসিক ডেটার মিডিয়ান ব্যবহার করতে পারেন?

আমি কীভাবে এটির কাছে যাব তার উদাহরণ এখানে রয়েছে:

#Setup a fake time series
set.seed(1)
library(lubridate)
index <- ISOdatetime(2010,1,1,0,0,0)+1:8759*60*60
month <- month(index)
hour <- hour(index)
usage <- 1000+10*rnorm(length(index))-25*(month-6)^2-(hour-12)^2
usage <- ts(usage,frequency=24)

#Create monthly dummies.  Add other xvars to this matrix
xreg <- model.matrix(~as.factor(month))[,2:12]
colnames(xreg) <- c('Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')

#Fit a model
library(forecast)
model <- Arima(usage, order=c(0,0,0), seasonal=list(order=c(1,0,0), period=24), xreg=xreg)
plot(usage)
lines(fitted(model),col=2)

#Benchmark against other models
model2 <- tslm(usage~as.factor(month)+as.factor(hour))
model3 <- tslm(usage~as.factor(month))
model4 <- rep(mean(usage),length(usage))

#Compare the 4 models
library(plyr) #for rbind.fill
ACC <- rbind.fill(  data.frame(t(accuracy(model))),
                    data.frame(t(accuracy(model2))),
                    data.frame(t(accuracy(model3))),
                    data.frame(t(accuracy(model4,usage)))
                )
ACC <- round(ACC,2)
ACC <- cbind(Type=c('Arima','LM1','Monthly Mean','Mean'),ACC)
ACC[order(ACC$MAE),]

লাগানো () ফাংশন কী। যদি আমি এটি ব্যবহার করি তবে আমি পূর্বাভাসের চেয়ে বেশি ভাল ফলাফল পেয়েছি (মডেল 10, নিউক্স্রেগ = রেজিপ্যারামস)।
উদ্বিগ্ন

@utdiscant: predict()পূর্বাভাসের জন্য ব্যবহৃত হয়, যখন fitted()the তিহাসিক সময়ের তুলনায় মডেলটিকে ফিট করে। আপনি যদি আরও নির্দিষ্ট সহায়তা চান তবে আপনার কিছু কোড সহ একটি পুনরুত্পাদনযোগ্য উদাহরণ পোস্ট করা উচিত।
জাচ

@ বিদ্বেষী: এছাড়াও, আপনি যদি দিনটিকে এক্সরেগ হিসাবে ব্যবহার করেন তবে আপনার অতিরিক্ত চাপ দেওয়ার ঝুঁকি রয়েছে, কারণ আপনার কেবল প্রতিদিন 24 টি পর্যবেক্ষণ রয়েছে। আপনি বছরের মাস ব্যবহার করলে আপনি আরও ভাল পূর্বাভাসের ফলাফল পেতে পারেন।
Zach

@utdiscant: তদ্ব্যতীত, আপনার সময় ভিত্তিক এক্সরেগগুলি ডামি ভেরিয়েবল হওয়া দরকার । আপনি এখন যেভাবে মডেল করেছেন তা হ'ল আপনি heatদিনের ঘন্টা সহ্য রৈখিকভাবে বাড়ার প্রত্যাশা করছেন এবং ঘন্টাটি ১ এ ফিরে আসার পরে পিছনে ঝাঁপিয়ে পড়ুন আপনি যদি ডামি ভেরিয়েবল ব্যবহার করেন তবে দিনের প্রতিটি ঘন্টা তার নিজস্ব প্রভাব অর্জন করবে। আমার উদাহরণ কোডটি চালান, এবং আমি কীভাবে আমার xreg অবজেক্টটি তৈরি করব সে সম্পর্কে যত্নবান মনোযোগ দিন।
Zach

statsআর forecastপ্যাকেজগুলিতে এআরআইএমএ ফাংশনের একটি খারাপ দিক হ'ল তারা প্রোবার ট্রান্সফার ফাংশনগুলিতে ফিট করে না। stats::arimaফাংশনের ডকুমেন্টেশনটি নিম্নোক্তভাবে উল্লেখ করে: যদি একটি এক্সগ্রিগ টার্ম অন্তর্ভুক্ত করা হয় তবে ত্রুটি শর্তের জন্য একটি এআরএমএ মডেলের সাথে একটি লিনিয়ার রিগ্রেশন (যদি অন্তর্ভুক্ত থাকে তবে ধ্রুবক শব্দ সহ সত্যই আলাদা হয় না) is সুতরাং, আপনার যদি সত্যই স্থানান্তর ফাংশন ফিট করতে হয় তবে মনে হয় TSA::arimaxফাংশনটি toোকা উপায় R
ক্রিস্টোফার

8

আমি কিছুক্ষণের জন্য লোড পূর্বাভাস করতে আর ব্যবহার করছি এবং আমি আপনাকে forecastপ্যাকেজ এবং এর অমূল্য ফাংশনগুলি (যেমন auto.arima) ব্যবহার করার পরামর্শ দিতে পারি ।

আপনি নিম্নলিখিত কমান্ড সহ একটি আরিমা মডেল তৈরি করতে পারেন:

model = arima(y, order, xreg = exogenous_data)

সঙ্গে yআপনার predictand (আমি অনুমান dayy), orderআপনার মডেল (বিবেচনায় ঋতু) এবং ক্রম exogenous_dataআপনার তাপমাত্রা, সৌর বিকিরণ, ইত্যাদি ফাংশন auto.arimaআপনি অনুকূল মডেল অর্ডার এটি সাহায্য করে। আপনি এখানে "পূর্বাভাস" প্যাকেজ সম্পর্কে একটি সংক্ষিপ্ত টিউটোরিয়াল খুঁজে পেতে পারেন ।


যা পূর্বাভাস দেওয়া উচিত তা হ'ল তাপ (ঘরের তাপ খরচ)।
উড্ডিস্ক্যান্ট

3

আমি ব্যক্তিগতভাবে স্থানান্তর ফাংশন বুঝতে পারি না তবে আমি মনে করি আপনি পেয়েছেন xtransfএবং xregবিপরীত হয়েছেন। আর বেস মধ্যে অন্তত arimaএটা xregআপনার exogenous ভেরিয়েবল রয়েছে। এটা আমার ছাপ ট্রান্সফার ফাংশন বর্ণনা করে যে কিভাবে বদলে (lagged তথ্য ভবিষ্যৎ মান প্রভাবিত করে) কি

আমি xregআপনার বহির্মুখী ভেরিয়েবলগুলি ব্যবহার করার চেষ্টা করব , সম্ভবত কোনও ট্রান্সফার ফাংশন দাবি arimaকরলে using arimaxসমস্যাটি হ'ল আপনার মডেলটি প্রতিদিনের, তবে আপনার ডেটাতে দৈনিক এবং বার্ষিক seasonতু উভয়ই রয়েছে এবং আমি এখনই নিশ্চিত নই যদি প্রথম পার্থক্য (দ্য order=(*, 1, *)) এটি যত্ন নেবে বা না রাখে। (আপনি অবশ্যই দৈনিক মৌসুমতাকে বিবেচনা করে এমন কোনও মডেল থেকে জাদুবিদ্যার সারা বছর পূর্বাভাস পাবেন না))

পিএস আপনি timeআপনার ব্যবহার করেন lmকি? আক্ষরিক ঘড়ির সময় বা 1-আপ পর্যবেক্ষণ নম্বর? আমার মনে হয় আপনি একটি মিশ্র প্রতিক্রিয়া মডেল (ব্যবহার করে কিছু পেতে পারে lmerমধ্যে lme4প্যাকেজ), যদিও আমি মূর্ত আউট নি কিনা করছেন সঠিকভাবে autocorrelation করে একটি সময় সিরিজ ঘটবে জন্য অ্যাকাউন্ট। যদি lmএটির জন্য দায়বদ্ধ না হয়, যা একটি নয়, আপনি একটি আকর্ষণীয় ফিট পেতে পারেন তবে আপনার ভবিষ্যদ্বাণীটি কতটা নির্ভুল তা সম্পর্কে আপনার ধারণাটি খুব আশাবাদী হবে।


আমার পরিমাপের ঘন্টা এবং পরিমাপের "বছরের দিন" উভয়ই রয়েছে।
উদ্বিগ্ন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.