Cara paling bodoh untuk meramalkan seri waktu multivarian pendek


16

Saya perlu memperkirakan 4 variabel berikut untuk unit waktu ke-29. Saya memiliki sekitar 2 tahun data historis, di mana 1 dan 14 dan 27 semuanya periode yang sama (atau sepanjang tahun). Pada akhirnya, saya melakukan dekomposisi gaya Oaxaca-Blinder pada , , , dan .Wwdwchal

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

Saya percaya bahwa dapat diperkirakan oleh plus kesalahan pengukuran, tetapi Anda dapat melihat bahwa selalu jauh melebihi kuantitas itu karena pemborosan, kesalahan aproksimasi, atau pencurian.Whalwd+(1-hal)wcW

Inilah 2 pertanyaan saya.

  1. Pikiran pertama saya adalah mencoba autoregresi vektor pada variabel-variabel ini dengan 1 lag dan variabel waktu dan periode eksogen, tetapi itu sepertinya ide yang buruk mengingat betapa sedikitnya data yang saya miliki. Apakah ada metode deret waktu yang (1) berkinerja lebih baik dalam menghadapi "micro-numerosity" dan (2) akan dapat mengeksploitasi hubungan antara variabel?

  2. Di sisi lain, moduli dari nilai eigen untuk VAR semuanya kurang dari 1, jadi saya tidak berpikir saya perlu khawatir tentang non-stasioneritas (meskipun tes Dickey-Fuller menyarankan sebaliknya). Prediksi tampaknya sebagian besar sejalan dengan proyeksi dari model univariat yang fleksibel dengan tren waktu, kecuali untuk dan , yang lebih rendah. Koefisien pada lag tampaknya sebagian besar masuk akal, meskipun mereka tidak signifikan untuk sebagian besar. Koefisien tren linier adalah signifikan, seperti juga beberapa periode boneka. Namun, apakah ada alasan teoritis untuk memilih pendekatan yang lebih sederhana ini daripada model VAR?Whal

Pengungkapan penuh: Saya mengajukan pertanyaan serupa tentang Statalist tanpa jawaban.


Hai, bisakah Anda memberikan lebih banyak konteks di sekitar dekomposisi yang ingin Anda lakukan, karena saya belum melihatnya diterapkan pada data deret waktu?
Michelle

Saya memecah perubahan menjadi komponen dengan cara berikut: W-W=hal(wD-wD)+(1-hal)(wC-wC)+(wD-wC)(hal-hal)+(ϵ-ϵ), di mana bilangan prima menunjukkan nilai variabel saat ini.
Dimitriy V. Masterov

hmmm, bagaimana kalau mengecualikan outlier dulu, sebelum regresi?
athos

Berapa tingkat presisi yang Anda butuhkan? Saya bertanya karena seperti yang Anda tahu, Anda dapat menggunakan model ARIMA dan mendapatkan MSE yang sangat rendah. Namun, karena model-model itu biasanya pas menggunakan kemungkinan maksimum, hampir pasti Anda akan mengenakan pakaian berlebih. Model Bayesian kuat ketika berhadapan dengan sedikit data, tapi saya pikir Anda akan mendapatkan MSE urutan besarnya lebih tinggi daripada model ARIMA.
Robert Smith

Jawaban:


2

Saya mengerti bahwa pertanyaan ini sudah ada di sini selama bertahun-tahun, tetapi tetap saja, ide-ide berikut mungkin berguna:

  1. Jika ada hubungan antara variabel (dan rumus teoritis tidak berfungsi dengan baik), PCA dapat digunakan untuk mencari dependensi (linier) secara sistematis. Saya akan menunjukkan bahwa ini bekerja dengan baik untuk data yang diberikan dalam pertanyaan ini.

  2. Mengingat tidak ada banyak data (total 112 angka), hanya beberapa parameter model yang dapat diperkirakan ( mis. Menyesuaikan efek musiman penuh bukanlah suatu pilihan), dan mencoba model khusus mungkin masuk akal.

Inilah cara saya membuat perkiraan, mengikuti prinsip-prinsip ini:

Langkah 1. Kita bisa menggunakan PCA untuk mengungkapkan dependensi dalam data. Menggunakan R, dengan data disimpan di 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.152wc-8.842hal

4×4

Langkah 2. Ada tren yang jelas di PC1:

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

tren PC1

Saya membuat salinan skor PC dengan tren ini dihapus:

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

Merencanakan skor PC lain tidak menunjukkan tren yang jelas, jadi saya membiarkannya tidak berubah.

Karena skor PC terpusat, tren melewati pusat massa sampel PC1 dan menyesuaikan tren hanya sesuai dengan memperkirakan satu parameter.

Langkah 3. Plot sebar pasangan tidak menunjukkan struktur yang jelas, jadi saya memodelkan PC sebagai independen:

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

pasangkan sebar plot PC setelah menghapus tren

Langkah 4. Ada periodisitas yang jelas pada PC1, dengan lag 13 (seperti yang disarankan oleh pertanyaan). Ini dapat dilihat dengan berbagai cara. Sebagai contoh, autokorelasi lag 13 tampak berbeda secara signifikan dari 0 dalam suatu korelogram:

> acf(y2[,1])

ACF PC1 setelah menghapus drift

(Periodisitas secara visual lebih mencolok ketika memplot data bersama dengan salinan yang digeser.)

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

Sebagai tes masuk akal, saya memplot data yang diberikan (hitam), bersama dengan lintasan acak model saya untuk PC1 (biru), berkisar satu tahun ke depan:

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

lintasan simulasi untuk PC1

Bagian jalur yang disimulasikan biru terlihat seperti kelanjutan data yang wajar. Korelasi untuk PC2 dan PC3 tidak menunjukkan korelasi yang signifikan, jadi saya memodelkan komponen ini sebagai white noise. PC4 memang menunjukkan korelasi, tetapi memberikan kontribusi sangat sedikit terhadap total varians yang tampaknya tidak layak untuk dimodelkan, dan saya juga memodelkan komponen ini sebagai white noise.

Di sini kita telah memasang dua parameter lagi. Ini membawa kita ke total sembilan parameter dalam model (termasuk PCA), yang tampaknya tidak masuk akal ketika kita mulai dengan data yang terdiri dari 112 angka.

Ramalan cuaca. Kita bisa mendapatkan perkiraan numerik dengan tidak mengeluarkan derau (untuk mendapatkan nilai tengah) dan membalikkan 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

Ketidakpastian band dapat diperoleh baik secara analitis atau hanya menggunakan 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")
}

pita ketidakpastian untuk perkiraan

W


1
Pendekatan yang menarik. Biarkan saya mencerna ini sedikit.
Dimitriy V. Masterov
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.