预测短时间序列的最小愚蠢方法


16

我需要为第29个时间单位预测以下4个变量。我有大约2年的历史数据,其中1和14和27都是同一时期(或一年中的某个时间)。最后,我对w ^wdwC进行了Oaxaca-Blinder风格的分解p

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 ^可以近似pwd+1个-pwC加上测量误差,但是你可以看到,w ^总是大大超过因为浪费,逼近误差,或盗窃数量。

这是我的两个问题。

  1. 我的第一个想法是尝试以1个滞后和一个外生时间和周期变量对这些变量进行矢量自回归,但是鉴于我只有很少的数据,这似乎是一个坏主意。是否有任何时间序列方法(1)面对“微观数字”表现更好,并且(2)能够利用变量之间的联系?

  2. 另一方面,VAR的特征值的模数都小于1,因此我认为我不必担心非平稳性(尽管Dickey-Fuller检验表明并非如此)。除了p,预测似乎与具有时间趋势的灵活单变量模型的预测基本一致。w ^p较低。滞后系数似乎大部分都合理,尽管在大多数情况下它们并不重要。线性趋势系数很显着,一些周期虚拟变量也很重要。仍然,从理论上讲,有没有什么理由比VAR模型更喜欢这种简单的方法?

全面披露:我在Statalist上问了类似的问题,没有回应。


嗨,在这里,您能否围绕您希望进行的分解提供更多背景信息,因为我还没有看到它适用于时间序列数据?
米歇尔(Michelle)

我打破了变化转换成以如下方式组成:w ^-w ^=pwd-wd+1个-pwC-wC+wd-wCp-p+ϵ-ϵ,其中素数表示变量的当前值。
Dimitriy V. Masterov 2012年

嗯,如何在回归之前先排除异常值?
2013年

您需要什么精度等级?我问是因为您知道,您可以使用ARIMA模型并获得非常低的MSE。但是,由于这些模型通常使用最大似然来拟合,因此几乎可以肯定您会过度拟合。贝叶斯模型在处理少量数据时很健壮,但是我认为您将获得比ARIMA模型高一个数量级的MSE。
罗伯·史密斯

Answers:


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

w ^=0.234wd-1.152wC-8.842p

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)

绘制其他PC的分数并没有显示明显的趋势,因此我将其保持不变。

由于PC得分居中,因此趋势穿过PC1样本的质心,而拟合趋势仅对应于估计一个参数。

步骤3.对散点图显示没有清晰的结构,因此我将PC建模为独立的:

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

趋势消除后的PC对散点图

步骤4. PC1中存在明显的周期性,滞后13(如问题所建议)。可以用不同的方式看到这一点。例如,滞后13自相关在相关图中显示为与0显着不同:

> acf(y2[,1])

消除漂移后PC1的ACF

(将数据与移位后的副本一起绘制时,周期性在视觉上更加醒目。)

ÿŤ+131个=α13ÿŤ1个+σεŤ+13εŤ是独立的并且是标准正态分布的(即,这是一个AR(13)过程,大多数系数固定为0)。一种简单的估算方法α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的模拟轨迹

蓝色的模拟路径看起来像是数据的合理延续。PC2和PC3的相关图没有显着相关性,因此我将这些分量建模为白噪声。PC4确实显示出相关性,但是对总方差的贡献却很小,以至于似乎不值得建模,而且我也将此组件建模为白噪声。

在这里,我们又拟合了两个参数。这使我们在模型(包括PCA)中共有9个参数,当我们开始使用由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

不确定带可以通过分析或简单地使用蒙特卡洛获得:

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.