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