มีการระบุรูปแบบโดย auto.arima () อย่างชัดเจนไหม?


13

ฉันพยายามเรียนรู้และนำแบบจำลอง ARIMA มาใช้ ฉันได้อ่านข้อความยอดเยี่ยมเกี่ยวกับ ARIMA โดย Pankratz - การพยากรณ์ด้วย Univariate Box - โมเดลเจนกินส์: แนวคิดและคดีต่างๆ ในข้อความที่ผู้เขียนเน้นเป็นพิเศษในการเลือกรูปแบบ ARIMA

ผมเริ่มเล่นกับauto.arima()ฟังก์ชั่นในRแพคเกจการคาดการณ์ นี่คือสิ่งที่ผมทำผมจำลอง ARIMA auto.arima()และนำไปใช้แล้ว ด้านล่างเป็น 2 ตัวอย่าง อย่างที่คุณเห็นในตัวอย่างทั้งสองauto.arima()ระบุรูปแบบที่ชัดเจนว่าหลายคนอาจมองว่าไม่ใช้คำพูด โดยเฉพาะอย่างยิ่งในตัวอย่างที่ 2 ซึ่งauto.arima()ระบุ ARIMA (3,0,3) เมื่อจริง ๆ แล้ว ARIMA (1,0,1) น่าจะเพียงพอแล้ว

ด้านล่างเป็นคำถามของฉัน ฉันขอขอบคุณข้อเสนอแนะและคำแนะนำใด ๆ

  1. มีคำแนะนำใดบ้างในการใช้ / แก้ไขโมเดลที่ระบุโดยใช้อัลกอริทึมอัตโนมัติเช่นauto.arima()?
  2. มีหลุมใดที่ใช้เพียง AIC (ซึ่งเป็นสิ่งที่ฉันคิดว่าauto.arima()ใช้) เพื่อระบุรูปแบบ?
  3. อัลกอริทึมอัตโนมัติที่สร้างขึ้นนั้นสามารถใช้จองหรือไม่?

โดยวิธีที่ฉันใช้auto.arima()เป็นเพียงตัวอย่าง สิ่งนี้จะนำไปใช้กับอัลกอริทึมอัตโนมัติใด ๆ

ด้านล่างคือตัวอย่าง # 1:

set.seed(182)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)

auto.arima(y)

qa <- arima(y,order=c(1,0,1))
qa

auto.arima()ด้านล่างนี้เป็นผลที่ได้จาก โปรดทราบว่าค่าสัมประสิทธิ์ทั้งหมดไม่มีนัยสำคัญ เช่นค่าt <2

ARIMA(1,0,2) with non-zero mean 

Coefficients:
         ar1     ma1      ma2  intercept
      0.5395  0.2109  -0.3385    19.9850
s.e.  0.4062  0.4160   0.3049     0.0878

sigma^2 estimated as 1.076:  log likelihood=-728.14
AIC=1466.28   AICc=1466.41   BIC=1487.36

ด้านล่างนี้เป็นผลลัพธ์จากการทำงานปกติarima()ด้วยคำสั่ง ARIMA (1,0,1)

Series: y 
ARIMA(1,0,1) with non-zero mean 

Coefficients:
         ar1     ma1  intercept
      0.2398  0.6478    20.0323
s.e.  0.0531  0.0376     0.1002

sigma^2 estimated as 1.071:  log likelihood=-727.1
AIC=1462.2   AICc=1462.28   BIC=1479.06

ตัวอย่างที่ 2:

set.seed(453)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)

auto.arima(y)

qa <- arima(y,order=c(1,0,1))
qa

ด้านล่างนี้เป็นผลลัพธ์จากauto.arima():

ARIMA(3,0,3) with non-zero mean 

Coefficients:
         ar1      ar2     ar3     ma1     ma2     ma3  intercept
      0.7541  -1.0606  0.2072  0.1391  0.5912  0.5491    20.0326
s.e.  0.0811   0.0666  0.0647  0.0725  0.0598  0.0636     0.0939

sigma^2 estimated as 1.027:  log likelihood=-716.84
AIC=1449.67   AICc=1449.97   BIC=1483.39

ด้านล่างนี้คือผลลัพธ์ที่ทำงานเป็นปกติarima()พร้อมคำสั่ง ARIMA (1,0,1)

Series: y 
ARIMA(1,0,1) with non-zero mean 

Coefficients:
         ar1     ma1  intercept
      0.2398  0.6478    20.0323
s.e.  0.0531  0.0376     0.1002

sigma^2 estimated as 1.071:  log likelihood=-727.1
AIC=1462.2   AICc=1462.28   BIC=1479.06

