हाथ से ARIMA का अनुमान


15

मैं यह समझने की कोशिश कर रहा हूं कि ARIMA मॉडलिंग / बॉक्स जेनकिंस (BJ) में मापदंडों का अनुमान कैसे लगाया जाता है। दुर्भाग्य से, मेरे द्वारा सामना की गई पुस्तकों में से कोई भी अनुमान प्रक्रिया का वर्णन नहीं करता है जैसे कि लॉग-लिकेलिहुड अनुमान प्रक्रिया विस्तार से। मुझे वेबसाइट / शिक्षण सामग्री मिली जो बहुत सहायक थी। निम्नलिखित संदर्भित स्रोत से समीकरण है।

एलएल(θ)=-n2लॉग(2π)-n2लॉग(σ2)-Σटी=1nटी22σ2

मैं ARIMA / BJ के आकलन को स्वयं करके सीखना चाहता हूं। इसलिए मैं इस्तेमाल किया आर हाथ से ARMA आकलन के लिए एक कोड लिखने के लिए। नीचे मैंने में क्या किया है आर,

  • मैंने ARMA (1,1) का अनुकरण किया
  • एक फ़ंक्शन के रूप में उपरोक्त समीकरण लिखा
  • एआर और एमए मापदंडों का अनुमान लगाने के लिए सिम्युलेटेड डेटा और आशावादी फ़ंक्शन का उपयोग किया।
  • मैंने आँकड़ों के पैकेज में ARIMA को भी चलाया और ARMA मापदंडों की तुलना मैंने जो हाथ से की, उससे की। नीचे तुलना है:

तुलना

** नीचे मेरे सवाल हैं:

  • अनुमानित और गणना किए गए चर के बीच थोड़ा अंतर क्यों है?
  • क्या ARIMA R बैककास्ट में कार्य करता है या मेरे कोड में नीचे बताई गई तुलना में अनुमान प्रक्रिया अलग है?
  • मैंने 1 के रूप में अवलोकन 1 पर e1 या त्रुटि सौंपी है, क्या यह सही है?
  • अनुकूलन के हेसियन का उपयोग करके पूर्वानुमानों के विश्वास की सीमा का अनुमान लगाने का एक तरीका भी है?

हमेशा की तरह आपकी मदद के लिए बहुत बहुत धन्यवाद।

नीचे कोड है:

## Load Packages

library(stats)
library(forecast)

set.seed(456)


## Simulate Arima
y <- arima.sim(n = 250, list(ar = 0.3, ma = 0.7), mean = 5)
plot(y)

## Optimize Log-Likelihood for ARIMA

n = length(y) ## Count the number of observations
e = rep(1, n) ## Initialize e

logl <- function(mx){

  g <- numeric
  mx <- matrix(mx, ncol = 4)

  mu <- mx[,1] ## Constant Term
  sigma <- mx[,2] 
  rho <- mx[,3] ## AR coeff
  theta <- mx[,4] ## MA coeff

  e[1] = 0 ## Since e1 = 0

  for (t in (2 : n)){
    e[t] = y[t] - mu - rho*y[t-1] - theta*e[t-1]
  }

  ## Maximize Log-Likelihood Function 
  g1 <-  (-((n)/2)*log(2*pi) - ((n)/2)*log(sigma^2+0.000000001) - (1/2)*(1/(sigma^2+0.000000001))*e%*%e)

  ##note: multiplying Log-Likelihood by "-1" in order to maximize in the optimization
  ## This is done becuase Optim function in R can only minimize, "X"ing by -1 we can maximize
  ## also "+"ing by 0.000000001 sigma^2 to avoid divisible by 0
  g <- -1 * g1

  return(g)

}

## Optimize Log-Likelihood
arimopt <- optim(par=c(10,0.6,0.3,0.5), fn=logl, gr = NULL,
                 method = c("L-BFGS-B"),control = list(), hessian = T)
arimopt

############# Output Results###############
ar1_calculated = arimopt$par[3]
ma1_calculated = arimopt$par[4]
sigmasq_calculated = (arimopt$par[2])^2
logl_calculated = arimopt$val
ar1_calculated
ma1_calculated
sigmasq_calculated
logl_calculated

############# Estimate Using Arima###############
est <- arima(y,order=c(1,0,1))
est

1
टीnटीटी=n+1g1+0.000000001σ

मैंने समीकरण बदल दिया है और अब यह दर्शाता है कि कोड में क्या है। मुझे यकीन नहीं है कि मैं कैसे +0.000000001 निकाल सकता हूं क्योंकि यह 0 से विभाज्य के कारण "NaNs" का कारण होगा और लॉग (0) के मुद्दे के कारण भी होगा
फोरकास्टर

