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.heataumentar 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.statsyforecastes que no se ajustan a las funciones de transferencia de Prober. La documentación de lastats::arimafunció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::arimaxfunció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
forecastpaquete y sus funciones invaluables (comoauto.arima).Puede construir un modelo ARIMA con el siguiente comando:
con
ysu predicción (supongodayy),orderel orden de su modelo (considerando la estacionalidad) yexogenous_datasu temperatura, radiación solar, etc. La función loauto.arimaayuda 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
xtransfyxregrevertiste. Al menos en la base de Rarimaesxregque 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
xregpara sus variables exógenas, tal vez usandoarimaifarimaxexige 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
timeque 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 (lmeren ellme4paquete), 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 quelmno es así, es posible que obtenga un ajuste interesante, pero su concepto de cuán precisa es su predicción será demasiado optimista.fuente