คุณดูเหมือนจะเข้าสู่บางสิ่งบางอย่างที่นี่เนื่องจากขั้นตอน AIC อาจระบุรุ่นที่ง่ายที่สุด นอกจากนี้สถานที่เกณฑ์ AIC ไม่มีพัลส์ / ไม่มีการเลื่อนระดับ / ไม่มีพัลส์ตามฤดูกาล / ไม่มีแนวโน้มเวลาท้องถิ่น / ความคงตัวของพารามิเตอร์ / ความมั่นคงของความแปรปรวนข้อผิดพลาด
IrishStat

AIC และ BIC เป็นสัดส่วนกับความแปรปรวนของข้อผิดพลาดจากแบบจำลองที่เดาได้ วิธีการในประสบการณ์ของฉันเป็นแบบง่าย ๆ เนื่องจากปัญหาบางอย่างที่ฉันได้พูดถึงไปแล้ว ไม่มีการแทนที่ระบบการระบุตัวตนอัจฉริยะที่สร้างแบบจำลองซ้ำซึ่งสรุปได้เมื่อไม่มีพารามิเตอร์ที่ไม่จำเป็นและยังไม่มีข้อมูล / โครงสร้างปรากฏอยู่ในส่วนที่เหลือ โดยสรุปการระบุโมเดลอัตโนมัติเป็นกระบวนการวนซ้ำไม่ใช่กระบวนการเดียวในกระบวนการวิเคราะห์เชิงสถิติทั้งหมด
IrishStat

@Irishstat มันเป็นสัญลักษณ์ของค่าสัมประสิทธิ์ของ ma มันควรจะตีความว่าเป็น -0.1391 -0.5912 -0.5491 คืออะไร?
นักพยากรณ์

ในแง่ของข้อความ Pankratz .. ใช่! . คุณสามารถตรวจสอบรากของพหุนามเพื่อดูว่าตรงตามข้อกำหนดการสลับกลับ
IrishStat

ดังนั้น auto.arima ด้านบนจึงไม่สามารถย้อนกลับได้นั่นคือ -0.1391-0.5912-0.5491 คือ <1 ดังนั้นโมเดลนี้จึงใช้ได้
พยากรณ์

คำตอบ:


17

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

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

approximation(length(x)>100 | frequency(x)>12)approximationTRUE n=100n=500 approximationauto.arima()approximation = TRUEarima()

สำหรับตัวอย่างที่ 1 ของคุณเราควรมี

> auto.arima(y, approximation = FALSE)
Series: y 
ARIMA(0,0,1) with non-zero mean 

Coefficients:
         ma1  intercept
      0.7166    19.9844
s.e.  0.0301     0.0797

sigma^2 estimated as 1.079:  log likelihood=-728.94
AIC=1463.87   AICc=1463.92   BIC=1476.52
> qa
Series: y 
ARIMA(1,0,1) with non-zero mean 

Coefficients:
         ar1     ma1  intercept
      0.0565  0.6890    19.9846
s.e.  0.0626  0.0456     0.0830

sigma^2 estimated as 1.078:  log likelihood=-728.53
AIC=1465.06   AICc=1465.14   BIC=1481.92

ดังนั้นจึงauto.arima()เลือกรูปแบบที่น่าจดจำมากกว่าแบบจริง ARIMA (0, 0, 1) ถูกเลือก แต่นี่เป็นไปตามเกณฑ์ข้อมูลและตอนนี้พวกเขาเป็นไปตาม; รุ่นที่เลือกมี AIC, AICc และ BIC ที่ต่ำกว่าแม้ว่าความแตกต่างของ AIC และ AICc นั้นมีขนาดเล็ก อย่างน้อยตอนนี้การเลือกมีความสอดคล้องกับบรรทัดฐานสำหรับการเลือกแบบจำลองตามเกณฑ์ข้อมูล

เหตุผลสำหรับการ MA (1) ถูกเลือกฉันเชื่อว่าเกี่ยวข้องกับปัญหาแรกที่ฉันกล่าวถึง กล่าวคือโมเดลที่เหมาะสมที่สุดสำหรับตัวอย่างที่ดึงมาจาก ARIMA ที่ระบุไว้ (p, d, q) อาจไม่เรียงลำดับเดียวกับโมเดลจริง นี่คือเนื่องจากการสุ่มตัวอย่าง การใช้ซีรี่ส์ที่ยาวขึ้นหรือเบิร์นในระยะเวลานานอาจช่วยเพิ่มโอกาสในการเลือกรุ่นที่แท้จริง แต่ไม่รวมกับรุ่น

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