2
सटीक संभावना की अवधारणा है। इसके लिए प्रारंभिक मानकों के ज्ञान की आवश्यकता होती है जैसे कि एमए त्रुटि (आपके प्रश्नों में से एक) का मुट्ठी मूल्य। कार्यान्वयन आमतौर पर इस बारे में भिन्न होते हैं कि वे प्रारंभिक मूल्यों का इलाज कैसे करते हैं। मैं आमतौर पर क्या करता हूं (जिसका उल्लेख कई किताबों में नहीं है) यह भी है कि एमएल के साथ-साथ प्रारंभिक मूल्यों को भी अधिकतम किया जाए।
कागदस ओजेंक

3
कृपया Tsay से निम्नलिखित पर एक नज़र डालें, यह सभी मामलों को कवर नहीं किया जाता है, लेकिन मेरे लिए काफी मददगार था: faculty.chicagobooth.edu/ruey.tsay/teaching/uts/lec8-08.pdf
Cagdas Ozgenc

1
@ कैगदासओज़गेंक जैसा कि आपके द्वारा बताया गया है कि प्रारंभिक मूल्य अंतर का कारण है। यदि आप अपनी टिप्पणियों को उत्तर के रूप में पोस्ट करते हैं तो मैं आपकी टिप्पणी को उत्तर के रूप में स्वीकार कर सकता हूं।
फोरकास्टर

जवाबों:


6

सटीक संभावना की अवधारणा है। इसके लिए प्रारंभिक मानकों के ज्ञान की आवश्यकता होती है जैसे कि एमए त्रुटि (आपके प्रश्नों में से एक) का मुट्ठी मूल्य। कार्यान्वयन आमतौर पर इस बारे में भिन्न होते हैं कि वे प्रारंभिक मूल्यों का इलाज कैसे करते हैं। मैं आमतौर पर क्या करता हूं (जिसका उल्लेख कई किताबों में नहीं है) यह भी है कि एमएल के साथ-साथ प्रारंभिक मूल्यों को भी अधिकतम किया जाए।

कृपया Tsay से निम्नलिखित पर एक नज़र डालें, यह सभी मामलों को कवर नहीं कर रहा है, लेकिन मेरे लिए काफी उपयोगी था:

http://faculty.chicagobooth.edu/ruey.tsay/teaching/uts/lec8-08.pdf


3

क्या आपने arimaफ़ंक्शन का सहायता पृष्ठ पढ़ा है ? यहाँ प्रासंगिक अंश है:

सटीक संभावना एआरआईएमए प्रक्रिया के एक राज्य-अंतरिक्ष प्रतिनिधित्व के माध्यम से गणना की जाती है, और कलमन फ़िल्टर द्वारा पाए गए नवाचार और उनके विचरण। विभेदित ARMA प्रक्रिया का आरंभीकरण स्टेशनरिटी का उपयोग करता है और गार्डनर एट अल पर आधारित है। (1980)। एक अलग प्रक्रिया के लिए गैर-स्थिर घटकों को पूर्व में (कप्पा द्वारा नियंत्रित) एक प्रसार दिया जाता है। अवलोकन जो अभी भी फैलाना पूर्व द्वारा नियंत्रित होते हैं (कम से कम 1e4 का कलमैन लाभ होने से निर्धारित) संभावना गणना से बाहर रखा गया है। (यह अनुपस्थित मानों की अनुपस्थिति में arima0 के लिए तुलनीय परिणाम देता है, जब छोड़े गए अवलोकन ठीक-ठीक अलग-अलग अक्षरों से हटा दिए जाते हैं।)

प्रासंगिक भी एक पैरामीटर है method=c("CSS-ML", "ML", "CSS"):

फिटिंग विधि: अधिकतम संभावना या सशर्त राशि के वर्गों को कम से कम। डिफ़ॉल्ट (जब तक कि लापता मूल्य नहीं हैं) प्रारंभिक मूल्यों को खोजने के लिए सशर्त-सम-वर्ग का उपयोग करना है, तो अधिकतम संभावना है।

आपके परिणाम arimaफ़ंक्शन द्वारा उत्पादित लोगों से बहुत भिन्न नहीं होते हैं , इसलिए आपको निश्चित रूप से सब कुछ सही मिला है।

याद रखें कि यदि आप दो अनुकूलन प्रक्रियाओं के परिणामों की तुलना करना चाहते हैं, तो आपको यह सुनिश्चित करने की आवश्यकता है, कि शुरुआती मूल्य समान हैं, और उसी अनुकूलन विधि का उपयोग किया जाता है, अन्यथा परिणाम भिन्न हो सकते हैं।

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