এর tseries::arma
তুলনায় তিনটি ছোট ছোট সমস্যা রয়েছে stats::arima
যার ফলে আর এআরএমএ-তে ভিন্ন ভিন্ন সিরিজের জন্য এআরএমএ মডেলটিতে কিছুটা আলাদা ফলাফল tseries::arma
আসে stats::arima
।
সহগের stats::arima
প্রাথমিক মান: প্রাথমিক আরআর এবং এমএ সহগগুলি শূন্যতে সেট করে, tseries::arma
হান্নান এবং রিসানেন (1982) এ বর্ণিত পদ্ধতিটি সহগের প্রাথমিক মানগুলি অর্জন করার জন্য নিযুক্ত করা হয়।
উদ্দেশ্য ফাংশনটির স্কেল: উদ্দেশ্যমূলক ফাংশন tseries::arma
বর্গক্ষেত্রের শর্তসাপেক্ষ অঙ্কের মান, আরএসএসকে প্রদান করে; stats::arima
আয় 0.5*log(RSS/(n-ncond))
।
অপ্টিমাইজেশন অ্যালগরিদম: ডিফল্টরূপে, নেল্ডার-মাড ব্যবহৃত হয় tseries::arma
, যখন stats::arima
বিএফজিএস অ্যালগরিদম নিয়োগ করে।
গত এক যুক্তি মাধ্যমে পরিবর্তন করা যাবে optim.method
মধ্যে stats::arima
কিন্তু অন্যরা কোড পরিবর্তন করতে হবে। নীচে, আমি উত্স কোডের একটি সংক্ষিপ্ত সংস্করণ দেখাব (এই নির্দিষ্ট মডেলের ন্যূনতম কোড) stats::arima
যেখানে উপরে উল্লিখিত তিনটি সমস্যা সংশোধন করা হয়েছে যাতে সেগুলি একই হয় tseries::arma
। এই বিষয়গুলি সমাধান করার পরে, একই ফলাফল tseries::arma
প্রাপ্ত হয়।
এর ন্যূনতম সংস্করণ stats::arima
(উপরে বর্ণিত পরিবর্তনগুলি সহ):
# objective function, conditional sum of squares
# adapted from "armaCSS" in stats::arima
armaCSS <- function(p, x, arma, ncond)
{
# this does nothing, except returning the vector of coefficients as a list
trarma <- .Call(stats:::C_ARIMA_transPars, p, arma, FALSE)
res <- .Call(stats:::C_ARIMA_CSS, x, arma, trarma[[1L]], trarma[[2L]], as.integer(ncond), FALSE)
# return the conditional sum of squares instead of 0.5*log(res),
# actually CSS is divided by n-ncond but does not relevant in this case
#0.5 * log(res)
res
}
# initial values of coefficients
# adapted from function "arma.init" within tseries::arma
arma.init <- function(dx, max.order, lag.ar=NULL, lag.ma=NULL)
{
n <- length(dx)
k <- round(1.1*log(n))
e <- as.vector(na.omit(drop(ar.ols(dx, order.max = k, aic = FALSE, demean = FALSE, intercept = FALSE)$resid)))
ee <- embed(e, max.order+1)
xx <- embed(dx[-(1:k)], max.order+1)
return(lm(xx[,1]~xx[,lag.ar+1]+ee[,lag.ma+1]-1)$coef)
}
# modified version of stats::arima
modified.arima <- function(x, order, seasonal, init)
{
n <- length(x)
arma <- as.integer(c(order[-2L], seasonal$order[-2L], seasonal$period, order[2L], seasonal$order[2L]))
narma <- sum(arma[1L:4L])
ncond <- order[2L] + seasonal$order[2L] * seasonal$period
ncond1 <- order[1L] + seasonal$period * seasonal$order[1L]
ncond <- as.integer(ncond + ncond1)
optim(init, armaCSS, method = "Nelder-Mead", hessian = TRUE, x=x, arma=arma, ncond=ncond)$par
}
এখন, উভয় পদ্ধতির তুলনা করুন এবং পরীক্ষা করুন যা একই ফলাফল দেয় ( x
প্রশ্নের মূল অংশে ওপি দ্বারা উত্পন্ন সিরিজটি প্রয়োজন )।
এতে নির্বাচিত প্রাথমিক মানগুলি ব্যবহার করে tseries::arima
:
dx <- diff(x)
fit1 <- arma(dx, order=c(3,3), include.intercept=FALSE)
coef(fit1)
# ar1 ar2 ar3 ma1 ma2 ma3
# 0.33139827 0.80013071 -0.45177254 0.67331027 -0.14600320 -0.08931003
init <- arma.init(diff(x), 3, 1:3, 1:3)
fit2.coef <- modified.arima(x, order=c(3,1,3), seasonal=list(order=c(0,0,0), period=1), init=init)
fit2.coef
# xx[, lag.ar + 1]1 xx[, lag.ar + 1]2 xx[, lag.ar + 1]3 ee[, lag.ma + 1]1
# 0.33139827 0.80013071 -0.45177254 0.67331027
# ee[, lag.ma + 1]2 ee[, lag.ma + 1]3
# -0.14600320 -0.08931003
all.equal(coef(fit1), fit2.coef, check.attributes=FALSE)
# [1] TRUE
stats::arima
(জিরো) এ নির্বাচিত প্রাথমিক মানগুলি ব্যবহার করে :
fit3 <- arma(dx, order=c(3,3), include.intercept=FALSE, coef=rep(0,6))
coef(fit3)
# ar1 ar2 ar3 ma1 ma2 ma3
# 0.33176424 0.79999112 -0.45215742 0.67304072 -0.14592152 -0.08900624
init <- rep(0, 6)
fit4.coef <- modified.arima(x, order=c(3,1,3), seasonal=list(order=c(0,0,0), period=1), init=init)
fit4.coef
# [1] 0.33176424 0.79999112 -0.45215742 0.67304072 -0.14592152 -0.08900624
all.equal(coef(fit3), fit4.coef, check.attributes=FALSE)
# [1] TRUE
fit1
কেবলমাত্র 1 এমএ এবং 1 এআর প্যারামিটার রয়েছে: আপনার অর্থ কিfit1<-arma(diff(x,1,lag=1),c(3,3),include.intercept=F)
?