आर के साथ एक ARIMAX- मॉडल कैसे फिट करें?


33

मेरे पास प्रति घंटे माप की चार अलग-अलग श्रृंखलाएं हैं:

  1. एक घर के अंदर गर्मी की खपत
  2. घर के बाहर का तापमान
  3. सौर विकिरण
  4. हवा की गति

मैं घर के अंदर गर्मी की खपत की भविष्यवाणी करने में सक्षम होना चाहता हूं। एक स्पष्ट मौसमी प्रवृत्ति है, दोनों वार्षिक आधार पर, और दैनिक आधार पर। चूंकि विभिन्न श्रृंखलाओं के बीच एक स्पष्ट संबंध है, इसलिए मैं उन्हें ARIMAX-मॉडल का उपयोग करके फिट करना चाहता हूं। यह पैकेज टीएसए से फ़ंक्शन अरिमैक्स का उपयोग करके आर में किया जा सकता है।

मैंने इस फंक्शन पर डॉक्यूमेंटेशन को पढ़ने की कोशिश की, और ट्रांसफर फंक्शन्स पर पढ़ने के लिए, लेकिन अब तक, मेरा कोड:

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)

मुझे देता है: यहाँ छवि विवरण दर्ज करें

जहां काली रेखा वास्तविक मापा गया डेटा है, और तुलना में ग्रीन लाइन मेरा फिट मॉडल है। न केवल यह एक अच्छा मॉडल नहीं है, बल्कि स्पष्ट रूप से कुछ गलत है।

मैं यह स्वीकार करूंगा कि ARIMAX- मॉडल और स्थानांतरण कार्यों का मेरा ज्ञान सीमित है। फ़ंक्शन में अरिमैक्स (), (जहां तक ​​मैंने समझा है), xtransf बहिर्जात समय श्रृंखला है जिसका उपयोग मैं अपने मुख्य समय श्रृंखला की भविष्यवाणी करने के लिए (हस्तांतरण कार्यों का उपयोग करके) करना चाहता हूं। लेकिन वास्तव में xreg और xtransf में क्या अंतर है?

अधिक आम तौर पर, मैंने क्या गलत किया है? मैं चाहूंगा कि एलएम (ताप ~ अस्थायी रेडियो पवन * समय) से प्राप्त की गई तुलना में बेहतर फिट हो सके ।

संपादन: कुछ टिप्पणियों के आधार पर, मैंने स्थानांतरण हटा दिया, और इसके बजाय 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

आपको ARIMA मॉडल का उपयोग करके सीज़न के 2 स्तरों के साथ एक श्रृंखला मॉडलिंग करने में थोड़ी परेशानी हो रही है। यह अधिकार प्राप्त करना चीजों को सही ढंग से स्थापित करने पर अत्यधिक निर्भर है। क्या आपने अभी तक एक साधारण रैखिक मॉडल पर विचार किया है? वे ARIMA मॉडल की तुलना में फिट होने के लिए बहुत तेज़ और आसान हैं, और यदि आप अपने विभिन्न मौसमी स्तरों के लिए डमी चर का उपयोग करते हैं तो वे अक्सर काफी सटीक होते हैं।

  1. मैं मान रहा हूं कि आपके पास प्रति घंटा डेटा है, इसलिए सुनिश्चित करें कि आपका टीएस ऑब्जेक्ट 24 की आवृत्ति के साथ सेटअप है।
  2. आप डमी वैरिएबल का उपयोग करके सीज़न के अन्य स्तरों को मॉडल कर सकते हैं। उदाहरण के लिए, आप वर्ष के महीने का प्रतिनिधित्व करने वाले 0/1 डमी का एक सेट चाहते हैं।
  3. xregकिसी भी कोवरिएट्स (जैसे तापमान) के साथ, डमी चर को तर्क में शामिल करें ।
  4. बेस आर में अरिमा फ़ंक्शन के साथ मॉडल को फिट करें। यह फ़ंक्शन xregतर्क के उपयोग के माध्यम से ARMAX मॉडल को संभाल सकता है।
  5. पूर्वानुमान पैकेज में Arima और auto.arima फ़ंक्शन आज़माएं । auto.arima अच्छा है क्योंकि यह स्वचालित रूप से आपके arima मॉडल के लिए अच्छे पैरामीटर ढूंढ लेगा। हालाँकि, यह आपके डेटासेट पर फिट होने के लिए हमेशा ले जाएगा।
  6. मौसम के प्रत्येक स्तर के लिए डमी वैरिएबल का उपयोग करके, अरिमा पैकेज में tslm फ़ंक्शन का प्रयास करें। यह अरिमा मॉडल की तुलना में बहुत तेजी से फिट होगा, और आपकी स्थिति में भी बेहतर काम कर सकता है।
  7. यदि 4/5/6 काम नहीं करते हैं, तो स्थानांतरण कार्यों के बारे में चिंता करना शुरू करें। चलने से पहले आपको क्रॉल करना होगा।
  8. यदि आप भविष्य में पूर्वानुमान लगाने की योजना बना रहे हैं, तो आपको सबसे पहले अपने xreg चर का पूर्वानुमान लगाने की आवश्यकता होगी। यह मौसमी डमी के लिए आसान है, लेकिन आपको यह सोचना होगा कि अच्छे मौसम का पूर्वानुमान कैसे लगाया जाए। शायद ऐतिहासिक डेटा के माध्यिका का उपयोग करें?

यहाँ एक उदाहरण दिया गया है कि मैं इसे कैसे समझूंगा:

