uniTimeSeries arima

Gestión de Series Temporales con Valores Faltantes al Inicio y al Final

Scénario de test & Cas d'usage

Contexto empresarial

Una compañía farmacéutica analiza datos de ventas semanales de un nuevo medicamento. Debido a problemas en la recopilación de datos, las primeras y últimas semanas del período de análisis tienen valores faltantes. El objetivo es probar cómo la acción `arima` maneja estos datos incompletos utilizando la opción `trimId`.
Sobre el conjunto : uniTimeSeries

Análisis y pronóstico de series temporales univariantes.

Descubrir todas las acciones de uniTimeSeries
Preparación de datos

Crea una serie de ventas semanales con valores nulos (`.`) en las primeras 3 semanas y en las últimas 2 semanas para simular datos incompletos.

¡Copiado!
1DATA mycas.ventas_incompletas;
2 FORMAT semana date9.;
3 DO i = 1 to 52;
4 semana = intnx('week', '01jan2024'd, i);
5 IF i <= 3 or i > 50 THEN ventas = .;
6 ELSE ventas = 200 + i*5 + rannor(888)*20;
7 OUTPUT;
8 END;
9RUN;

Étapes de réalisation

1
Carga de la tabla con datos faltantes en CAS.
¡Copiado!
1PROC CAS;
2 TABLE.loadTable /
3 caslib='CASUSER' path='ventas_incompletas.sashdat'
4 casOut={name='ventas_incompletas', replace=true};
5RUN;
2
Primer intento: Ejecución de arima con la opción por defecto `trimId='NONE'`. Se espera que la acción genere un error o una advertencia, ya que no puede manejar valores faltantes al principio o al final de la serie.
¡Copiado!
1uniTimeSeries.arima /
2 TABLE={name='ventas_incompletas'},
3 timeId={name='semana'},
4 interval='week',
5 series={
6 {name='ventas', model={
7 {estimate={p=1, diff=1, q=1}},
8 {forecast={lead=4}}
9 }}
10 };
3
Segundo intento: Ejecución de arima con `trimId='BOTH'` para que la acción recorte automáticamente los valores faltantes en ambos extremos de la serie antes del análisis.
¡Copiado!
1uniTimeSeries.arima /
2 TABLE={name='ventas_incompletas'},
3 timeId={name='semana'},
4 interval='week',
5 trimId='BOTH',
6 series={
7 {name='ventas', model={
8 {estimate={p=1, diff=1, q=1}},
9 {forecast={lead=4}}
10 }}
11 },
12 outFor={name='pronostico_recortado', replace=true},
13 outStat={name='estadisticas_recortado', replace=true};
4
Verificación de que la tabla de pronóstico fue creada en el segundo intento.
¡Copiado!
1TABLE.tableInfo / TABLE={name='pronostico_recortado'};
2RUN;
3QUIT;
4 

Resultado esperado


El primer intento (paso 2) debe fallar o producir un mensaje de error en el log de SAS indicando que la serie no se puede procesar debido a los valores faltantes. El segundo intento (paso 3) con `trimId='BOTH'` debe ejecutarse correctamente. Se crearán las tablas `pronostico_recortado` y `estadisticas_recortado`. El modelo se ajustará utilizando solo el subconjunto de datos válidos (semanas 4 a 50), y el pronóstico se generará a partir del final de esta serie recortada.