Kısa çok değişkenli zaman serilerini tahmin etmenin en aptal yolu


17

29 ünite için aşağıdaki 4 değişkeni tahmin etmem gerekiyor. Kabaca 2 yıllık geçmiş verilerim var, burada 1 ve 14 ve 27 aynı dönem (ya da yılın zamanı). Sonunda, bir Oaxaca-kör tarzı ayrışması yaptığım , d , ağırlık c ve p .Wwdwcp

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

p w d + ( 1 - p ) w c artı ölçüm hatası ile tahmin edilebileceğine inanıyorum , ancak W'nin atık, yaklaşık hata veya hırsızlık nedeniyle bu miktarı her zaman önemli ölçüde aştığını görebilirsiniz .Wpwd+(1-p)wcW

İşte 2 sorum.

  1. İlk düşüncem, bu değişkenler üzerinde 1 gecikme ve dışsal bir zaman ve dönem değişkeni ile vektör otoregresyonunu denemekti, ancak ne kadar az veriye sahip olduğum göz önüne alındığında bu kötü bir fikir gibi görünüyor. (1) "mikro-sayısallık" ve (2) değişkenler arasındaki bağlantıdan yararlanabilecek daha iyi performans gösteren herhangi bir zaman serisi yöntemi var mı?

  2. Öte yandan, VAR için özdeğerlerin modülleri 1'den azdır, bu yüzden durağanlık hakkında endişelenmem gerektiğini düşünmüyorum (Dickey-Fuller testi aksini gösteriyor). Tahminler , daha düşük olan ve p hariç, zaman eğilimine sahip esnek bir tek değişkenli modelden gelen projeksiyonlarla uyumlu görünmektedir . Gecikmelerdeki katsayılar çoğunlukla makul görünmektedir, ancak çoğunlukla önemsizdir. Doğrusal eğilim katsayısı ve bazı dönem mankenleri önemlidir. Yine de, VAR modeline kıyasla bu daha basit yaklaşımı tercih etmek için teorik nedenler var mı?Wp

Tam açıklama: Benzer bir soruyu yanıtsız Statalist hakkında sordum .


Merhaba, zaman serisi verilerine uygulandığını görmediğim için yapmak istediğiniz ayrışma hakkında biraz daha bağlam verebilir misiniz?
Michelle

W'-W=p'*(wD'-wD)+(1-p')*(wC'-wC)+(wD-wC)*(p'-p)+(ε'-ε)Burada asal değerler değişkenlerin geçerli değerini gösterir.
Dimitriy V.Masterov

hmmm, regresyondan önce ilk aykırı değerleri hariç tutmaya ne dersiniz?
athos

Ne düzeyde hassasiyet istiyorsunuz? Soruyorum çünkü bildiğiniz gibi ARIMA modellerini kullanabilir ve çok düşük bir MSE alabilirsiniz. Bununla birlikte, bu modeller genellikle maksimum olasılık kullanılarak sığdığından, fazla giyeceğiniz neredeyse kesindir. Bayesian modelleri çok az veriyle uğraşırken sağlamdır, ancak bir MSE'ye ARIMA modellerinden daha yüksek bir büyüklük derecesi alacağınızı düşünüyorum.
Robert Smith

Yanıtlar:


2

Bu sorunun yıllardır burada oturduğunu anlıyorum, ancak yine de aşağıdaki fikirler yararlı olabilir:

  1. Değişkenler arasında bağlantılar varsa (ve teorik formül çok iyi çalışmazsa), PCA (doğrusal) bağımlılıkları sistematik bir şekilde aramak için kullanılabilir. Bunun, bu soruda verilen veriler için iyi çalıştığını göstereceğim.

  2. Çok fazla veri olmadığı göz önüne alındığında (toplamda 112 sayı), sadece birkaç model parametresi tahmin edilebilir ( örn. Tam mevsimsel efektlerin takılması bir seçenek değildir) ve özel bir modelin denenmesi mantıklı olabilir.

Bu ilkeleri izleyerek nasıl tahmin edeceğim:

Aşama 1. PCA'yı verilerdeki bağımlılıkları ortaya çıkarmak için kullanabiliriz. Verileri depolanmış olarak R kullanarak 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

Bu, ilk iki temel bileşenin varyansın% 97'sini açıkladığını ve üç bileşen kullanmanın varyansın% 99,4'ünü kapsadığını gösterir. Bu nedenle, ilk iki veya üç PC için bir model yapmak yeterli olacaktır. (Veriler yaklaşık olarakW=0.234wd-1,152wc-8,842p .)

4x4

Adım 2. PC1'de belirgin bir eğilim var:

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

PC1 trendi

Bu eğilim kaldırıldı ile PC puanlarının bir kopyasını oluşturmak:

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

Diğer bilgisayarların puanlarını çizmek belirgin bir eğilim göstermediği için bunları değiştirmeden bırakıyorum.

PC skorları ortalandığından, trend PC1 örneğinin kütle merkezinden geçer ve trendin uyumu sadece bir parametrenin tahmin edilmesine karşılık gelir.

Adım 3. Bir çift dağılım grafiği net bir yapı göstermez, bu yüzden PC'leri bağımsız olarak modellenirim:

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

eğilimi çıkardıktan sonra PC'lerin dağılım grafiğini eşleştirin

Adım 4. PC1'de gecikme 13 ile birlikte açık bir periyodiklik vardır (soru tarafından önerildiği gibi). Bu farklı şekillerde görülebilir. Örneğin, gecikme 13 otokorelasyonu, bir korelogramda 0'dan önemli ölçüde farklıdır:

> acf(y2[,1])

Drift çıkarıldıktan sonra PC1'in ACF'si

(Verileri kaydırılan bir kopyayla birlikte çizerken periyodiklik görsel olarak daha çarpıcıdır.)

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

Bir güvenilirlik testi olarak, verilen verileri (siyah), PC1 (mavi) için modelimin rastgele bir yörüngesiyle birlikte, bir yıl geleceğe kadar çiziyorum:

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 için simüle edilmiş bir yörünge

Mavi, simüle edilmiş yol parçası, verilerin makul bir şekilde devam etmesine benziyor. PC2 ve PC3 için korelogramlar anlamlı bir korelasyon göstermemektedir, bu yüzden bu bileşenleri beyaz gürültü olarak modelledim. PC4 korelasyon gösterir, ancak toplam varyansa o kadar az katkıda bulunur ki modellemeye değmez ve ben de bu bileşeni beyaz gürültü olarak modellenir.

Burada iki parametre daha ekledik. Bu da bizi modelde (PCA dahil) toplam dokuz parametreye getiriyor, ki bu 112 rakamdan oluşan verilerle başladığımızda saçma görünmüyor.

Tahmin. Gürültüyü bırakarak (ortalama elde etmek için) ve PCA'yı ters çevirerek sayısal bir tahmin alabiliriz:

> 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

Belirsizlik bantları, analitik olarak veya sadece Monte Carlo kullanılarak elde edilebilir:

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

tahmin için belirsizlik grupları

W


1
İlginç bir yaklaşım. Biraz sindireyim.
Dimitriy V. Masterov
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.