Cách ngu ngốc nhất để dự báo một chuỗi thời gian đa biến ngắn


16

Tôi cần dự báo 4 biến sau cho đơn vị thời gian thứ 29. Tôi có dữ liệu lịch sử khoảng 2 năm, trong đó 1 và 14 và 27 là cùng một khoảng thời gian (hoặc thời gian trong năm). Cuối cùng, tôi đang thực hiện phân tách kiểu Oaxaca-Blinder trên , , và .w d w c pWwdwcp

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

Tôi tin rằng có thể được xấp xỉ bởi cộng với lỗi đo lường, nhưng bạn có thể thấy rằng luôn vượt quá đáng kể số lượng đó vì lãng phí, lỗi xấp xỉ hoặc trộm cắp.p w d + ( 1 - p ) w c WWpwd+(1-p)wcW

Đây là 2 câu hỏi của tôi.

  1. Suy nghĩ đầu tiên của tôi là thử tự động vectơ trên các biến này với 1 độ trễ và biến thời gian và thời gian ngoại sinh, nhưng đó có vẻ là một ý tưởng tồi với số lượng dữ liệu tôi có. Có phương pháp chuỗi thời gian nào (1) hoạt động tốt hơn khi đối mặt với "số lượng vi mô" và (2) sẽ có thể khai thác liên kết giữa các biến không?

  2. Mặt khác, các mô-đun của giá trị riêng cho VAR đều nhỏ hơn 1, vì vậy tôi không nghĩ rằng tôi cần phải lo lắng về việc không cố định (mặc dù thử nghiệm Dickey-Fuller cho thấy khác). Các dự đoán dường như chủ yếu phù hợp với các dự đoán từ một mô hình đơn biến linh hoạt với xu hướng thời gian, ngoại trừ và , thấp hơn. Các hệ số trên độ trễ có vẻ hợp lý, mặc dù chúng không đáng kể đối với hầu hết các phần. Hệ số xu hướng tuyến tính là đáng kể, cũng như một số người giả thời kỳ. Tuy nhiên, có bất kỳ lý do lý thuyết nào để thích cách tiếp cận đơn giản hơn so với mô hình VAR này không?pWp

Tiết lộ đầy đủ: Tôi đã hỏi một câu hỏi tương tự trên Statalist mà không có câu trả lời.


Xin chào, bạn có thể cung cấp thêm một số bối cảnh xung quanh việc phân tách bạn muốn làm không, vì tôi chưa thấy nó được áp dụng cho dữ liệu chuỗi thời gian?
Michelle

W'-W= =p'*(wD'-wD)+(1-p')*(wC'-wC)+(wD-wC)*(p'-p)+(ε'-ε), trong đó các số nguyên tố biểu thị giá trị hiện tại của các biến.
Dimitriy V. Masterov

hmmm, làm thế nào về việc loại trừ các ngoại lệ đầu tiên, trước khi hồi quy?
vận động viên

Mức độ chính xác nào bạn yêu cầu? Tôi đang hỏi bởi vì như bạn biết, bạn có thể sử dụng các mô hình ARIMA và nhận được MSE rất thấp. Tuy nhiên, vì những mô hình đó thường phù hợp với khả năng tối đa, gần như chắc chắn rằng bạn sẽ phù hợp hơn. Các mô hình Bayes rất mạnh khi xử lý ít dữ liệu, nhưng tôi nghĩ rằng bạn sẽ nhận được MSE một mức độ lớn hơn so với trong các mô hình ARIMA.
Robert Smith

Câu trả lời:


2

Tôi hiểu rằng câu hỏi này đã được ngồi ở đây trong nhiều năm, nhưng vẫn có thể, những ý tưởng sau đây có thể hữu ích:

  1. Nếu có các liên kết giữa các biến (và công thức lý thuyết không hoạt động tốt), PCA có thể được sử dụng để tìm kiếm các phụ thuộc (tuyến tính) theo cách có hệ thống. Tôi sẽ chỉ ra rằng điều này hoạt động tốt cho dữ liệu đã cho trong câu hỏi này.

  2. Do không có nhiều dữ liệu (tổng cộng 112 số), chỉ có thể ước tính một vài tham số mô hình ( ví dụ: phù hợp với hiệu ứng theo mùa đầy đủ không phải là một tùy chọn) và thử mô hình tùy chỉnh có thể có ý nghĩa.

Đây là cách tôi sẽ đưa ra một dự báo, theo các nguyên tắc sau:

Bước 1. Chúng ta có thể sử dụng PCA để tiết lộ các phụ thuộc trong dữ liệu. Sử dụng R, với dữ liệu được lưu trữ trong 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

W= =0,234wd-1,52wc-8.842p

4×4

Bước 2. Có một xu hướng rõ ràng trong PC1:

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

xu hướng của PC1

Tôi tạo một bản sao điểm số PC với xu hướng này bị xóa:

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

Vẽ sơ đồ điểm số của các PC khác cho thấy không có xu hướng rõ ràng, vì vậy tôi không thay đổi.

Vì điểm số PC là trung tâm, nên xu hướng đi qua tâm khối lượng của mẫu PC1 và phù hợp với xu hướng chỉ tương ứng với ước tính một tham số.

Bước 3. Một biểu đồ phân tán cặp cho thấy không có cấu trúc rõ ràng, vì vậy tôi mô hình hóa các PC là độc lập:

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

ghép sơ đồ phân tán PC sau khi loại bỏ xu hướng

Bước 4. Có một định kỳ rõ ràng trong PC1, với độ trễ 13 (như được đề xuất bởi câu hỏi). Điều này có thể được nhìn thấy theo những cách khác nhau. Ví dụ, độ tự tương quan trễ 13 cho thấy sự khác biệt đáng kể so với 0 trong một biểu đồ tương quan:

> acf(y2[,1])

ACF của PC1 sau khi loại bỏ trôi

(Tính tuần hoàn nổi bật hơn khi vẽ dữ liệu cùng với một bản sao được thay đổi.)

yt+13(1)= =α13yt(1)+σεt+13εtα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

Để kiểm tra tính hợp lý, tôi vẽ dữ liệu đã cho (màu đen), cùng với quỹ đạo ngẫu nhiên của mô hình của tôi cho PC1 (màu xanh), trong tương lai một năm:

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")

một quỹ đạo mô phỏng cho PC1

Đoạn đường mô phỏng màu xanh lam trông giống như sự tiếp tục hợp lý của dữ liệu. Các biểu đồ tương quan cho PC2 và PC3 cho thấy không có mối tương quan đáng kể nào, vì vậy tôi mô hình hóa các thành phần này là nhiễu trắng. PC4 không cho thấy mối tương quan, nhưng đóng góp rất ít vào tổng phương sai đến mức nó dường như không đáng để mô hình hóa, và tôi cũng mô hình thành phần này là nhiễu trắng.

Ở đây chúng tôi đã trang bị thêm hai tham số. Điều này đưa chúng ta đến tổng cộng chín tham số trong mô hình (bao gồm cả PCA), điều này dường như không vô lý khi chúng ta bắt đầu với dữ liệu bao gồm 112 số.

Dự báo. Chúng ta có thể nhận được một dự báo số bằng cách loại bỏ nhiễu (để lấy giá trị trung bình) và đảo ngược 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

Các dải không chắc chắn có thể thu được bằng cách phân tích hoặc đơn giản bằng cách sử dụng 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")
}

dải không chắc chắn cho dự báo

W


1
Cách tiếp cận thú vị. Hãy để tôi tiêu hóa điều này một chút.
Dimitriy V. Masterov
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.