Discusión sobre el artículo "Distribuciones Estadísticas en MQL5: tomando lo mejor de R" - página 18

 
Alexey Nikolaev:

Hola,
he encontrado un problema al calcular el cuantil de la distribución gamma
en R:
> qgamma(0.05,2,scale=1)
[1] 0.3553615
> qgamma(0.05,10,scale=1)
[1] 5.425406

en mql5:

Resultados:
0.3553615106986621
Error 4

build 1596

Modificado el cálculo de cuantiles de la distribución gamma. Corregida versión de Gamma.mqh en el apéndice (reemplazar en MQL5Include\Math\Stat\).

Resultado del cálculo:

2017.11.06 21:03:56.580 TestExample (USDJPY,M5) 0.3553615106986623
2017.11.06 21:03:56.580 TestExample (USDJPY,M5) 5.425405697091294
Archivos adjuntos:
Gamma.mqh  32 kb
 
La página de ayuda dice MathProbabilityDensityGamma() en lugar de MathProbabilityDensityNoncentralBeta()
 
Aleksey Nikolayev:
La página de ayuda dice MathProbabilityDensityGamma() en lugar de MathProbabilityDensityNoncentralBeta()

Gracias, corregido

 

La CDF de la distribución hipergeométrica se calcula incorrectamente mediante la función MathCumulativeDistributionHypergeometric(). Por definición, la función de distribución de probabilidad debe definirse para cualquier número real. A continuación se muestra un script en mql5 con sus resultados y, para comparar, lo mismo en R.

#include <Math\Stat\Hypergeometric.mqh>

input int nall=9;  // todos
input int nsc=2;   // todo un éxito
input int nsm=8;   // tamaño de la muestra

void OnStart()
  { int er;
    double k[]={-1,0,0.5,1};
    for(int i=0; i<4; ++i)
      Print((string)k[i]+" "+(string)MathCumulativeDistributionHypergeometric(k[i],nall,nsc,nsm,er)+" "+(string)er);
  }

resultado:

-1.0 nan 2

0.0 0.0 0

0.5 nan 2

división por cero en 'Hypergeometric.mqh' (241,35)

nall <- 9 #  all
nsc <- 2  #  all success
nsm <- 8  #  sample size

k <- c(-1, 0, 0.5, 1)
phyper(k, nsc, nall-nsc, nsm)

resultado:

[1] 0.0000000 0.0000000 0.0000000 0.2222222

 
Aleksey Nikolayev:

MathCumulativeDistributionHypergeometric() calcula incorrectamente la FCD de la distribución hipergeométrica.

Gracias por el mensaje, lo estudiaremos.

 
Se desea añadir la distribución de Kolmogorov a la biblioteca. Es muy útil por su uso en el criterio de Kolmogorov-Smirnov y en el problema de la búsqueda de la discordancia de un proceso aleatorio.
 

Si no he metido la pata, las funciones de ordenación rápida MathQuickSort*() no rellenan el array de índices del array original:

#include <Math\Stat\Math.mqh>

void OnStart()
  { double a[]={1.5, 2.0, -1.0, 0.0};
    int na=ArraySize(a);
    int ix[]; ArrayResize(ix,na);
    for(int i=0; i<na; ++i) ix[i]=0;
    
    //MathQuickSort(a,ix,1,2,1);
    //MathQuickSort(a,ix,1,2,-1);
    MathQuickSortAscending(a,ix,1,2);
    //MathQuickSortDescending(a,ix,1,2);
    
    for(int i=0; i<na; ++i)
      Print((string)ix[i]+" "+(string)a[i]);
  }

resultado:

0 1.5

0 -1.0

0 2.0

0 0.0

 
Aleksey Nikolayev:

A menos que me confunda, las funciones de ordenación rápida MathQuickSort*() no rellenan la matriz de índices de la matriz original:

En nuestra implementación, la matriz de índices en sí no se rellena, los valores de índice tienen que ser preparados por ti mismo antes de llamar a la ordenación:

    for(int i=0; i<na; ++i) ix[i]=i;

o

    for(int i=0; i<na; ++i) ix[i]=i+1;
si se requiere un orden natural.
 

Setslav

>>>El productoestaba oculto para llamar tu atención.

Además, no encuentro el botón para publicar un nuevo producto en el Market. ¿Es así para todos, o es sólo para mí? ¿Cómo puedo publicar la versión MT5?

Si un producto es ocultado por un moderador, el autor no puede devolverlo. Esto es lógico

 

Por ejemplo, algunos coeficientes binomiales (no todos) son negativos:

#include <Math\Stat\Math.mqh>

void OnStart()
  { Print(MathBinomialCoefficient(62,28));
  }

resultado: -309196571788882235

debería ser: 349615716557887488