ขอบคุณสำหรับคำตอบอย่างละเอียด ฉันใช้วิธีการของคุณสำหรับตัวอย่างที่สอง: set.seed (453) y <- arima.sim (n = 500, list (ar = 0.2, ma = 0.6), mean = 10) auto.arima (y, การประมาณ = FALSE) และนี่คือสิ่งที่ฉันได้รับมันชัดเจนเกินข้อมูล - ARIMA (2,0,4) ที่ไม่เป็นศูนย์ค่าสัมประสิทธิ์: ar1 ar2 ma1 ma2 ma3 ma3 สกัดกั้น 0.5369 -0.9627 0.3681 0.6799 0.7081 0.7099 0.1701 se 0.0278 0.0499 0.0533 0.0630 0.0793 0.0574 0.0927 sigma ^ 2 ประมาณ 1.024: log likelihood = -716.17 AIC = 1448.33 AICc = 1448.63 BIC = 1482.05
ทำนาย

ฉันยังไม่ได้อ่านบทที่มีบางสิ่งที่เรียกว่า "การกลับหัว" auto.arima ในกรณีที่สองละเมิดกฎ "invertiblity" ในการวิเคราะห์แบบจำลองหรือไม่ฉันอาจถูกปิดคุณสามารถแก้ไขได้ไหมถ้าฉันผิด
นักพยากรณ์

1
@forecaster สมมติว่าคุณไม่รู้ความจริงทั้งหมดที่คุณมีคือตัวอย่างที่จะส่ง ในกรณีดังกล่าว AIC ฯลฯ กำลังทำสิ่งที่คุณกำลังขอให้พวกเขาทำ ดังที่ฉันได้กล่าวไว้ข้างต้นชุดจำลองอาจไม่ใช่ชุดที่คุณขอหรืออาจเป็นไปไม่ได้ที่จะระบุชุดจริงจากตัวอย่างเล็ก ๆ ที่คุณถ่ายสำเร็จ ไม่มีอะไรที่บอกเป็นนัยในที่นี้หรือที่อื่น ๆ ในสถิติที่คุณจะได้รับโมเดล TRUE ในฐานะนักสถิติถ้าคุณคิดว่าซีรีส์นี้มีการติดมากเกินไป (พูดจากความรู้เดิม) ให้วางข้อ จำกัด ตามลำดับของคำที่ค้นหา หรือใช้ BIC เป็นเกณฑ์ในการหยุด
Reinstate Monica - G. Simpson

ฉันไม่รู้ดีพอที่จะสามารถตอบคำถามนั้นได้ อาจถามคำถามนี้เป็นคำถามใหม่ที่นี่หรือ
Reinstate Monica - G. Simpson

@forecaster (เหตุผลที่ฉันบอกว่า BIC คือมันวางโทษพิเศษในความซับซ้อนในกรณีนี้ BIC ของ ARIMA (1, 0, 1) มี BIC ต่ำกว่าแบบจำลองที่auto.arima()ตั้งไว้ดังนั้นถ้าเป็นเพียงสองคน ผู้สมัครรุ่นที่ง่ายกว่านั้นจะถูกเลือก ... )
Reinstate Monica - G. Simpson

2

ขอบคุณมาก @ Gavin, @Irishstat และ @Rob ที่ตอบคำถามของฉัน เป็นที่ชัดเจนว่าถ้าฉันต้องการแบบจำลองทางอัลกอริธึมเช่น auto.arima BIC เกณฑ์ข้อมูลควรใช้แทน AIC โดยเฉพาะหลังจากดูโพสต์นี้ และ @ Gavin โพสต์ด้านบน

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

มาถึงรหัส - auto.arima มีตัวเลือกให้เลือกระหว่าง AIC หรือ BIC ดูด้านล่างรหัสได้รับการแก้ไขจากคำถามข้างต้น

ขอบคุณมากชุมชนที่ผ่านการตรวจสอบ ฉันเรียนรู้สิ่งใหม่และน่าดึงดูดใจทุกวัน

###############
set.seed(453)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)

## Adequetly describes the unknown data
fit.aic <- auto.arima(y,ic = c("aic"))
fit.aic

## Selects the model that is parsimonious
fit.bic <- auto.arima(y,ic = c("bic"))
fit.bic

BIC IC เลือกรุ่น MA (2)

> fit.bic
Series: y 
ARIMA(0,0,2) with non-zero mean 

Coefficients:
         ma1     ma2  intercept
      0.9256  0.2335    20.0326
s.e.  0.0453  0.0444     0.0992

