ฉันพยายามที่จะเข้าใจวิธีการประมาณค่าพารามิเตอร์ในการสร้างแบบจำลอง ARIMA / Box Jenkins (BJ) น่าเสียดายที่ไม่มีหนังสือเล่มใดที่ฉันได้พบอธิบายขั้นตอนการประมาณค่าเช่นขั้นตอนการประมาณความน่าจะเป็นบันทึกโดยละเอียด ฉันพบเว็บไซต์ / สื่อการสอนที่มีประโยชน์มาก ต่อไปนี้เป็นสมการจากแหล่งอ้างอิงข้างต้น
ฉันต้องการเรียนรู้การประมาณค่า ARIMA / BJ ด้วยการทำเอง ดังนั้นฉันจึงใช้เพื่อเขียนโค้ดเพื่อประมาณค่า ARMA ด้วยมือ ด้านล่างนี้คือสิ่งที่ผมทำในR ,
- ฉันจำลอง ARMA (1,1)
- เขียนสมการข้างต้นเป็นฟังก์ชัน
- ใช้ข้อมูลจำลองและฟังก์ชันเพิ่มประสิทธิภาพเพื่อประมาณค่าพารามิเตอร์ AR และ MA
- ฉันใช้ ARIMA ในแพ็คเกจสถิติและเปรียบเทียบพารามิเตอร์ ARMA จากสิ่งที่ฉันทำด้วยมือ ด้านล่างเป็นการเปรียบเทียบ:
** ด้านล่างเป็นคำถามของฉัน:
- เหตุใดจึงมีความแตกต่างเล็กน้อยระหว่างตัวแปรที่ประมาณและที่คำนวณได้
- ฟังก์ชัน ARIMA ใน backcasts R หรือขั้นตอนการประเมินแตกต่างจากที่ระบุไว้ด้านล่างในรหัสของฉันหรือไม่
- ฉันกำหนด e1 หรือข้อผิดพลาดที่การสังเกต 1 เป็น 0 ถูกต้องหรือไม่
- นอกจากนี้ยังมีวิธีการประเมินขอบเขตความเชื่อมั่นของการคาดการณ์โดยใช้ระบบการเพิ่มประสิทธิภาพหรือไม่
ขอบคุณมากสำหรับความช่วยเหลือของคุณเช่นเคย
ด้านล่างเป็นรหัส:
## 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