Tengo cuatro series temporales diferentes de mediciones por hora:
- El consumo de calor dentro de una casa.
- La temperatura fuera de la casa
- La radiación solar
- La velocidad del viento
Quiero poder predecir el consumo de calor dentro de la casa. Existe una clara tendencia estacional, tanto anualmente como a diario. Dado que existe una clara correlación entre las diferentes series, quiero ajustarlas usando un modelo ARIMAX. Esto se puede hacer en R, utilizando la función arimax del paquete TSA.
Intenté leer la documentación sobre esta función y leer sobre las funciones de transferencia, pero hasta ahora, mi código:
regParams = ts.union(ts(dayy))
transferParams = ts.union(ts(temp))
model10 = arimax(heat,order=c(2,1,1),seasonal=list(order=c(0,1,1),period=24),xreg=regParams,xtransf=transferParams,transfer=list(c(1,1))
pred10 = predict(model10, newxreg=regParams)
me da
donde la línea negra son los datos medidos reales, y la línea verde es mi modelo ajustado en comparación. No solo no es un buen modelo, sino que claramente algo está mal.
Admitiré que mi conocimiento de los modelos ARIMAX y las funciones de transferencia es limitado. En la función arimax (), (por lo que he entendido), xtransf es la serie de tiempo exógena que quiero usar (usando funciones de transferencia) para predecir mi serie de tiempo principal. Pero, ¿cuál es la diferencia entre xreg y xtransf realmente?
En general, ¿qué he hecho mal? Me gustaría poder obtener un mejor ajuste que el que se obtiene de lm (heat ~ temp radi wind * time).
Ediciones: Basado en algunos de los comentarios, eliminé la transferencia y agregué xreg en su lugar:
regParams = ts.union(ts(dayy), ts(temp), ts(time))
model10 = arimax(heat,order=c(2,1,1),seasonal=list(order=c(0,1,1),period=24),xreg=regParams)
donde dayy es el "día número del año" y time es la hora del día. La temperatura vuelve a ser la temperatura exterior. Esto me da el siguiente resultado:
lo cual es mejor, pero no es lo que esperaba ver.
fuente
predict()
se usa para pronosticar, mientrasfitted()
devuelve el ajuste del modelo durante el período histórico. Si desea ayuda más específica, debe publicar un ejemplo reproducible con algún código.heat
aumentar linealmente con la hora del día, y luego retroceder cuando la hora vuelve a 1. Si usa variables ficticias, cada hora del día tendrá su propio efecto. Ejecute mi código de ejemplo y preste especial atención a cómo construyo mi objeto xreg.stats
yforecast
es que no se ajustan a las funciones de transferencia de Prober. La documentación de lastats::arima
función establece lo siguiente: si se incluye un término xreg, se ajusta una regresión lineal (con un término constante si include.mean es verdadero y no hay diferencia) con un modelo ARMA para el término de error. Entonces, si realmente necesita ajustar las funciones de transferencia, parece que laTSA::arimax
función es el camino a seguirR
.He estado usando R para hacer pronósticos de carga durante un tiempo y puedo sugerirle que use el
forecast
paquete y sus funciones invaluables (comoauto.arima
).Puede construir un modelo ARIMA con el siguiente comando:
con
y
su predicción (supongodayy
),order
el orden de su modelo (considerando la estacionalidad) yexogenous_data
su temperatura, radiación solar, etc. La función loauto.arima
ayuda a encontrar el orden óptimo del modelo. Puede encontrar un breve tutorial sobre el paquete de "pronóstico" aquí .fuente
Personalmente, no entiendo las funciones de transferencia, pero creo que obtuviste
xtransf
yxreg
revertiste. Al menos en la base de Rarima
esxreg
que contiene sus variables exógenas. Tengo la impresión de que una función de transferencia describe cómo (los datos rezagados afectan los valores futuros) en lugar de qué .Intentaría usar
xreg
para sus variables exógenas, tal vez usandoarima
ifarimax
exige una función de transferencia. El problema es que su modelo es diario, pero sus datos tienen una estacionalidad diaria y anual, y no estoy seguro en este momento si una primera diferencia (laorder=(*, 1, *)
) se encargará de eso o no. (Ciertamente no obtendrá pronósticos mágicos durante todo el año de un modelo que solo considera la estacionalidad diaria).PD: ¿Cuál es el
time
que usas en tulm
? ¿Hora de reloj literal o un número de observación de 1 arriba? Creo que podría obtener algo utilizando un modelo de efectos mixtos (lmer
en ellme4
paquete), aunque no he descubierto si hacerlo representa correctamente la autocorrelación que ocurrirá en una serie de tiempo. Si no se tiene en cuenta, lo quelm
no es así, es posible que obtenga un ajuste interesante, pero su concepto de cuán precisa es su predicción será demasiado optimista.fuente