sigma^2 estimated as 1.059:  log likelihood=-724.19
AIC=1456.39   AICc=1456.47   BIC=1473.24

1

ฉันนำค่า 500 ไปสู่ ​​AUTOBOX (ชิ้นส่วนของซอฟต์แวร์เชิงพาณิชย์ที่ฉันได้ช่วยพัฒนา) และได้รับคำแนะนำต่อไปนี้ป้อนคำอธิบายรูปภาพที่นี่ตาม Chow Test สำหรับค่าคงที่ของพารามิเตอร์ ความผิดพลาดขั้นพื้นฐานที่เกิดขึ้นในการศึกษาอนุกรมเวลาคือการสมมติว่าข้อมูลถูกขับเคลื่อนโดยตัวแบบเฉพาะที่มีพารามิเตอร์คงที่ AUTOBOX ตรวจพบจุดพักที่ช่วงเวลา 246 ซึ่งอาจสะท้อนถึงการจำลองที่ไม่ได้ "อุ่นเครื่อง" เมื่อทำการจำลองข้อมูลที่ดีคือการลบค่าแรก "n" และศึกษาค่าที่เหลือ ฉันนำข้อมูลและแบ่งออกเป็นสองส่วน 245 รายการแรกและ 255 ที่เหลือ ที่นี่ทั้งสองแปลงป้อนคำอธิบายรูปภาพที่นี่ acf แตกต่างกันมากป้อนคำอธิบายรูปภาพที่นี่

กลับไปที่การวิเคราะห์: ที่นี่เป็นรุ่นที่ถูกระบุว่าสำหรับที่ผ่านมา 246 ค่าป้อนคำอธิบายรูปภาพที่นี่และที่นี่มีสถิติดังต่อไปนี้ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่ที่เกิดขึ้นจริง / Fit และการพยากรณ์อยู่ที่นี่กับพล็อตที่เหลือที่นี่ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่ACF ของส่วนที่เหลือแสดงให้เห็นถึงความเพียงพอป้อนคำอธิบายรูปภาพที่นี่. โปรดทราบว่า 5 พัลส์ที่ถูกระบุมีผลกระทบน้อยมากและสามารถเพิกเฉยได้ง่าย (ในกรณีนี้!) โดยสรุปบทเรียนที่ได้เรียนรู้ที่นี่คือบางครั้งเรามีข้อมูลมากเกินไปและเราจำเป็นต้องพิจารณาค่าสัมประสิทธิ์การเปลี่ยนแปลงเวลา ในกรณีนี้เรากำลังระบุการเปลี่ยนแปลงของพารามิเตอร์ที่ (เห็นได้ชัด) ไม่มีผลกระทบอย่างมีนัยสำคัญต่อโมเดล / พารามิเตอร์ผลลัพธ์ แต่มันชี้ให้เห็นถึงการปรับปรุงกระบวนการที่จำเป็นโดยทั่วไปในการวิเคราะห์อนุกรมเวลา ประสบการณ์ของฉันกับ auto.arima แสดงให้เห็นว่าเนื่องจากมันไม่ได้รักษา / แก้ไขการละเมิด Gaussian อย่างชัดเจนมันจึงมีแนวโน้มที่จะเป็นแบบจำลองโดยพึ่งพาคุณค่าทางประวัติศาสตร์มากกว่าการแยกโครงสร้างออกจากข้อมูล ในกรณีนี้เนื่องจากเป็นการจำลองที่ควบคุมอย่างแน่นหนาโดยไม่มีการละเมิดแบบเกาส์มันทำงานได้ แต่โดยทั่วไปฉันจะสงสัยว่าเป็นแบบ bandwith แบบ จำกัด และแบบขั้นตอนเดียวในการระบุแบบจำลอง ARIMA เชื่อ แต่ยืนยัน!


0

 exp(AICminAICi)/2

ถ้าเป็นเช่นนี้ก็จะช่วยให้ผู้ใช้เพื่อดูความน่าจะเป็นญาติเหล่านี้ร่วมกับ AICS (?) auto.arima( ... trace=TRUE )จาก ตัวอย่างเช่นข้อมูลไข่ทำงานตามที่ คำถามนี้ ให้

                                # relprob = exp( (AICmin - AIC) / 2 ) * 100
 ARIMA(0,1,0) with drift : 784.5    100
 ARIMA(0,1,1) with drift : 784.8     86
 ARIMA(1,1,0) with drift : 784.9     82
 ARIMA(0,1,0)            : 792.4      2
 ARIMA(2,1,2) with drift : Inf    0
 ARIMA(1,1,1) with drift : Inf    0

1
นี่คือคำตอบหรือคำถาม?
ทิม

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