การพล็อตค่าที่คาดการณ์ไว้ในอนุกรมเวลา ARIMA ใน R


10

มีความเป็นไปได้มากกว่าหนึ่งความเข้าใจผิดที่ร้ายแรงในคำถามนี้ แต่มันไม่ได้หมายถึงการได้รับการคำนวณที่ถูกต้อง แต่เพื่อกระตุ้นการเรียนรู้ของอนุกรมเวลาที่มีความสำคัญในใจ

ในการพยายามที่จะเข้าใจการประยุกต์ใช้อนุกรมเวลาดูเหมือนว่าการตัดแนวโน้มข้อมูลทำให้การคาดการณ์ค่าในอนาคตไม่น่าเชื่อถือ ตัวอย่างเช่นgtempอนุกรมเวลาจากastsaแพ็คเกจมีลักษณะดังนี้:

ป้อนคำอธิบายรูปภาพที่นี่

แนวโน้มสูงขึ้นในทศวรรษที่ผ่านมาจะต้องมีการแยกตัวประกอบในเมื่อวางแผนการทำนายค่าในอนาคต

อย่างไรก็ตามเพื่อประเมินความผันผวนของอนุกรมเวลาข้อมูลจำเป็นต้องถูกแปลงเป็นอนุกรมเวลาคงที่ ถ้าผมรูปแบบมันเป็นกระบวนการ ARIMA กับ differencing (ฉันเดานี้จะดำเนินการเพราะของกลาง1ในorder = c(-, 1, -)) เช่น:

require(tseries); require(astsa)
fit = arima(gtemp, order = c(4, 1, 1))

แล้วพยายามทำนายค่าในอนาคต ( ปี) ฉันคิดถึงองค์ประกอบแนวโน้มสูงขึ้น:50

pred = predict(fit, n.ahead = 50)
ts.plot(gtemp, pred$pred, lty = c(1,3), col=c(5,2))

ป้อนคำอธิบายรูปภาพที่นี่

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

ฉันสงสัยว่าจะมี "ซ่อน" ของ OLS อยู่ที่ไหนซักแห่ง

ฉันเจอแนวคิดของdriftซึ่งสามารถรวมเข้ากับArima()ฟังก์ชั่นของforecastแพคเกจการแสดงพล็อตที่เป็นไปได้:

par(mfrow = c(1,2))
fit1 = Arima(gtemp, order = c(4,1,1), 
             include.drift = T)
future = forecast(fit1, h = 50)
plot(future)
fit2 = Arima(gtemp, order = c(4,1,1), 
             include.drift = F)
future2 = forecast(fit2, h = 50)
plot(future2)

ป้อนคำอธิบายรูปภาพที่นี่

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


ในการเปรียบเทียบโดยใช้ชุดข้อมูลAirPassengersจำนวนผู้โดยสารที่คาดการณ์เกินกว่าปลายทางของชุดข้อมูลจะถูกพล็อตบัญชีสำหรับแนวโน้มขาขึ้นนี้:

ป้อนคำอธิบายรูปภาพที่นี่

รหัสคือ:

fit = arima(log(AirPassengers), c(0, 1, 1), seasonal = list(order = c(0, 1, 1), period = 12))
pred <- predict(fit, n.ahead = 10*12)
ts.plot(AirPassengers,exp(pred$pred), log = "y", lty = c(1,3))

เรนเดอร์พล็อตที่สมเหตุสมผล


1
ฉันจะบอกว่าถ้าคุณคิดว่าคุณมีซีรีส์ที่แนวโน้มมีการเปลี่ยนแปลงตลอดเวลาโมเดล ARIMA อาจไม่ใช่วิธีที่ดีที่สุดในการทำนายผล ในกรณีที่ไม่มีความรู้ในเรื่อง (ซึ่งอาจนำไปสู่แบบจำลองที่ดีกว่า) ฉันมีแนวโน้มที่จะดูรูปแบบพื้นที่ของรัฐ; โดยเฉพาะอย่างยิ่งในรูปแบบโครงสร้างพื้นฐานสำหรับบางอย่างเช่นนี้ การถกเถียงเรื่องแบบจำลองพื้นที่ของรัฐหลายเรื่องนั้นยากที่จะติดตาม แต่หนังสือและเอกสารของ Andrew Harvey นั้นค่อนข้างอ่านได้ ( ตัวอย่างเช่นการพยากรณ์หนังสือโมเดลอนุกรมเวลาเชิงโครงสร้างและตัวกรองคาลมานก็ค่อนข้างดีเช่นกัน) ... ctd
Glen_b -Reinstate Monica

