La forma menos estúpida de pronosticar una breve serie de tiempo multivariante


16

Necesito pronosticar las siguientes 4 variables para la 29a unidad de tiempo. Tengo aproximadamente 2 años de datos históricos, donde 1 y 14 y 27 son todos del mismo período (o época del año). Al final, estoy haciendo una descomposición de estilo Oaxaca-Blinder en , w d , w c y p .WwrewCpag

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

Creo que puede ser aproximado por p w d + ( 1 - p ) w c más error de medición, pero puede ver que W siempre excede considerablemente esa cantidad debido a desperdicio, error de aproximación o robo.Wpagwre+(1-pag)wCW

Aquí están mis 2 preguntas.

  1. Lo primero que pensé fue intentar la autorregresión vectorial en estas variables con 1 retraso y una variable de tiempo y período exógena, pero parece una mala idea dada la poca información que tengo. ¿Existen métodos de series temporales que (1) funcionen mejor frente a la "micro-numerosidad" y (2) puedan explotar el vínculo entre las variables?

  2. Por otro lado, los módulos de los valores propios para el VAR son todos menores que 1, por lo que no creo que deba preocuparme por la no estacionariedad (aunque la prueba de Dickey-Fuller sugiere lo contrario). Las predicciones parecen estar en línea con las proyecciones de un modelo univariado flexible con una tendencia temporal, a excepción de y p , que son más bajas. Los coeficientes en los rezagos parecen en su mayoría razonables, aunque en su mayor parte son insignificantes. El coeficiente de tendencia lineal es significativo, como lo son algunos de los dummies de período. Aún así, ¿hay alguna razón teórica para preferir este enfoque más simple sobre el modelo VAR?Wpag

Revelación completa: hice una pregunta similar sobre Statalist sin respuesta.


Hola, ¿podría darnos más contexto sobre la descomposición que desea hacer, ya que no he visto que se aplique a los datos de series temporales?
Michelle

W-W=pag(wre-wre)+(1-pag)(wC-wC)+(wre-wC)(pag-pag)+(ϵ-ϵ) , donde los números primos denotan el valor actual de las variables.
Dimitriy V. Masterov

hmmm, ¿qué tal si excluimos los valores atípicos primero, antes de la regresión?
athos

¿Qué nivel de precisión requiere? Lo pregunto porque, como saben, pueden usar modelos ARIMA y obtener un MSE muy bajo. Sin embargo, dado que esos modelos generalmente se ajustan utilizando la máxima probabilidad, es casi seguro que se sobreajustará. Los modelos bayesianos son robustos cuando se trata con pocos datos, pero creo que obtendrá un MSE un orden de magnitud mayor que en los modelos ARIMA.
Robert Smith

Respuestas:


2

Entiendo que esta pregunta ha estado presente aquí durante años, pero aún así, las siguientes ideas pueden ser útiles:

  1. Si hay vínculos entre variables (y la fórmula teórica no funciona tan bien), se puede usar PCA para buscar dependencias (lineales) de una manera sistemática. Mostraré que esto funciona bien para los datos dados en esta pregunta.

  2. Dado que no hay muchos datos (112 números en total), solo se pueden estimar unos pocos parámetros del modelo ( por ejemplo, ajustar los efectos estacionales completos no es una opción), y probar un modelo personalizado puede tener sentido.

Así es como haría un pronóstico, siguiendo estos principios:

Paso 1. Podemos usar PCA para revelar dependencias en los datos. Usando R, con los datos almacenados en 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,234wre-1.152wC-8.842pag .)

4 4×4 4

Paso 2. Hay una tendencia clara en PC1:

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

tendencia de PC1

Creo una copia de las puntuaciones de PC con esta tendencia eliminada:

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

Trazar los puntajes de las otras PC no revela tendencias claras, así que las dejo sin cambios.

Dado que las puntuaciones de PC están centradas, la tendencia pasa por el centro de masa de la muestra de PC1 y ajustar la tendencia solo corresponde a la estimación de un parámetro.

Paso 3. Un diagrama de dispersión de pares no muestra una estructura clara, por lo que modelizo las PC como independientes:

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

par de gráficos de dispersión de PC después de eliminar la tendencia

Paso 4. Hay una periodicidad clara en PC1, con retraso 13 (como lo sugiere la pregunta). Esto se puede ver de diferentes maneras. Por ejemplo, la autocorrelación de retraso 13 aparece como significativamente diferente de 0 en un correlograma:

> acf(y2[,1])

ACF de PC1 después de eliminar la deriva

(La periodicidad es visualmente más llamativa al trazar los datos junto con una copia desplazada).

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

Como prueba de plausibilidad, trazo los datos dados (negro), junto con una trayectoria aleatoria de mi modelo para PC1 (azul), que se extiende dentro de un año:

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

una trayectoria simulada para PC1

La ruta azul simulada parece una continuación razonable de los datos. Los correlogramas para PC2 y PC3 no muestran correlaciones significativas, por lo que modelo estos componentes como ruido blanco. PC4 muestra correlaciones, pero contribuye tan poco a la variación total que parece que no vale la pena modelar, y también modelo este componente como ruido blanco.

Aquí hemos ajustado dos parámetros más. Esto nos lleva a un total de nueve parámetros en el modelo (incluido el PCA), lo que no parece absurdo cuando comenzamos con datos que consisten en 112 números.

Pronóstico. Podemos obtener un pronóstico numérico omitiendo el ruido (para obtener la media) e invirtiendo el 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

Las bandas de incertidumbre se pueden obtener analíticamente o simplemente usando 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")
}

bandas de incertidumbre para el pronóstico

W


1
Enfoque interesante Déjame digerir esto un poco.
Dimitriy V. Masterov
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.