Bibliotecas: Statistical Functions

 

Statistical Functions:

Conjunto de funciones estadísticas, que permiten calcular ciertos valores que describen las series temporales.

Autor: Haruna Nakamura

 
¿Cómo se aplica?
 
ziad8978:
¿Cómo se implementa?

Gracias por interesarte en mi librería. Utilizarla es muy fácil, la mayoría de las veces se opera con matrices de 1 dimensión.

Por ejemplo, puede eliminar fácilmente la tendencia lineal de la serie temporal con la función detrend:
detrend(timeSerie, detrendResultArray);

timeSerie es una matriz llena de precios y detrendResultArray debe ser una matriz vacía en la que se almacenarán los resultados.
Por lo tanto, después de llamar a la función tendrá una matriz con series temporales detrend en la que puede realizar análisis adicionales (por ejemplo, comprobar si la serie es estacionaria).

Por ejemplo, suponiendo que usted tiene matriz con Currency1 (posiblemente hacia atrás) se puede predecir su próximo valor con:

double detrendedSerie[];
double forecastedValue;

//hacer que Currency1 se almacene hacia atrás (el último valor de la matriz es el precio más reciente)
detrend(Currency1, detrendedSerie);

if(dickeyFuller(detrendedSerie)){
  forecastedValue = AR1(detrendedSerie); 
}

if(forecastedValue > detrendedSerie[ArraySize(detrendedSerie)-1]){
  //Comprar
}else{
  //Vender
}

Otra función interesante disponible es la integral con signo. Usarla en su forma actual es muy fácil, sólo tienes que llamar a la función definir límites y grado polinominal (puede ser pequeño),
para obtener una buena aproximación de la integral dada. También puedes editar la función "foo" para integrar funciones distintas de f(x) = x.

 
ziad8978:
¿Cómo se aplica?
 
ziad8978:
¿Cómo se aplica?
 
tinakorn kunchai:
Archivos adjuntos:
 
¡¡¡Muchas gracias, Herajika, por compartir este código!!!
 
Rodrigo Malacarne:
¡¡¡Muchas gracias, Herajika, por compartir este código!!!
¡Me alegra saber que te gusta! Por favor pega aquí un enlace si creas algún EA/Indicador usando esta librería.
 
Haruna Nakamura:
Me alegra saber que te gusta. Por favor, pega aquí un enlace si creas algún EA/Indicador usando esta librería.

HolaHerajika,

Estoy intentando replicar las estadísticas de la prueba Dickey-Fuller del código que compartiste con otro software estadístico/matemático. En concreto, estoy utilizando Wolfram Mathematica para ello.

Por favor, considere los datos del artículo original que ha utilizado (de Scribd):

double data[] = {6109.58, 6157.84, 5850.22, 5976.63, 6382.12, 6437.74, 6877.68, 6611.79, 7040.23, 6842.36, 6512.78, 6699.44, 
                 6700.20, 7092.49, 7558.50, 7664.99, 7589.78, 7366.89, 6931.43, 5530.71, 5611.90, 6208.28, 6343.87, 6485.84};

Con el fin de obtener las estadísticas de prueba utilizando el código, he eliminado el comentario antes de la función Imprimir, como se puede ver en el código de abajo:

bool dickeyFuller(double &arr[])
  {
// n=25 50 100 250 500 >500
// {-2.62, -2.60, -2.58, -2.57, -2.57, -2.57};
   double cVal;
   bool result;
   int n=ArraySize(arr);
   double tValue;
   double corrCoeff;
   double copyArr[];
   double difference[];
   ArrayResize(difference,n-1);
//---
   for(int i=0; i<n-1; i++)
     {
      difference[i]=arr[i+1]-arr[i];
     }
//---
   ArrayCopy(copyArr,arr,0,0,n-1);
   corrCoeff=correlation(copyArr,difference);
   tValue=corrCoeff*MathSqrt((n-2)/1-MathPow(corrCoeff,2));
//---
   if(n<25)
     {
      cVal=-2.62;
        }else{
      if(n>=25 && n<50)
        {
         cVal=-2.60;
           }else{
         if(n>=50 && n<100)
           {
            cVal=-2.58;
              }else{
            cVal=-2.57;
           }
        }
     }
   Print(tValue); //--- Estadísticas de prueba ??
   result=tValue>cVal;
   return(result);
  }

Como he dicho, estoy más interesado en las estadísticas de la prueba en sí, en lugar de sólo en la conclusión de la prueba. En este sentido, usando el código que has compartido obtengo:

void OnStart()
  {
//--- FUENTE: http://pt.scribd.com/doc/80877200/How-to-do-a-Dickey-Fuller-Test-using-Excel#
   double data[] = {6109.58, 6157.84, 5850.22, 5976.63, 6382.12, 6437.74, 6877.68, 6611.79, 7040.23, 6842.36, 6512.78, 6699.44, 
                     6700.20, 7092.49, 7558.50, 7664.99, 7589.78, 7366.89, 6931.43, 5530.71, 5611.90, 6208.28, 6343.87, 6485.84};
//---
   dickeyFuller(data);
  }

Como ahora estoy imprimiendo la línea con las estadísticas de la prueba, obtengo:

-1.719791886975595

Sin embargo, el artículo original afirma que el estadístico t es 1,8125.

Sin embargo, cuando utilizo Wolfram Mathematica en el mismo conjunto de datos, obtengo:


¿Tienes alguna idea de cuál podría ser la causa de que 3 pruebas den 3 resultados diferentes?

Saludos,
Malacarne

 

Hola! En cuanto a la diferencia entre el resultado del artículo(http://pt.scribd.com/doc/80877200/How-to-do-a-Dickey-Fuller-Test-using-Excel#) y mi aplicación,
tenga en cuenta que en el sitio mencionado, hay algún problema con los signos displaing (+, -). Por lo tanto, en realidad el resultado presentado en el artículo es -1.8125.

En cuanto a la diferencia con Wolfram Mathematica, tal vez diferentes implementaciones utilizan diferentes valores críticos y calcular tValues diferente. Haciendo lo mismo en Matlab he obtenido
otro resultado (0.6518).

Sin embargo, si intentas lo mismo en excel debería mostrar algo cercano a -1.8125.

Saludos,
Herajika

 
Haruna Nakamura:

Hola! En cuanto a la diferencia entre el resultado del artículo(http://pt.scribd.com/doc/80877200/How-to-do-a-Dickey-Fuller-Test-using-Excel#) y mi aplicación,
tenga en cuenta que en el sitio mencionado, hay algún problema con los signos displaing (+, -). Por lo tanto, en realidad el resultado presentado en el artículo es -1.8125.

En cuanto a la diferencia con Wolfram Mathematica, tal vez diferentes implementaciones utilizan diferentes valores críticos y calcular tValues diferente. Haciendo lo mismo en Matlab he obtenido
otro resultado (0.6518).

Sin embargo, si intentas lo mismo en excel debería mostrar algo cercano a -1.8125.

Saludos,
Herajika

Hola Herajika,

Gracias por la respuesta. Entonces, en este caso, ¿qué estadística debería considerarse la correcta?

¿El artículo original muestra valores erróneos para los estadísticos de prueba?

Saludos,
Malacarne

P.D.: en Mathematica, si no uso "TestStatistic" como opción, obtengo resultados similares en comparación con MatLab.