วิธีโง่อย่างน้อยที่สุดในการทำนายอนุกรมเวลาแบบหลายตัวแปรสั้น ๆ


16

ฉันจำเป็นต้องคาดการณ์ตัวแปร 4 ตัวต่อไปนี้สำหรับหน่วยเวลาที่ 29 ฉันมีข้อมูลประวัติศาสตร์ประมาณ 2 ปีโดยที่ 1 และ 14 และ 27 เป็นช่วงเวลาเดียวกันทั้งหมด (หรือช่วงเวลาของปี) ในท้ายที่สุดฉันทำสลายตัวสไตล์โออาซากา-Blinder ใน , W D , W และพีWWdWพี

time    W               wd              wc               p
1       4.920725        4.684342        4.065288        .5962985
2       4.956172        4.73998         4.092179        .6151785
3       4.85532         4.725982        4.002519        .6028712
4       4.754887        4.674568        3.988028        .5943888
5       4.862039        4.758899        4.045568        .5925704
6       5.039032        4.791101        4.071131        .590314
7       4.612594        4.656253        4.136271        .529247
8       4.722339        4.631588        3.994956        .5801989
9       4.679251        4.647347        3.954906        .5832723
10      4.736177        4.679152        3.974465        .5843731
11      4.738954        4.759482        4.037036        .5868722
12      4.571325        4.707446        4.110281        .556147
13      4.883891        4.750031        4.168203        .602057
14      4.652408        4.703114        4.042872        .6059471
15      4.677363        4.744875        4.232081        .5672519
16      4.695732        4.614248        3.998735        .5838578
17      4.633575        4.6025          3.943488        .5914644
18      4.61025         4.67733         4.066427        .548952
19      4.678374        4.741046        4.060458        .5416393
20      4.48309         4.609238        4.000201        .5372143
21      4.477549        4.583907        3.94821         .5515663
22      4.555191        4.627404        3.93675         .5542806
23      4.508585        4.595927        3.881685        .5572687
24      4.467037        4.619762        3.909551        .5645944
25      4.326283        4.544351        3.877583        .5738906
26      4.672741        4.599463        3.953772        .5769604
27      4.53551         4.506167        3.808779        .5831352
28      4.528004        4.622972        3.90481         .5968299

ผมเชื่อว่าสามารถห้วงพีW D + ( 1 - P ) W บวกวัดความผิดพลาด แต่คุณจะเห็นว่าWเสมอมากเกินกว่าปริมาณที่ว่าเพราะของเสียข้อผิดพลาดประมาณหรือถูกขโมยWพีWd+(1-พี)WW

นี่คือคำถาม 2 ข้อของฉัน

  1. ความคิดแรกของฉันคือการลองใช้เวกเตอร์การตอบโต้อัตโนมัติกับตัวแปรเหล่านี้ด้วย 1 ความล่าช้าและตัวแปรเวลาและรอบระยะเวลาภายนอก มีวิธีอนุกรมเวลาหรือไม่ที่ (1) ทำงานได้ดีขึ้นเมื่อเผชิญกับ "micro-numerosity" และ (2) จะสามารถใช้ประโยชน์จากลิงก์ระหว่างตัวแปรได้หรือไม่?

  2. ในอีกทางหนึ่งค่าลักษณะเฉพาะสำหรับ VAR นั้นน้อยกว่า 1 ดังนั้นฉันไม่คิดว่าฉันต้องกังวลเกี่ยวกับความไม่คงที่ (แม้ว่าการทดสอบ Dickey-Fuller แนะนำเป็นอย่างอื่น) การคาดคะเนส่วนใหญ่สอดคล้องกับการคาดการณ์จากตัวแบบ univariate ที่ยืดหยุ่นพร้อมแนวโน้มเวลายกเว้นและpซึ่งต่ำกว่า ค่าสัมประสิทธิ์ความล่าช้าส่วนใหญ่ดูเหมือนจะสมเหตุสมผลแม้ว่าพวกเขาจะไม่มีความสำคัญสำหรับส่วนใหญ่ ค่าสัมประสิทธิ์แนวโน้มเชิงเส้นมีความสำคัญเช่นเดียวกับบางช่วงเวลา แต่ถึงกระนั้นมีเหตุผลทางทฤษฎีที่จะชอบวิธีที่ง่ายกว่าแบบจำลอง VAR หรือไม่?Wพี

การเปิดเผยแบบเต็ม: ฉันถามคำถามที่คล้ายกันกับนักสถิติโดยไม่มีการตอบกลับ


