記事"R で 統計分布を MQL5 に -"についてのディスカッション - ページ 18

 
Alexey Nikolaev:




> qgamma(0.05,2,scale=1) [1] 0.3553615 > qgamma(0.05,10,scale=1) [1] 5.425406 mql5:




結果:
0.3553615106986621
エラー 4

ビルド 1596

ガンマ分布の分位の計算を変更。付録のGamma.mqhのバージョンを修正した(MQL5IncludeMathのReplace)。

計算結果:

2017.11.06 21:03:56.580 TestExample (USDJPY,M5) 0.3553615106986623
2017.11.06 21:03:56.580 TestExample (USDJPY,M5) 5.425405697091294
ファイル:
Gamma.mqh  32 kb
 
ヘルプページには、MathProbabilityDensityNoncentralBeta()ではなく、MathProbabilityDensityGamma()と書かれています。
 
Aleksey Nikolayev:
ヘルプページには、MathProbabilityDensityNoncentralBeta()ではなく、MathProbabilityDensityGamma()と書かれています。

ありがとうございます。

 

MathCumulativeDistributionHypergeometric() 関数で、超幾何分布の CDF が正しく計算されない。定義上、確率分布 関数は任意の実数に対して定義されなければならない。以下はmql5上のスクリプトとその結果であり、比較のためにR上でも同様である。

#include <Math\Stat\Hypergeometric.mqh>

input int nall=9;  // すべて
input int nsc=2;   // すべて成功
input int nsm=8;   // サンプルサイズ

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

結果

-1.0 nan 2

0.0 0.0 0

0.5 nan 2

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

結果

[1] 0.0000000 0.0000000 0.0000000 0.2222222

 
Aleksey Nikolayev:

MathCumulativeDistributionHypergeometric() による超幾何分布の CDF の計算に誤りがありました。

メッセージありがとうございます。

 
コルモゴロフ分布を ライブラリに加えたいという要望がある。Kolmogorov-Smirnov基準やランダム過程の不和を探索する問題で使用されるため、非常に便利です。
 

もし私が何も混乱させていなければ、MathQuickSort*()クイックソート関数は、元の配列のインデックス配列に値を入れません

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

結果

0 1.5

0 -1.0

0 2.0

0 0.0

 
Aleksey Nikolayev:

私が勘違いしていなければ、MathQuickSort*()クイックソート関数は元の配列のインデックス配列に値を入力 しません:

私たちの実装では、インデックス配列そのものは埋められず、インデックス値はソートを呼び出す前に自分で用意しなければなりません:

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

あるいは

    for(int i=0; i<na; ++i) ix[i]=i+1;
自然な秩序が求められる場合
 

セツラフ

>>商品はあなたの注意を引くために隠されました。

それに、マーケットに新しい商品を公開するボタンが見当たりません。みんなこうなのでしょうか、それとも私だけでしょうか?どうすればMT5バージョンを公開できますか?

商品がモデレーターによって非表示にされた場合、作者はそれを戻すことができません。これは論理的なことです。

 

例えば、二項 係数の中には負のものもある(すべてではない):

#include <Math\Stat\Math.mqh>

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

結果: -309196571788882235

本来は: 349615716557887488