การวิเคราะห์อนุกรมเวลารายวัน


24

ฉันกำลังพยายามทำการวิเคราะห์อนุกรมเวลาและยังใหม่กับฟิลด์นี้ ฉันมีการนับเหตุการณ์ทุกวันตั้งแต่ปี 2549-2552 และฉันต้องการให้พอดีกับแบบจำลองอนุกรมเวลา นี่คือความก้าวหน้าที่ฉันได้ทำ:

timeSeriesObj = ts(x,start=c(2006,1,1),frequency=365.25)
plot.ts(timeSeriesObj)

พล็อตผลที่ฉันได้รับคือ:

พล็อตอนุกรมเวลา

เพื่อตรวจสอบว่ามีฤดูกาลและแนวโน้มในข้อมูลหรือไม่ฉันทำตามขั้นตอนที่กล่าวถึงในโพสต์นี้:

ets(x)
fit <- tbats(x)
seasonal <- !is.null(fit$seasonal)
seasonal

และในบล็อกของ Rob J Hyndman :

library(fma)
fit1 <- ets(x)
fit2 <- ets(x,model="ANN")

deviance <- 2*c(logLik(fit1) - logLik(fit2))
df <- attributes(logLik(fit1))$df - attributes(logLik(fit2))$df 
#P value
1-pchisq(deviance,df)

ทั้งสองกรณีระบุว่าไม่มีฤดูกาล

เมื่อฉันพล็อต ACF & PACF ของซีรีส์นี่คือสิ่งที่ฉันได้รับ:

ACF PACF

