การประเมิน ARIMA ด้วยมือ


15

ฉันพยายามที่จะเข้าใจวิธีการประมาณค่าพารามิเตอร์ในการสร้างแบบจำลอง ARIMA / Box Jenkins (BJ) น่าเสียดายที่ไม่มีหนังสือเล่มใดที่ฉันได้พบอธิบายขั้นตอนการประมาณค่าเช่นขั้นตอนการประมาณความน่าจะเป็นบันทึกโดยละเอียด ฉันพบเว็บไซต์ / สื่อการสอนที่มีประโยชน์มาก ต่อไปนี้เป็นสมการจากแหล่งอ้างอิงข้างต้น

LL(θ)=-n2เข้าสู่ระบบ(2π)-n2เข้าสู่ระบบ(σ2)-Σเสื้อ=1nอีเสื้อ22σ2

ฉันต้องการเรียนรู้การประมาณค่า ARIMA / BJ ด้วยการทำเอง ดังนั้นฉันจึงใช้เพื่อเขียนโค้ดเพื่อประมาณค่า ARMA ด้วยมือ ด้านล่างนี้คือสิ่งที่ผมทำในR ,RR

  • ฉันจำลอง 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

1
TnTT=n+1g1+0.000000001σ

ฉันได้เปลี่ยนสมการและตอนนี้สะท้อนให้เห็นถึงสิ่งที่อยู่ในรหัส ฉันไม่แน่ใจว่าฉันจะลบ +0.000000001 ได้อย่างไรเพราะมันจะทำให้ "NaNs" หารด้วย 0 และเนื่องจากปัญหาของบันทึก (0)
forecaster

2
มีแนวคิดของความน่าจะเป็นที่แน่นอนคือ ต้องการความรู้เกี่ยวกับพารามิเตอร์เริ่มต้นเช่นค่ากำปั้นของข้อผิดพลาด MA (หนึ่งในคำถามของคุณ) การใช้งานมักจะแตกต่างกันเกี่ยวกับวิธีที่พวกเขาปฏิบัติต่อค่าเริ่มต้น สิ่งที่ฉันมักจะทำคือ (ซึ่งไม่ได้กล่าวถึงในหนังสือหลายเล่ม) ก็คือการเพิ่มค่าเริ่มต้นของ ML wrt เช่นกัน
Cagdas Ozgenc

3
โปรดดูที่ต่อไปนี้จาก Tsay มันไม่ได้ครอบคลุมทุกกรณี แต่ก็มีประโยชน์มากสำหรับฉัน: Faculty.chicagobooth.edu/ruey.tsay/teaching/uts/lec8-08.pdf
Cagdas Ozgenc

1
@CagdasOzgenc ตามที่คุณชี้ให้เห็นค่าเริ่มต้นเป็นสาเหตุของความแตกต่าง ฉันสามารถยอมรับความคิดเห็นของคุณเป็นคำตอบหากคุณโพสต์ความคิดเห็นของคุณเป็นคำตอบ
พยากรณ์

คำตอบ:


6

มีแนวคิดของความน่าจะเป็นที่แน่นอนคือ มันต้องมีความรู้เกี่ยวกับพารามิเตอร์เริ่มต้นเช่นค่ากำปั้นของข้อผิดพลาด MA (หนึ่งในคำถามของคุณ) การใช้งานมักจะแตกต่างกันเกี่ยวกับวิธีที่พวกเขาปฏิบัติต่อค่าเริ่มต้น สิ่งที่ฉันมักจะทำคือ (ซึ่งไม่ได้กล่าวถึงในหนังสือหลายเล่ม) ก็คือการเพิ่มค่าเริ่มต้นของ ML wrt เช่นกัน

โปรดดูสิ่งต่อไปนี้จาก Tsay มันไม่ได้ครอบคลุมทุกกรณี แต่มีประโยชน์สำหรับฉันมาก:

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


3

คุณอ่านหน้าความช่วยเหลือของarimaฟังก์ชันแล้วหรือยัง นี่คือข้อความที่ตัดตอนมาที่เกี่ยวข้อง:

ความน่าจะเป็นที่คำนวณได้จากการเป็นตัวแทนพื้นที่ของกระบวนการ ARIMA และนวัตกรรมและความแปรปรวนที่พบโดยตัวกรองคาลมาน การเริ่มต้นของกระบวนการ ARMA ที่แตกต่างกันจะใช้ความคงที่และอยู่บนพื้นฐานของการ์ดเนอร์และคณะ (1980) สำหรับกระบวนการที่แตกต่างส่วนประกอบที่ไม่หยุดนิ่งจะได้รับการกระจายก่อน (ควบคุมโดยคัปปา) การสังเกตซึ่งยังคงถูกควบคุมโดยการกระจายก่อนหน้านี้ (ถูกกำหนดโดยการได้รับ Kalman อย่างน้อย 1e4) จะถูกแยกออกจากการคำนวณความน่าจะเป็น (สิ่งนี้ให้ผลลัพธ์ที่เปรียบเทียบได้กับ arima0 ในกรณีที่ไม่มีค่าที่หายไปเมื่อการตรวจสอบที่แยกออกไปนั้นถูกต้องแม่นยำโดยค่าที่แตกต่างกัน)

พารามิเตอร์ที่เกี่ยวข้องยังเป็นmethod=c("CSS-ML", "ML", "CSS"):

วิธีการประกอบอุปกรณ์: โอกาสสูงสุดหรือลดผลรวมของกำลังสองตามเงื่อนไข ค่าเริ่มต้น (ยกเว้นว่ามีค่าขาดหายไป) คือการใช้เงื่อนไขผลรวมของกำลังสองเพื่อค้นหาค่าเริ่มต้นจากนั้นโอกาสสูงสุด

ผลลัพธ์ของคุณไม่แตกต่างจากของที่ผลิตโดยarimaฟังก์ชั่นดังนั้นคุณมีทุกอย่างที่ถูกต้อง

โปรดจำไว้ว่าหากคุณต้องการเปรียบเทียบผลลัพธ์ของการเพิ่มประสิทธิภาพสองขั้นตอนคุณต้องตรวจสอบให้แน่ใจว่าค่าเริ่มต้นเหมือนกันและใช้วิธีการปรับให้เหมาะสมแบบเดียวกันมิฉะนั้นผลลัพธ์อาจแตกต่างกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.