文章 "MQL5 中的统计分布 - 取最佳的 R" - 页 19

 
Aleksey Nikolayev:
我们希望将Kolmogorov 分布 加入库中。它非常有用,因为它可用于柯尔莫哥洛夫-斯米尔诺夫准则和搜索随机过程的分解问题。

为了以防万一,我将把它留在这里。计算双面单样本检验的柯尔莫哥洛夫-斯米尔诺夫统计量分布的 CDF 及其增量。

附加的文件:
KS.mqh  16 kb
 
有人用过吗?
 
Aleksey Nikolayev:

MathCumulativeDistributionHypergeometric() 函数错误地计算了超几何分布的 CDF。根据定义,概率分布函数必须为任何实数定义。以下是 mql5 上的脚本及其结果,为便于比较,还提供了 R 上的相同结果。

结果

-1.0 nan 2

0.0 0.0 0

0.5 纳 2

超几何.mqh'中的零除法 (241,35)

结果:

[1] 0.0000000 0.0000000 0.0000000 0.2222222

您传递了错误的参数,得到了 ERR_ARGUMENTS_INVALID (2)。我们正在更详细地检查输入参数,R 似乎已将答案替换为零。

//+------------------------------------------------------------------+
//| 超几何累积分布函数(CDF) | |
//+------------------------------------------------------------------+
//| 该函数返回观测值 | 的概率。
//| 来自参数为 m,n,k 的超几何分布
//| 小于或等于 x。|
//||
//| 参数:|
//| x :所需的对象数量
//| m :种群数量
//| k :具有所需特征的物品数量
//|| 在人口中|
//| n :抽取的样本数
//| tail :计算下部尾部的标志
//| log_mode : 对数模式,如果为真,则计算对数值。
//| error_code : 错误代码变量
//||
//| 返回值:|
//> 超几何累积分布函数的值
//| 带参数 m,n,k, 在 x 处求值。
//+------------------------------------------------------------------+
//| 基于 John Burkardt 的算法|
//+------------------------------------------------------------------+
double MathCumulativeDistributionHypergeometric(const double x,const double m,const double k,const double n,const bool tail,const bool log_mode,int &error_code)
  {
//--- 检查 NaN
   if(!MathIsValidNumber(x) || !MathIsValidNumber(m) || !MathIsValidNumber(k) || !MathIsValidNumber(n))
     {
      error_code=ERR_ARGUMENTS_NAN;
      return QNaN;
     }
//--- m,k,n,x 必须是整数
   if(m!=MathRound(m) || k!=MathRound(k) || n!=MathRound(n) || x!=MathRound(x))
     {
      error_code=ERR_ARGUMENTS_INVALID;
      return QNaN;
     }
//--- m,k,n,x 必须为正数
   if(m<0 || k<0 || n<0 || x<0)
     {
      error_code=ERR_ARGUMENTS_INVALID;
      return QNaN;
     }
//--- 检查范围
   if(n>m || k>m)
     {
      error_code=ERR_ARGUMENTS_INVALID;
      return QNaN;
     }
 
Aleksey Nikolayev:

例如,有些(并非所有)二项式系数是负数:

结果: -309196571788882235

应为:349615716557887488

由于 K 较大(28),64 位 long 在此处溢出。返回值 为 long。

要在这种限制内计算数值,需要将函数改写为双数值。

 
Renat Fatkhullin:

您传递了错误的参数,得到了 ERR_ARGUMENTS_INVALID (2)。我们更详细地检查了输入参数,R 似乎用零替换了答案。

1) 任何 CDF - 概率分布函数(离散型也不例外!)都必须定义为所有实数。下面是 R 代码的类似代码及其结果,说明在现实中应该如何计算。顺便说一下,有些离散 CDF 函数计算正确,有些则不正确。

2) 对于值 1,您会遇到除以零的错误。

 
Aleksey Nikolayev:

1) 任何 CDF - 概率分布函数(离散型也不例外!)都必须定义为所有实数。下面是 R 代码的类似代码,其结果显示了在现实中应如何考虑这一点。顺便说一下,有些离散 CDF 函数你算对了,有些算错了。

2) 对于值 1,您会出现除以零的错误。

请阅读源代码中的函数代码及其检查。

我手头没有 R,我必须单独检查。我看到除以零,我们需要了解边界条件。

 
Renat Fatkhullin:

由于 K 较大(28),64 位 long 在此处溢出。返回值 为 long。

要在这种限制内计算数值,应将函数改写为双数值。

这很清楚。只是整数参数的二项式系数对数出现了错误,我以为是这个原因。现在我看了代码,发现我错了--原因另有其人。

#include <Math\Stat\Math.mqh>

void OnStart()
  { Print(MathBinomialCoefficientLog(62,28));
    Print(MathBinomialCoefficientLog(62.0,28.0));
  }

结果:

test_clog (EURUSD.m,MN1) -nan(ind)

test_clog (EURUSD.m,MN1) 40.39561099351077


PS 错,问题还在于溢出

 
Renat Fatkhullin:

手头没有 R、

R 在线

compile R online
  • rextester.com
compile R online
 

NoncentralBeta 遇到了一些麻烦。我从文档 中提取了脚本。

这些是不同参数下的结果。


Документация по MQL5: Стандартная библиотека / Математика / Статистика / Нецентральное бета-распределение
Документация по MQL5: Стандартная библиотека / Математика / Статистика / Нецентральное бета-распределение
  • www.mql5.com
В данном разделе представлены функции для работы с нецентральным бета-распределением. Они позволяют производить расчет плотности, вероятности...
 

文档 中的公式:



是维基百科中的类似内容



查看了代码。

MathRandomNoncentralBeta() 函数中有这样几行:

//--- 使用非中心 ChiSquare 生成随机数
double chi1=MathRandomNoncentralChiSquare(a2,lambda2,error_code);
double chi2=MathRandomNoncentralChiSquare(b2,lambda2,error_code);
result[i]=chi1/(chi1+chi2);


维基百科中也有这样的内容:

The noncentral beta distribution (Type I) is the distribution of the ratio

其中 是一个自由度为 m 非中心性 参数 𝜆 中心秩方 随机变量 𝜒 𝑛 2 自由度为 n 的中心奇平方 随机变量 ,与𝜒 𝑚 2 ( 𝜆 ) 无关


也就是说,有两个随机变量,第一个来自非中心的卡方分布,第二个来自中心的 卡方分布。也许代码可以这样修改:

//--- 使用非中心 ChiSquare 生成随机数
double chi1=MathRandomNoncentralChiSquare(a2,lambda2,error_code);
double chi2=MathRandomChiSquare(b2,error_code);
result[i]=chi1/(chi1+chi2);


示例中修改后的图形如下。

Документация по MQL5: Стандартная библиотека / Математика / Статистика / Нецентральное бета-распределение
Документация по MQL5: Стандартная библиотека / Математика / Статистика / Нецентральное бета-распределение
  • www.mql5.com
В данном разделе представлены функции для работы с нецентральным бета-распределением. Они позволяют производить расчет плотности, вероятности...