= 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. {{{ #!java 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). [[Image(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: [[Image(source:tolp/OfficialTolArchiveNetwork/ArimaTools/doc/wiki/rndArimaSer.png)]] [[Image(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 {{{ #!java Set rndArima::draw(?); }}} que es el mismo al que llama internamente {{{ArimaTools::@RandArimaSeries::Draw}}} y que nos devolverá una tabla de filas con estructura {{{ #!java Struct @ARIMAStruct { Real Periodicity; Polyn AR; Polyn MA; Polyn DIF; } }}} y grados y coeficientes aleatorios como estos tres ejemplos ||{{{Periodicity}}}||{{{AR}}}||{{{MA}}}||{{{DIF}}}|| ||{{{1}}}||{{{1-0.108083385881461*B-0.661191867198795*B^2}}}||{{{1+1.84687137714305*B+0.913258229847997*B^2}}}||{{{1-B}}}|| ||{{{7}}}||{{{1-0.500501212900947*B^7-0.159991535823792*B^14}}}||{{{1+1.52869164096904*B^7+0.945664106402546*B^14}}}||{{{1}}}|| ||{{{Periodicity}}}||{{{AR}}}||{{{MA}}}||{{{DIF}}}|| ||{{{1}}}||{{{1+0.276724013923667*B}}}||{{{1-0.608476788569242*B}}}||{{{1-B}}}|| ||{{{7}}}||{{{1+0.669428730927173*B^7+0.551377256400883*B^14}}}||{{{1}}}||{{{1-B^7}}}|| ||{{{Periodicity}}}||{{{AR}}}||{{{MA}}}||{{{DIF}}}|| ||{{{1}}}||{{{1+1.71064830487263*B+0.7920374982059*B^2}}}||{{{1+0.1186861861303*B-0.577400461304933*B^2}}}||{{{1}}}|| ||{{{7}}}||{{{1+0.852601298354566*B^7}}}||{{{1}}}||{{{1}}}|| 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}}}|| ||{{{1}}}||{{{RealOrComplexRoots}}}||{{{0}}}||{{{0.1}}}||{{{0.99}}}||{{{5}}}|| ||{{{7}}}||{{{RealOrComplexRoots}}}||{{{0}}}||{{{0.1}}}||{{{0.99}}}||{{{3}}}|| y para los de diferencias : ||{{{period}}}||{{{_.min.degree}}}||{{{_.max.degree}}}|| ||{{{1}}}||{{{0}}}||{{{2}}}|| ||{{{7}}}||{{{0}}}||{{{1}}}|| 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: {{{ #!java 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.