สวัสดีคุณช่วยให้บริบทเพิ่มเติมเกี่ยวกับการย่อยสลายที่คุณต้องการเพราะฉันไม่เคยเห็นมันใช้กับข้อมูลอนุกรมเวลา?
มิเชล

ฉันแบ่งการเปลี่ยนแปลงเป็นองค์ประกอบด้วยวิธีต่อไปนี้: โดยที่จำนวนเฉพาะแสดงถึงค่าปัจจุบันของตัวแปรW'-W=พี'* * * *(WD'-WD)+(1-พี')* * * *(W'-W)+(WD-W)* * * *(พี'-พี)+(ε'-ε)
Dimitriy V. Masterov

อืมวิธีการเกี่ยวกับการแยกค่าผิดก่อนก่อนที่จะถดถอย?
athos

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

คำตอบ:


2

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

  1. หากมีการเชื่อมโยงระหว่างตัวแปร (และสูตรทางทฤษฎีไม่ได้ผลดี) PCA สามารถใช้ในการค้นหาการพึ่งพา (เชิงเส้น) อย่างเป็นระบบ ฉันจะแสดงว่ามันใช้งานได้ดีสำหรับข้อมูลที่ให้ไว้ในคำถามนี้

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

นี่คือวิธีที่ฉันจะพยากรณ์ตามหลักการเหล่านี้:

ขั้นตอนที่ 1เราสามารถใช้ PCA เพื่อเปิดเผยการพึ่งพาในข้อมูล ใช้ R กับข้อมูลที่เก็บไว้ในx:

> library(jvcoords)
> m <- PCA(x)
> m
PCA: mapping p = 4 coordinates to q = 4 coordinates

                              PC1         PC2          PC3          PC4
standard deviation     0.18609759 0.079351671 0.0305622047 0.0155353709
variance               0.03463231 0.006296688 0.0009340484 0.0002413477
cum. variance fraction 0.82253436 0.972083769 0.9942678731 1.0000000000

สิ่งนี้แสดงให้เห็นว่าองค์ประกอบหลักสองตัวแรกอธิบายความแปรปรวนได้ 97% และการใช้สามองค์ประกอบครอบคลุมความแปรปรวน 99.4% ดังนั้นจะเพียงพอที่จะสร้างแบบจำลองสำหรับพีซีสองหรือสามเครื่องแรก (ข้อมูลโดยประมาณพอใจW=0.234Wd-1.152W-8.842พี

4×4

ขั้นตอนที่ 2มีแนวโน้มที่ชัดเจนใน PC1:

> t <- 1:28
> plot(m$y[,1], type = "b", ylab = "PC1")
> trend <- lm(m$y[,1] ~ t)
> abline(trend)

แนวโน้มของ PC1

ฉันสร้างสำเนาคะแนน PC โดยที่แนวโน้มนี้ถูกลบออก:

> y2 <- m$y
> y2[,1] <- y2[,1] - fitted(trend)

การพล็อตคะแนนของพีซีอื่นไม่เปิดเผยแนวโน้มที่ชัดเจนดังนั้นฉันจึงไม่เปลี่ยนแปลงสิ่งเหล่านี้

เนื่องจากคะแนนพีซีมีศูนย์กลางอยู่ที่แนวโน้มจะต้องผ่านจุดศูนย์กลางมวลของตัวอย่าง PC1 และปรับแนวโน้มให้สอดคล้องกับการประมาณหนึ่งพารามิเตอร์เท่านั้น

ขั้นตอนที่ 3พล็อตกระจายของคู่ไม่มีโครงสร้างที่ชัดเจนดังนั้นฉันจำลองพีซีว่าเป็นอิสระ:

> pairs(y2, asp = 1, oma = c(1.7, 1.7, 1.7, 1.7))

จับคู่พล็อตกระจายของพีซีหลังจากลบแนวโน้ม

ขั้นตอนที่ 4มีช่วงเวลาที่ชัดเจนใน PC1 โดยมีความล่าช้า 13 (ตามคำถามที่แนะนำ) สิ่งนี้สามารถเห็นได้ในหลาย ๆ ทาง ตัวอย่างเช่นความสัมพันธ์ระหว่างความล่าช้า 13 แสดงให้เห็นว่ามีความแตกต่างอย่างมีนัยสำคัญจาก 0 ใน correlogram:

> acf(y2[,1])

ACF ของ PC1 หลังจากลบ drift

(ช่วงเวลานั้นโดดเด่นมากขึ้นเมื่อทำการพล็อตข้อมูลพร้อมกับสำเนาที่เลื่อน)

Yเสื้อ+13(1)=α13Yเสื้อ(1)+σεเสื้อ+13εเสื้อα13σlm()

> lag13 <- lm(y2[14:28,1] ~ y2[1:15,1] + 0)
> lag13

Call:
lm(formula = y2[14:28, 1] ~ y2[1:15, 1] + 0)

Coefficients:
y2[1:15, 1]  
     0.6479  

> a13 <- coef(lag13)
> s13 <- summary(lag13)$sigma

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

t.f <- 29:41
pc1 <- m$y[,1]
pc1.f <- (predict(trend, newdata = data.frame(t = t.f))
          + a13 * y2[16:28, 1]
          + rnorm(13, sd = s13))
plot(t, pc1, xlim = range(t, t.f), ylim = range(pc1, pc1.f),
     type = "b", ylab = "PC1")
points(t.f, pc1.f, col = "blue", type = "b")

วิถีจำลองสำหรับ PC1

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

ที่นี่เราได้ติดตั้งพารามิเตอร์อีกสองตัว สิ่งนี้ทำให้เรามีพารามิเตอร์ทั้งหมดเก้าตัวในโมเดล (รวมถึง PCA) ซึ่งดูเหมือนจะไร้สาระเมื่อเราเริ่มต้นด้วยข้อมูลที่ประกอบด้วยตัวเลข 112 หมายเลข

พยากรณ์ เราสามารถรับการคาดการณ์ที่เป็นตัวเลขโดยปล่อยเสียงรบกวน (เพื่อให้ได้ค่าเฉลี่ย) และย้อนกลับ PCA:

> pc1.f <- predict(trend, newdata = data.frame(t = t.f)) + a13 * y2[16:28, 1]
> y.f <- data.frame(PC1 = pc1.f, PC2 = 0, PC3 = 0, PC4 = 0)
> x.f <- fromCoords(m, y.f)
> rownames(x.f) <- t.f
> x.f
          W       wd       wc         p
29 4.456825 4.582231 3.919151 0.5616497
30 4.407551 4.563510 3.899012 0.5582053
31 4.427701 4.571166 3.907248 0.5596139
32 4.466062 4.585740 3.922927 0.5622955
33 4.327391 4.533055 3.866250 0.5526018
34 4.304330 4.524294 3.856824 0.5509898
35 4.342835 4.538923 3.872562 0.5536814
36 4.297404 4.521663 3.853993 0.5505056
37 4.281638 4.515673 3.847549 0.5494035
38 4.186515 4.479533 3.808671 0.5427540
39 4.377147 4.551959 3.886586 0.5560799
40 4.257569 4.506528 3.837712 0.5477210
41 4.289875 4.518802 3.850916 0.5499793

วงดนตรีที่ไม่แน่นอนสามารถรับได้ทั้งการวิเคราะห์หรือเพียงแค่ใช้ Monte Carlo:

N <- 1000 # number of Monte Carlo samples
W.f <- matrix(NA, N, 13)
for (i in 1:N) {
    y.f <- data.frame(PC1 = (predict(trend, newdata = data.frame(t = t.f))
              + a13 * y2[16:28, 1]
              + rnorm(13, sd = s13)),
              PC2 = rnorm(13, sd = sd(y2[,2])),
              PC3 = rnorm(13, sd = sd(y2[, 3])),
              PC4 = rnorm(13, sd = sd(y2[, 4])))
    x.f <- fromCoords(m, y.f)
    W.f[i,] <- x.f[, 1]
}
bands <- apply(W.f, 2,
               function(x) quantile(x, c(0.025, 0.15, 0.5, 0.85, 0.975)))
plot(t, x$W, xlim = range(t, t.f), ylim = range(x$W, bands),
     type = "b", ylab = "W")
for (b in 1:5) {
    lines(c(28, t.f), c(x$W[28], bands[b,]), col = "grey")
}

แถบความไม่แน่นอนสำหรับการพยากรณ์

เนื้อเรื่องแสดงข้อมูลตามจริงสำหรับ Wพร้อมกับวงดนตรีที่ไม่แน่นอน 60% (สามบรรทัดด้านใน) และ 95% (ด้านนอกสองบรรทัด) สำหรับการคาดการณ์โดยใช้โมเดลที่ติดตั้ง


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