close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Generación de modelos ARIMA simulados por ingeniería inversa

La generación de modelos ARIMA simulados por ingeniería inversa tiene una gran utilidad en el desarrollo de aplicaciones relativas a modelos ARIMA pues permite contrastar de forma masiva los resultados teóricos con los reales.

Para ser más exactos se trata de modelos ARIMA multi-estacionales que se generan automáticamente a partir de unos pocos parámetros dados por el usuario, como las periodicidades estacionales, los grados máximos de diferencias, partes AR y MA, longitud, fechado y fecha final de la serie, desviación típica teórica, etc.

Pongamos que queremos generar una serie ARIMA diaria con estacionalidad semanal.

NameBlock rndArima = ArimaTools::@RandArima::Create([[1,7]]);

NameBlock rndArimaSer = { ArimaTools::@RandArimaSeries::Draw(
    NameBlock rndArima, 
    Real sigma = 1, 
    Real N=1000,
    TimeSet Diario,
    Date lastDate=Today,
    Real maxNoiseSigmaRatio=5 )};

La primera sentecia construye una instancia de la clase ArimaTools::@RandArima que es un generador de modelos al que hay que pasarles las periodicidades regular (1) y estacional (7).

source:tolp/OfficialTolArchiveNetwork/ArimaTools/doc/wiki/rndArima.png

La segunda construye una instancia de la clase ArimaTools::@RandArima que contiene la serie de 1000 datos de ruido ARIMA con residuos de desviación típica igual a 1, fechado diario, fecha final el día de hoy y máximo ratio de desviación igual 5. Esto último significa que el cociente entre la desviación de la serie con una diferencia regular como máximo no puede ser mayor que 5 veces la desviación teórica. El objetivo es no generar modelos con patologías graves. Tambiém incluye la serie de ruido diferenciado, y la de residuos y sus versiones matriciales, así como el modelo ARIMA tabular, los polinomios y los grados conjuntos y la etiqueta estandarizada:

source:tolp/OfficialTolArchiveNetwork/ArimaTools/doc/wiki/rndArimaSer.png

source:tolp/OfficialTolArchiveNetwork/ArimaTools/doc/wiki/arima_series.gif

Si no nos interesasen las series y sólo quisiéramos obtener la estrutura ARIMA llamaríamos al método

Set rndArima::draw(?);

que es el mismo al que llama internamente ArimaTools::@RandArimaSeries::Draw y que nos devolverá una tabla de filas con estructura

Struct @ARIMAStruct { 
  Real Periodicity; 
  Polyn AR; 
  Polyn MA; 
  Polyn DIF; 
} 

y grados y coeficientes aleatorios como estos tres ejemplos

PeriodicityARMADIF
11-0.108083385881461*B-0.661191867198795*B^21+1.84687137714305*B+0.913258229847997*B^21-B
71-0.500501212900947*B^7-0.159991535823792*B^141+1.52869164096904*B^7+0.945664106402546*B^141
PeriodicityARMADIF
11+0.276724013923667*B1-0.608476788569242*B1-B
71+0.669428730927173*B^7+0.551377256400883*B^1411-B^7
PeriodicityARMADIF
11+1.71064830487263*B+0.7920374982059*B^21+0.1186861861303*B-0.577400461304933*B^21
71+0.852601298354566*B^711

Se puede establecer un grado mínimo y máximo para cada polinomio, AR, MA y DIF de cada estacionalidad. Para los polinomios AR y MA se puede configurar también el mínimo y el máximo de los módulos de los inversos de las raíces y si se desean raíces reales, reales positivas o si se admiten raíces complejas.

Los valores configurables tienen valores por defecto que normalmente sirven a efectos generales.

Para los polinomios AR y MA los valores por defecto son:

period_.rootsType_.min.degree_.min.invRootModule_.max.invRootModule_.max.degree
1RealOrComplexRoots00.10.995
7RealOrComplexRoots00.10.993

y para los de diferencias :

period_.min.degree_.max.degree
102
701

Si por ejemplo queremos forzar que las raíces AR regulares sean reales positivas y que el grado máximo MA estacinal sea 2 haríamos lo siguiente:

NameBlock rndArima = ArimaTools::@RandArima::Create([[1,7]]);
Text (rndArima::factor[1])::ar::rootsType := ArimaTools::@RandStationary::RootsType::RealPositiveRoots;
Real (rndArima::factor[2])::ma::max.degree := 2;
Set rndArima::rebuild(?);
NameBlock rndArimaSer = ArimaTools::@RandArimaSeries::Draw(rndArima,1,1000,Diario,Today,5);

La llamada al método rebuild asegura que toda la información del generador es consistente.

Last modified 12 years ago Last modified on Nov 7, 2012, 10:03:18 AM