ctd ... มีผู้เขียนอีกสองสามคนที่ทำได้ดีพอสมควร แต่แม้แต่คนที่ดีกว่าก็ทำให้มันซับซ้อนกว่าที่มันจำเป็นสำหรับผู้เริ่มต้น
Glen_b -Reinstate Monica

ขอบคุณ @Glen_b เพียงแค่พยายามที่จะมีไหวพริบสำหรับอนุกรมเวลาและในหัวข้อทางคณิตศาสตร์หลายเรื่องการขาดคำนำที่สร้างแรงบันดาลใจเป็นนักฆ่า อนุกรมเวลาทั้งหมดที่เราอาจสนใจดูเหมือนจะมีแนวโน้มเพิ่มขึ้นหรือลดลง - ประชากร GOP ตลาดหุ้นอุณหภูมิโลก และฉันเข้าใจว่าคุณต้องการกำจัดแนวโน้ม (อาจเป็นวินาที) เพื่อดูรูปแบบวงจรและฤดูกาล แต่การกลับมาประกบของการค้นพบที่มีแนวโน้มที่ครอบคลุมการคาดการณ์นั้นไม่ว่าจะโดยนัยหรือไม่ได้รับการกล่าวถึงเป็นวัตถุประสงค์
Antoni Parellada

ความคิดเห็นของ Rob Hyndman ที่นี่มีความเกี่ยวข้อง ฉันอาจกลับมาและขยายตัวในเรื่องเล็กน้อย
Glen_b -Reinstate Monica

บล็อกโพสต์ของ Rob J. Hyndman "ค่าคงที่และรุ่น ARIMA ใน R"น่าจะเป็นสิ่งที่คุณต้องรู้ ฉันอยากรู้อยากเห็นความคิดเห็นของคุณเมื่อคุณสำรวจโพสต์บล็อก
Richard Hardy

คำตอบ:


1

นั่นคือเหตุผลที่คุณไม่ควรทำ ARIMA หรืออะไรก็ตามที่ไม่ใช่ข้อมูลนิ่ง

ตอบคำถามที่ทำให้การคาดการณ์ของ ARIMA ค่อนข้างชัดเจนหลังจากดูสมการ ARIMA และสมมติฐานข้อหนึ่ง นี่เป็นคำอธิบายที่ง่ายไม่ถือเป็นข้อพิสูจน์ทางคณิตศาสตร์



Yเสื้อ=βYเสื้อ-1+α+ε
β|β|1βYเสื้อ-1=0Yเสื้อ=โอnsเสื้อ=α

nอีW.daเสื้อa=Yเสื้อ-Yเสื้อ-1nอีW.daเสื้อa=Yเสื้อ/Yเสื้อ-1-1

 require(tseries)
 require(forecast)
 require(astsa)
 dif<-diff(gtemp)
 fit = auto.arima(dif)
 pred = predict(fit, n.ahead = 50)
 ts.plot(dif, pred$pred, lty = c(1,3), col=c(5,2))
 gtemp_pred<-gtemp[length(gtemp)]
 for(i in 1:length(pred$pred)){
   gtemp_pred[i+1]<-gtemp_pred[i]+pred$pred[i]
 }
 plot(c(gtemp,gtemp_pred),type="l")

ป้อนคำอธิบายรูปภาพที่นี่


α

ααα

ตกลง. ฉันจะต้องเล่นกับรหัสของคุณดูว่ามันพยายามที่จะอธิบายเกี่ยวกับสมการที ฉันไม่ได้ทำงานกับทีเอสและฉันก็โพสต์คำถามมาระยะหนึ่งแล้ว
Antoni Parellada

หลังจากเล่นกับโค้ดฉันเห็นว่าเกิดอะไรขึ้น คุณสามารถรวมค่าสัมประสิทธิ์ความพอดีซึ่งอยู่AR1 = 0.257; MA = - 0.7854ในสมการของแบบจำลอง ARIMA เพื่อชื่นชมกระบวนการสร้างเส้นโค้งหางที่คาดการณ์หรือคาดการณ์ไว้ที่ส่วนท้ายของพล็อตของคุณหรือไม่?
Antoni Parellada

Y^เสื้อ=ΣผมพีβผมYเสื้อ-ผม+ΣJQγJεเสื้อ-J+α+εเสื้อ
Y^เสื้อ=βYเสื้อ-1+γεเสื้อ-1+α+εเสื้อ
β=0.257γ=-0.7854α=0.0064
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.