#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

@utdiscant: predict()पूर्वानुमान के लिए उपयोग किया जाता है, जबकि fitted()ऐतिहासिक अवधि में मॉडल फिट होता है। यदि आप अधिक विशिष्ट सहायता चाहते हैं, तो आपको कुछ कोड के साथ एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण पोस्ट करना चाहिए।
Zach

@utdiscant: इसके अलावा, यदि आप दिन के उजाले के रूप में उपयोग करते हैं, तो आप ओवरफिटिंग के जोखिम को चलाते हैं, क्योंकि आपके पास प्रति दिन केवल 24 अवलोकन हैं। यदि आप वर्ष के महीने का उपयोग करते हैं तो आपको बेहतर पूर्वानुमान परिणाम प्राप्त हो सकते हैं।
Zach

@utdiscant: इसके अलावा, आपके समय-आधारित xregs को डमी वैरिएबल होना चाहिए । जिस तरह से आपने अभी मॉडलिंग की है, वह यह है कि आप heatदिन के घंटे के साथ रैखिक वृद्धि की उम्मीद करते हैं, और फिर वापस नीचे कूदते हैं जब घंटा 1 पर लौटता है। यदि आप डमी चर का उपयोग करते हैं, तो दिन के प्रत्येक घंटे का अपना प्रभाव होगा। मेरे उदाहरण कोड के माध्यम से चलाएं, और ध्यान दें कि मैं अपने xreg ऑब्जेक्ट का निर्माण कैसे करूं।
Zach

में ARIMA कार्यों में से एक नकारात्मक पक्ष statsऔर forecastसंकुल है कि वे नहीं फिट prober हस्तांतरण कार्यों करते हैं। stats::arimaफ़ंक्शन का दस्तावेज़ीकरण निम्नलिखित बताता है : यदि कोई xreg शब्द शामिल है, तो एक रेखीय प्रतिगमन (निरंतर अवधि के साथ अगर pm.mean सत्य है और कोई भिन्नता नहीं है) त्रुटि शब्द के लिए ARMA मॉडल के साथ फिट है। इसलिए, यदि आपको वास्तव में स्थानांतरण कार्यों को फिट करने की आवश्यकता है तो ऐसा लगता है कि TSA::arimaxफ़ंक्शन अंदर जाने का तरीका है R
क्रिस्टोफर

8

मैं थोड़ी देर के लिए आर फोरकास्टिंग करने के लिए आर का उपयोग कर रहा हूं और मैं आपको forecastपैकेज और इसके अमूल्य कार्यों (जैसे auto.arima) का उपयोग करने का सुझाव दे सकता हूं ।

आप निम्न आदेश के साथ एक ARIMA मॉडल बना सकते हैं:

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

yआपके पूर्वानुमान के साथ (मुझे लगता है dayy), orderआपके मॉडल का क्रम (मौसमीता पर विचार) और exogenous_dataआपका तापमान, सौर विकिरण, आदि। फ़ंक्शन auto.arimaआपको इष्टतम मॉडल ऑर्डर खोजने में मदद करता है। आप यहां 'पूर्वानुमान' पैकेज के बारे में एक संक्षिप्त ट्यूटोरियल पा सकते हैं ।


क्या भविष्यवाणी की जानी है गर्मी (घर की गर्मी की खपत) है।
utdiscant

3

मैं व्यक्तिगत रूप से स्थानांतरण कार्यों को नहीं समझता, लेकिन मुझे लगता है कि आपको मिला xtransfऔर xregउलटा हुआ। कम से कम आर के आधार में arimaयह है xregकि आपके बहिर्जात चर शामिल हैं। यह मेरी धारणा है कि एक ट्रांसफर फ़ंक्शन यह बताता है कि कैसे (पिछड़े हुए डेटा भविष्य के मूल्यों को प्रभावित करता है) क्या बजाय ।

मैं xregआपके बहिर्जात चर के लिए उपयोग करने की कोशिश करूँगा , शायद arimaअगर arimaxहस्तांतरण समारोह की मांग करता है। समस्या यह है कि आपका मॉडल दैनिक है, लेकिन आपके डेटा में दैनिक और वार्षिक दोनों मौसम होते हैं, और मुझे अभी यकीन नहीं है कि कोई पहला अंतर ( order=(*, 1, *)) उस पर ध्यान रखेगा या नहीं। (आप निश्चित रूप से एक मॉडल से जादुई वर्ष-भर के पूर्वानुमान प्राप्त नहीं करेंगे, जो केवल दैनिक मौसम पर विचार करता है।)

पुनश्च क्या है timeकि आप अपने में उपयोग करते हैं lm? शाब्दिक घड़ी समय या 1-अप अवलोकन संख्या? मुझे लगता है कि आप एक मिश्रित प्रभाव मॉडल (का उपयोग करके कुछ मिल सकता है lmerमें lme4पैकेज), हालांकि मैं पता लगा नहीं किया है कि क्या कर रही सही ढंग से ऑटो सहसंबंध है कि एक समय श्रेणी में हो जाएगा के लिए खातों। यदि इसका हिसाब नहीं दिया जाता है, जो lmनहीं करता है, तो आपको एक दिलचस्प फिट मिल सकता है, लेकिन आपकी भविष्यवाणी कितनी सटीक होगी, इसकी अवधारणा आपको आशावादी बनाएगी।


मेरे पास माप के घंटे, और माप के "वर्ष का दिन" दोनों हैं।
नवदंपति
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.