คำถามของฉันคือ:

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

  2. ฉันไม่ทราบวิธีการดำเนินการเมื่อมีแผนการแปลง ACF และ PACF

  3. ฉันสามารถใช้ฟังก์ชั่น auto.arima ได้หรือไม่?

    พอดี <- arima (myts, order = c (p, d, q)

***** อัปเดตผลลัพธ์อัตโนมัติอาริมา ******

เมื่อฉันเปลี่ยนความถี่ของข้อมูลเป็น 7 ตามความคิดเห็นของ Rob Hyndman ที่นี่ auto.arima จะเลือกโมเดล ARIMA ตามฤดูกาลและเอาต์พุต:

Series: timeSeriesObj 
ARIMA(1,1,2)(1,0,1)[7]                    

Coefficients:
       ar1      ma1     ma2    sar1     sma1
      0.89  -1.7877  0.7892  0.9870  -0.9278
s.e.   NaN      NaN     NaN  0.0061   0.0162

sigma^2 estimated as 21.72:  log likelihood=-4319.23
AIC=8650.46   AICc=8650.52   BIC=8682.18 

****** อัพเดทการตรวจสอบฤดูกาล ******

เมื่อฉันทดสอบ seasonality ด้วยความถี่ 7 มันจะให้ผลลัพธ์เป็นจริง แต่กับ seasonality 365.25 มันจะให้ผลลัพธ์เป็นเท็จ นี่เพียงพอที่จะสรุปการขาดฤดูกาลประจำปีได้หรือไม่?

timeSeriesObj = ts(x,start=c(2006,1,1),frequency=7)
fit <- tbats(timeSeriesObj)
seasonal <- !is.null(fit$seasonal)
seasonal

ผลตอบแทน:

True

ในขณะที่

timeSeriesObj = ts(x,start=c(2006,1,1),frequency=365.25)
fit <- tbats(timeSeriesObj)
seasonal <- !is.null(fit$seasonal)
seasonal

ผลตอบแทน:

False

สิ่งที่ส่งออกไม่str(x)ให้ผลผลิต?
S. Kolassa - Reinstate Monica

มันให้ผล NUM [1: 1460] 17 12 12 17 13 14 14 5 12 21 ...
statBeginner

คุณสามารถโพสต์ข้อมูลได้หรือไม่
พยากรณ์

น่าเสียดายที่ฉันไม่สามารถ
statBeginner

2
ตกลงฉันจะพึ่งพาการตรวจสอบด้วยภาพและความรู้เกี่ยวกับโดเมนนอกเหนือจากการทดสอบทางสถิติเพื่อตรวจจับฤดูกาล สำหรับคำถามของคุณเกี่ยวกับว่า Arima สามารถจัดการกับฤดูกาลได้หลายแบบหรือไม่ - แน่นอนว่า ARIMA จะจัดการกับฤดูกาลทุกประเภทได้หรือ Rไม่ง่ายไม่มีความสามารถในการจัดการ ฉันจะมองหาวิธีแก้ปัญหาเชิงพาณิชย์หากมีสินค้าคงคลัง / ต้นทุนการผลิตสูงที่เกี่ยวข้องกับผลิตภัณฑ์ที่คุณพยายามคาดการณ์ Rมีข้อ จำกัด อย่างมากสำหรับการคาดการณ์ภารกิจเช่นคุณ ดูคำถามเกี่ยวกับการคาดการณ์รายวันในเว็บไซต์นี้
พยากรณ์

คำตอบ:


25

ACF และ PACF ของคุณระบุว่าคุณมีฤดูกาลอย่างน้อยสัปดาห์ซึ่งแสดงโดยยอดเขาที่ล่าช้า 7, 14, 21 และอื่น ๆ

คุณอาจมีฤดูกาลประจำปีแม้ว่าจะไม่ชัดเจนจากอนุกรมเวลาของคุณ

ทางออกที่ดีที่สุดของคุณซึ่งอาจมีหลายช่วงฤดูกาลอาจเป็นtbatsรูปแบบซึ่งเป็นตัวอย่างของฤดูกาลที่หลากหลาย โหลดforecastแพ็คเกจ:

library(forecast)

ผลลัพธ์ของคุณจากการstr(x)ระบุว่าxยังไม่มีข้อมูลเกี่ยวกับการมีหลายฤดูกาล ดูและเปรียบเทียบการส่งออกของ?tbats str(taylor)กำหนดฤดูกาล:

x.msts <- msts(x,seasonal.periods=c(7,365.25))

ตอนนี้คุณสามารถใส่tbatsนางแบบได้แล้ว (อดทนรอซึ่งอาจใช้เวลาสักครู่)

model <- tbats(x.msts)

สุดท้ายคุณสามารถคาดการณ์และพล็อต:

plot(forecast(model,h=100))

คุณไม่ควรใช้arima()หรือauto.arima()ตั้งแต่เหล่านี้สามารถจัดการชนิดเดียวของฤดูกาล: ทั้งรายสัปดาห์หรือรายปี อย่าถามฉันว่าauto.arima()จะทำอะไรกับข้อมูลของคุณ มันอาจเลือกฤดูกาลใดฤดูกาลหนึ่งหรืออาจไม่สนใจพวกเขาทั้งหมด


แก้ไขเพื่อตอบคำถามเพิ่มเติมจากความคิดเห็น:

  1. ฉันจะตรวจสอบว่าข้อมูลมีฤดูกาลตามฤดูกาลหรือไม่? ฉันสามารถสร้างจำนวนกิจกรรมทั้งหมดต่อเดือนและใช้ ACF ในการตัดสินใจนี้ได้หรือไม่

การคำนวณรูปแบบข้อมูลรายเดือนอาจเป็นไปได้ ถ้าอย่างนั้นคุณก็สามารถเปรียบเทียบ AICs ระหว่างรุ่นที่มีและไม่มีฤดูกาล

อย่างไรก็ตามฉันควรใช้ตัวอย่างที่เก็บไว้เพื่อประเมินโมเดลการพยากรณ์ ถือ 100 จุดข้อมูลล่าสุด พอดีกับรูปแบบที่มีเป็นประจำทุกปีและฤดูกาลประจำสัปดาห์กับส่วนที่เหลือของข้อมูล (เช่นด้านบน) หนึ่งแล้วพอดีมีเพียงฤดูกาลสัปดาห์เช่นที่ใช้auto.arima()ในด้วยts frequency=7พยากรณ์การใช้ทั้งสองโมเดลในช่วงเวลาที่จัดทำ ตรวจสอบว่าอันไหนมีข้อผิดพลาดต่ำกว่าโดยใช้ Mae, MSE หรืออะไรก็ตามที่เกี่ยวข้องกับฟังก์ชันการสูญเสียของคุณมากที่สุด หากมีข้อแตกต่างระหว่างข้อผิดพลาดเล็กน้อยให้ไปกับตัวแบบที่ง่ายกว่า มิฉะนั้นให้ใช้อันที่มีข้อผิดพลาดต่ำกว่า

หลักฐานการพุดดิ้งอยู่ในการกินและการพิสูจน์ของรุ่นอนุกรมเวลานั้นอยู่ในการพยากรณ์

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

  1. ดังนั้นรุ่น ARIMA ตามฤดูกาลมักจะไม่สามารถจัดการกับหลายฤดูกาลได้? มันเป็นคุณสมบัติของตัวแบบเองหรือเป็นเพียงวิธีการเขียนฟังก์ชั่นใน R?

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

ไม่มีวิธีที่ชัดเจนในการขยายแนวคิดนี้ไปยังหลายฤดูกาล

แน่นอนว่าคุณสามารถทำอะไรบางอย่างโดยใช้ ARIMAX เช่นโดยรวมถึงหุ่นรายเดือนเพื่อจำลองฤดูกาลประจำปีจากนั้นทำแบบจำลองส่วนที่เหลือโดยใช้ ARIMA ตามฤดูกาลรายสัปดาห์ ถ้าคุณต้องการที่จะทำเช่นนี้ใน R ใช้ts(x,frequency=7)สร้างเมทริกซ์ของหุ่นรายเดือนและอาหารสัตว์ที่เข้าไปในพารามิเตอร์ของxregauto.arima()

ฉันไม่จำสิ่งพิมพ์ใด ๆ ที่ขยาย ARIMA ไปหลายฤดูกาลโดยเฉพาะแม้ว่าฉันแน่ใจว่ามีคนทำบางสิ่งบางอย่างตามบรรทัดในย่อหน้าก่อนหน้าของฉัน


ต่อไปนี้เป็นคำถามสองสามข้อที่ฉันได้จากคำตอบของคุณ: 1. ฉันจะตรวจสอบได้อย่างไรว่าข้อมูลมีฤดูกาลตามฤดูกาลหรือไม่? ฉันสามารถสร้างจำนวนกิจกรรมทั้งหมดต่อเดือนและใช้ acf ในการตัดสินใจนี้ได้หรือไม่ 2. ดังนั้นรุ่น ARIMA ตามฤดูกาลมักจะไม่สามารถจัดการกับหลายฤดูกาลได้? มันเป็นคุณสมบัติของตัวเองหรือเป็นเพียงวิธีการเขียนฟังก์ชั่นใน R?
statBeginner

อัปเดตโพสต์พร้อมผลลัพธ์จากอัตโนมัติอาริมาพร้อมฤดูกาลประจำสัปดาห์
statBeginner

1
@ StepanKolassa ฉันพบบทความนี้จาก AT&T ในขณะที่ย้อนกลับที่ใช้ ARIMA ตามฤดูกาลหลายรายการ รูปแบบดังกล่าวเป็นไปไม่ได้ในบทความRเนื่องจากRไม่มีความสามารถในการจัดการ ARIMA แบบหลายช่วงเวลา
พยากรณ์

2
@forecaster: เยี่ยมยอดขอบคุณ! ดูเหมือนว่าพวกเขามีความแตกต่างสองเท่าในสมการ 3.1 ฉันเป็นห่วงเกี่ยวกับการสูญเสียข้อมูลจำนวนมากในแบบนั้น น่าเสียดายที่พวกเขาไม่เปรียบเทียบผลลัพธ์กับเกณฑ์มาตรฐานอย่างง่ายเช่นความต้องการของสัปดาห์ที่แล้ว สิ่งที่ฉันชอบคือวิธีที่พวกเขาตรวจสอบชุดค่าผสมการคาดการณ์ระหว่าง DSARIMA และตัวtbatsแบบที่เหมือนกัน
S. Kolassa - Reinstate Monica

2
@StephanKolassa ฉันเห็นด้วยฉันเป็นผู้สนับสนุนที่ยิ่งใหญ่ในการใช้การคาดการณ์ที่ไร้เดียงสาเป็นเกณฑ์มาตรฐานซึ่งได้รับการสนับสนุนในหลักการพยากรณ์โดย Armstrong และเพิ่มความซับซ้อนหากมันช่วยเพิ่มความแม่นยำ ฉันลงเอยด้วยเปอร์เซ็นไทล์ 2 อันดับแรกในการแข่งขัน kaggle เพียงไม่กี่ครั้งโดยใช้วิธีการที่ไร้เดียงสาในวงดนตรีของฉัน
พยากรณ์

3

วิธีที่ดีที่สุดในการย่อยสลายข้อมูลตามฤดูกาลโดยใช้แพ็คเกจ R ที่มีอยู่คือ ceemdan () ใน Rlibeemd เทคนิคนี้แยกฤดูกาลของหลายช่วงเวลา ค่าเริ่มต้นทำงานได้ดี มันใช้การแปลง Hilbert-Huang แทนการแปลงฟูริเยร์ การแปลงฟูริเยร์มีข้อเสียเปรียบอย่างรุนแรงซึ่งสามารถจัดการกับข้อมูลเชิงเส้นนิ่งได้เมื่อชุดที่น่าสนใจส่วนใหญ่ไม่ใช่ ตัวอย่างเช่นการเดินแบบสุ่ม y_t = y_ {t-1} + e_t เป็นการเดินแบบสุ่มที่ง่ายที่สุดและพบบ่อย วิธีการอื่น ๆ ยังคงความกว้างของการเปลี่ยนแปลงตามฤดูกาลได้รับการแก้ไขเมื่อมันมักจะแตกต่างกันในทางปฏิบัติ


1
โปรดดูการสอนและการอ้างอิง MathJax พื้นฐานสำหรับความช่วยเหลือในการใส่คณิตศาสตร์เป็นคำตอบ โปรดเสนอเหตุผลในการเรียกร้อง " ดีที่สุด " (หรือพิจารณาแก้ไขการอ้างสิทธิ์) - มันจะต้องมีอย่างน้อยดีเท่าตัวเลือกอื่น ๆ ไม่ใช่แค่ส่วนใหญ่
Glen_b -Reinstate Monica

1
มันอาจจะคุ้มค่าที่จะกล่าวถึงว่าแพ็คเกจนี้ใช้กับ CRAN
Glen_b

2

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


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