Diskussion zum Artikel "Statistische Verteilungen in MQL5 - Nur das Beste aus R" - Seite 18

 
Alexey Nikolaev:

Hallo,
hat ein Problem bei der Berechnung des Quantils der Gamma-Verteilung
in R:
> qgamma(0.05,2,scale=1)
[1] 0.3553615
> qgamma(0.05,10,scale=1)
[1] 5.425406

in mql5:

Ergebnisse:
0.3553615106986621
Fehler 4

build 1596

Geänderte Berechnung der Quantile der Gamma-Verteilung. Feste Version von Gamma.mqh im Anhang (ersetzen in MQL5\Include\Math\Stat\).

Berechnungsergebnis:

2017.11.06 21:03:56.580 TestExample (USDJPY,M5) 0.3553615106986623
2017.11.06 21:03:56.580 TestExample (USDJPY,M5) 5.425405697091294
Dateien:
Gamma.mqh  32 kb
 
Auf der Hilfeseite steht MathProbabilityDensityGamma() anstelle von MathProbabilityDensityNoncentralBeta()
 
Aleksey Nikolayev:
Auf der Hilfeseite steht MathProbabilityDensityGamma() anstelle von MathProbabilityDensityNoncentralBeta()

Danke, korrigiert

 

Die CDF der hypergeometrischen Verteilung wird von der Funktion MathCumulativeDistributionHypergeometric() falsch berechnet. Per Definition muss die Wahrscheinlichkeitsverteilungsfunktion für jede reelle Zahl definiert werden. Nachfolgend ein Skript auf mql5 mit seinen Ergebnissen und zum Vergleich das gleiche auf R.

#include <Math\Stat\Hypergeometric.mqh>

input int nall=9;  // alle
input int nsc=2;   // alles erfolgreich
input int nsm=8;   // Stichprobenumfang

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);
  }

Ergebnis:

-1.0 nan 2

0.0 0.0 0

0.5 nan 2

Nullteilung in '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)

result:

[1] 0.0000000 0.0000000 0.0000000 0.2222222

 
Aleksey Nikolayev:

Die CDF der hypergeometrischen Verteilung wird von MathCumulativeDistributionHypergeometric() falsch berechnet.

Vielen Dank für die Nachricht, wir werden uns das ansehen.

 
Es besteht der Wunsch, die Kolmogorov-Verteilung in die Bibliothek aufzunehmen. Sie ist sehr nützlich, da sie für das Kolmogorov-Smirnov-Kriterium und für das Problem der Suche nach der Unstimmigkeit eines Zufallsprozesses verwendet wird.
 

Wenn ich nichts durcheinander gebracht habe, füllen die MathQuickSort*()-Schnellsortierfunktionen das Index-Array des ursprünglichen Arrays nicht auf:

#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]);
  }

Ergebnis:

0 1.5

0 -1.0

0 2.0

0 0.0

 
Aleksey Nikolayev:

Wenn ich mich nicht irre, füllen die MathQuickSort*()-Schnellsortierfunktionen das Index-Array des ursprünglichen Arrays nicht auf:

In unserer Implementierung wird das Index-Array selbst nicht gefüllt, die Indexwerte müssen vor dem Aufruf der Sortierung selbst vorbereitet werden:

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

oder

    for(int i=0; i<na; ++i) ix[i]=i+1;
wenn eine natürliche Ordnung erforderlich ist.
 

Setslav

>>>Das Produktwurde versteckt, um Ihre Aufmerksamkeit darauf zu lenken.

Außerdem kann ich keinen Button finden, um ein neues Produkt im Market zu veröffentlichen. Ist das bei allen so, oder nur bei mir? Wie kann ich die MT5-Version veröffentlichen?

Wenn ein Produkt von einem Moderator versteckt wird, kann der Autor es nicht zurückgeben. Das ist logisch

 

Einige (nicht alle) Binomialkoeffizienten sind z. B. negativ:

#include <Math\Stat\Math.mqh>

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

Ergebnis: -309196571788882235

sollte sein: 349615716557887488