トレーディングにおける機械学習:理論、モデル、実践、アルゴトレーディング - ページ 198

 
Dr.トレーダー

Rで別のエラーを発見しました。R は 0 で正しく割り切れない。

以下はそのスクリプトです。

//+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

#property script_show_inputs

input double div = 0.0;

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   Print(1.0/div);
  }
//+------------------------------------------------------------------+

正解は、mqlでは
zero divide in 'test.mq5' (20,13)
with
script stopped.

Rで、非独占的。
> 1/0
インフ
スクリプトの続きで

私はAlexeyと同じ意味で、未定義の条件下でのプログラムの動作は異なる可能性があり、それはエラーではありません。建築のあるべき姿、それが結果です。


正解ではない」というのは間違いです。

Rでの回答は全く正しく、非常に便利です。ポイントは、Rが「変数の値」という概念を徹底し、具体的な値としてNA(値はあるが不明)、NaN(数値なし)、Inf - 無限大の3つを用意している点です。これはそういう価値観であり、プログラムの作業を邪魔するのは全く間違っている。実精度のコンピュータの限界を考慮すれば、Infは有限の値を持つかもしれません。そして、作業を続けることは至極当然であり、きちんとしたプログラム であれば、そのような結果が想定される場合はチェックするはずである。

例えば、MQLのドキュメントにはアークサインに関する例があり、arcsine(2)=infinityと記載されています。これは正確ではありません。正確には、arcsinus(2) = NaN、つまり数値がない、arcsinus(1) = Inf、ただし取引中の気配値抜け = NA、つまりあるべき(あるいは週末にありうる)のにない、ということです。

 
アレクセイ・ブルナコフ

Wolframが0と言ったことは最終的な真実ではない。つまり、文言の「エラー」が冗長なんです...。

ここでは、Wolframがどうのこうのという話ではない。ゼロでない正の値の積分は、ゼロにはなり得ない。

また、チェックの結果、アルゴリズムに誤りがあることも判明しました。

例えば、非心t分布の場合、分位数は変換されません。


>n <- 10> k <- seq(0,1,by=1/n)> nt_pdf<-dt(k, 10,8, log = FALSE)> nt_cdf<-dt(k, 10,8, log = FALSE)-pt(k, 10,8, log = FALSE)> nt_quantile<-qt(nt_cdf, 10,8, log = FALSE)> nt_pdf[1] 4.927733e-15 1.130226e-14 2.641608e-14 6.281015e-14 1.516342e-13 3.708688e-13 9.166299e-13 [8] 2.283319e-12 5.716198e-12 1.433893e-11 3.593699e-11> nt_cdf[1] 6.220961e-16 1.0.1.1.2.1.1.388760e-15 3.166372e-15 7.362630e-15 1.742915e-14 4.191776e-14 1.021850e-13 [8] 2.518433e-13 6.257956e-13 1.563360e-12 3.914610e-12> k[1]0.0 1 0.2 0.4 0.5 0.6 0.7 0.8 0.9 1.0.0> nt_quantile[1]-Inf -1.340781e+154 -1.340781e+154 -1.340781e+154 [7]-1.340781e+154 7.000000e-01 8.000000e-01 9.000000e-01 1.000000e+154


ここでは、分位数0〜0.6が誤って計算されています。

MQL5で同様の計算を行った例。

2016.11.10 17:53:32.645 TestStatNCT (EURUSD,H1) パッケージStatのユニットテスト
2016.11.10 17:53:32.645 TestStatNCT (EURUSD,H1)
2016.11.10 17:53:32.645 TestStatNCT (EURUSD,H1) 非心T分布検定を開始しました。
2016.11.10 17:53:32.645 TestStatNCT (EURUSD,H1) 非心T分布検定:検定1:単一値に対する計算結果
2016.11.10 17:53:32.645 TestStatNCT (EURUSD,H1) 1 0, PDF=4.92773299108629100851e-15, CDF=6.232749057829041900e-16, Q=1.51119154775858715131e-18,
2016.11.10 17:53:32.646 TestStatNCT (EURUSD,H1) 1 1, PDF=1.130226163094897516453e-14, CDF=1.38993895779573769266e-15, Q=9.99999999999989369615e-02,
2016.11.10 17:53:32.647 TestStatNCT (EURUSD,H1) 1 2, PDF=2.641256619123119969e-14, CDF=3.16755115913693189175e-15, Q=2.0000000000004840572e-01,
2016.11.10 17:53:32.648 TestStatNCT (EURUSD,H1) 1 3, PDF=6.28106243570810575054e-14, CDF=7.36381790305861902898e-15, Q=2.99999999999998601119e-01
2016.11.10 17:53:32.648 TestStatNCT (EURUSD,H1) 1 4, PDF=1.5163698393962646374250e-13, CDF=1.7430393590744906969191e-14, Q=4.00000000000005184742e-01
2016.11.10 17:53:32.648 TestStatNCT (EURUSD,H1) 1 5, PDF=3.70864175555731463525e-13, CDF=4.19192812277470617962e-14, Q=5.000000000000e-01,
2016.11.10 17:53:32.649 TestStatNCT (EURUSD,H1) 1 6, PDF=9.16615229573755101565e-13, CDF=1.02187737277044947465e-13, Q=5.9999999999999998867573e-01,
2016.11.10 17:53:32.651 TestStatNCT (EURUSD,H1) 1 7, PDF=2.28327725393015114329e-12, CDF=2.51850847368662607692e-13, Q=6.99999999999999289457e-01,
2016.11.10 17:53:32.652 TestStatNCT (EURUSD,H1) 1 8, PDF=5.71609303970751591223e-12, CDF=6.258214173612894232e-13, Q=7.999999999999299967253e-01,
2016.11.10 17:53:32.653 TestStatNCT (EURUSD,H1) 1 9, PDF=1.43395037240077606742e-11, CDF=1.56338059375202603523e-12, Q=8.999999999999999998578915e-01,
2016.11.10 17:53:32.655 TestStatNCT (EURUSD,H1) 1 10, PDF=3.593914459122563450e-11, CDF=3.91468724033560601170e-12, Q=9.9999999999988889777e-01,
2016.11.10 17:53:32.655 TestStatNCT (EURUSD,H1) 非心T分布検定:テスト2:アレイでの計算
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 0, PDF=4.92773299108629100851e-15, CDF=6.232749057829041900e-16, Q=1.51119154775858715131e-18,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 1, PDF=1.130226163094897516453e-14, CDF=1.38993895779573769266e-15, Q=9.99999999999989369615e-02,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 2, PDF=2.641256619123119969e-14, CDF=3.16755115913693189175e-15, Q=2.0000000000004840572e-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 3, PDF=6.28106243570810575054e-14, CDF=7.36381790305861902898e-15, Q=2.99999999999998601119e-01
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 4, PDF=1.5163698393962646374250e-13, CDF=1.7430393590744906969191e-14, Q=4.00000000000005184742e-01
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 5, PDF=3.70864175555731463525e-13, CDF=4.19192812277470617962e-14, Q=5.000000000000e-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 6, PDF=9.16615229573755101565e-13, CDF=1.02187737277044947465e-13, Q=5.999999999999999998867573e-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 7, PDF=2.28327725393015114329e-12, CDF=2.51850847368662607692e-13, Q=6.99999999999999289457e-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 8, PDF=5.71609303970751591223e-12, CDF=6.258214173612894232e-13, Q=7.99999999999999299967253e-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 9, PDF=1.43395037240077606742e-11, CDF=1.56338059375202603523e-12, Q=8.999999999999999998578915e-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 10, PDF=3.593914459122563450e-11, CDF=3.91468724033560601170e-12, Q=9.9999999999988889777e-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 非心T分布検定:テスト3:R的オーバーロード関数
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 0, PDF=-3.29438973521509552711e+01, CDF=-3.50115439911437320575e+01, Q=9.32008491370933962264e-15,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 1, PDF=-3.211377354488684668779e+01, CDF=-3.42095165639872504926e+01, Q=9.99999999999992561506e-02
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 2, PDF=-3.12648017507063613607e+01, CDF=-3.33858176105613679852e+01, Q=2.000000000004563017e-01
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 3, PDF=-3.03986521580849320401e+01, CDF=-3.25421978598387227066e+01, Q=2.99999999999999984900e-01.Q=2.9999999999997e-01,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 4, PDF=-2.95172869939179705057e+01, CDF=-3.16805609544090991392e+01, Q=4.000000000005240253e-01
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 5, PDF=-2.86229405029589081266e+01, CDF=-3.080305013295588878e+01, Q=5.000000000000e-01,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 6, PDF=-2.771808860768480570e+01, CDF=-2.99119647118446110312e+01, Q=5.9999999999999998756550e-01,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 7, PDF=-2.6805409312949466934897e+01, CDF=-2.90099393581479034765e+01, Q=6.999999999999999999400480e-01,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 8, PDF=-2.58877355789277032727e+01, CDF=-2.80997113402901490531e+01, Q=7.999999999999489297e-01,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 9, PDF=-2.49680028891657173062e+01, CDF=-2.71841705920503962091e+01, Q=8.99999999999998689937e-01.Q=9999999999999999999999999999,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 10, PDF=-2.40491940358795979979193e+01, CDF=-2.62662856772029869035e+01, Q=9.99999999999888889777e-01,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 非心T分布検定:テスト4:乱数値の生成者
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) 非心T分布テストが通過しました。
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) 非心T分布検定:PDF最大誤差:1.48634016318122160328e-25
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) 非心T分布検定:CDF最大誤差 : 2.75966439373922392108e-18
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) 非心T分布検定: 分子最大誤差:5.16253706450697791297e-15
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) 非心T分布検定:PDF正答桁数:24桁
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) 非心T分布検定:CDF 正数桁数:17
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) 非心T分布検定:分位正数 : 14
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1)
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) 1個中1個が合格。

TestStatNCT.mq5スクリプトの結果(TestStat.mq5からのテスト、TestNoncentralTDistribution関数の計算値の出力追加)

見てわかるように、分位数に対応し、テストに合格している。

エラーについては、以下の通りです。

//--- precision
double calc_precision_pdf=10 E-15;
double calc_precision_cdf=10 E-15;
double calc_precision_quantile=10 E-14;

デニス・ベントンで、K.Krishnamoorthy, "Computing discrete mixtures of continuous distributions: noncentral chisquare, noncentral t and distribution of square of sample multiple correlation coefficient", AS 243アルゴリズムに誤差があることが示された。


つまり、Rにエラーがあり、その原因はCDFを計算する際に使用するAS243アルゴリズムにあると思われます。

ファイル:
TestStatNCT.mq5  16 kb
 
量子力学

1)これはWolframのことではありません。ゼロでない正の値の積分は、ゼロになることはできません。

2)テスト時のアルゴリズムにも間違いがあった。

3)例えば、非心t分布の場合、分位数は可逆的ではありません。


1 - もしあなたがガンマ分布に関する誤りについても書いているのなら、私の主張はあなたに宛てたものです。Rでは誤差を伴っているというのは誤りです。この投稿には、レッテル貼りの試みが見受けられます。どうやらあなたは、パッケージを使っている学者たちに相談したことがないようで、そこに間違いはないと思っているようです。Pythonの関数でも0に1の密度が出力される。

もう一度言います。密度値はゼロで定義されるわけではありません。Wolframは0だと考えていて、あなたは独自の推論をせずにそれに同意しているだけです。

タングステンは関係ないと言いながら、ゼロの何乗かという私の質問には答えられないんですね。その代わり、タングステンを見せてくれて...。

右の近似式では値がユニティーになり、近似式の積分もゼロでないことがお分かりいただけると思います。また、密度もゼロではないので、不確定な量を積分しても意味がない。

2 - これをさらに確認し、例えばアルゴリズムの誤りを立証することができる。

3)例えば、チェックすることができます。

 
量子力学


例えば、非心t分布の場合、分位数が逆転することはない。


分位数0~0.6は、ここでは正しく計算されません。

>n <- 10> k <- seq(0,1,by=1/n)> nt_pdf<-dt(k, 10,8, log = FALSE)> nt_cdf<-dt(k, 10,8, log = FALSE)-pt(k, 10,8, log = FALSE)> quantile<-qt(nt_cdf, 10,8, log = FALSE)> nt_pdf[1] 4.927733e-15 1.130226e-14 2.641608e-14 6.281015e-14 1.516342e-13 3.708688e-13 9.166299e-13 [8] 2.283319e-12 5.716198e-12 1.433893e-11 3.593699e-11> nt_cdf[1] 6.220961e-16 1.0.1.1.2.1.2.2.2.3.2.3.3.3.3.3.4.3.4.4.4.1.1.1.1.1.1.1.1.1.1.1.1.388760e-15 3.166372e-15 7.362630e-15 1.742915e-14 4.191776e-14 1.021850e-13 [8] 2.518433e-13 6.257956e-13 1.563360e-12 3.914610e-12> k[1]0.0 1 0.2 0.4 0.5 0.6 0.7 0.8 0.9 1.0.0> nt_quantile[1]-Inf -1.340781e+154 -1.340781e+154-1.340781e+154 [7]-1.340781e+154 7.000000e-01 8.000000e-01 9.000000e-01
すみません、コードのどこで nt_quantile 変数が初期化されていますか? つまり、どこから来ていますか?
 

1)ある点でcdf=0、pdfは0でないことをどう説明すればよいのでしょうか?

>n <- 5> k <- seq(0,1,by=1/n)> gamma_pdf<-dgamma(k, 1,1, log = FALSE)> gamma_cdf<-pgamma(k, 1,1, log = FALSE)> k[1] 0.0 0.2 0.4 0.4 0.6 0.8 1.0> gamma_pdf[1]1.0000000 0.8187308 0.6703200 0.5488116 0.4493290 0.3678794> gamma_cdf[1]0.0000000 0.1812692 0.3296800 0.4511884 0.5506710 0.6321206

2) 分位数が元の分位数と一致しなかったことをどう説明するか。

>n <- 10> k <- seq(0,1,by=1/n)> nt_pdf<-dt(k, 10,8, log = FALSE)> nt_cdf<-dt(k, 10,8, log = FALSE)-pt(k, 10,8, log = FALSE)> nt_quantile<-qt(nt_cdf, 10,8, log = FALSE)> nt_pdf[1] 4.927733e-15 1.130226e-14 2.641608e-14 6.281015e-14 1.516342e-13 3.708688e-13 9.166299e-13 [8] 2.283319e-12 5.716198e-12 1.433893e-11 3.593699e-11> nt_cdf[1] 6.220961e-16 1.0.1.1.2.1.1.388760e-15 3.166372e-15 7.362630e-15 1.742915e-14 4.191776e-14 1.021850e-13 [8] 2.518433e-13 6.257956e-13 1.563360e-12 3.914610e-12> k[1] 0.0 1 0.2 0.4 0.5 0.6 0.7 0.8 0.9 1.0.0> nt_quantile[1]-Inf -1.340781e+154 -1.340781e+154 -1.340781e+154 [7] -1.340781e+154 7.000000e-01 8.000000e-01 9.000000e-01
 
アレクセイ・ブルナコフ
すみません、コードのどこで nt_quantile 変数が初期化されていますか? つまり、どこから来ていますか?

すみません、スクリプトに誤字がありましたので修正しました。

スクリプトはこんな感じです。

>n <- 10> k <- seq(0,1,by=1/n)> nt_pdf<-dt(k, 10,8, log = FALSE)> nt_cdf<-dt(k, 10,8, log = FALSE)-pt(k, 10,8, log = FALSE)> nt_quantile<-qt(nt_cdf, 10,8, log = FALSE)> nt_pdf[1] 4.927733e-15 1.130226e-14 2.641608e-14 6.281015e-14 1.516342e-13 3.708688e-13 9.166299e-13 [8] 2.283319e-12 5.716198e-12 1.433893e-11 3.593699e-11> nt_cdf[1] 6.220961e-16 1.0.1.1.2.1.2.2.2.3.2.3.3.3.3.3.4.3.4.4.4.1.1.1.1.1.1.1.1.1.1.1.1.388760e-15 3.166372e-15 7.362630e-15 1.742915e-14 4.191776e-14 1.021850e-13 [8] 2.518433e-13 6.257956e-13 1.563360e-12 3.914610e-12> k[1] 0.0 1 0.2 0.4 0.5 0.6 0.7 0.8 0.9 1.0.0> nt_quantile[1] -Inf -1.340781e+154 -1.340781e+154 -1.340781e+154 -1.340781e+154 [7] -1.340781e+154 7.000000e-01 8.000000e-01 9.000000e-01
 
量子力学

1) cdf=0の地点で、pdfが0でないことはどう説明すればよいのでしょうか?

2) 分位数が元のものと違うことをどう説明すればよいのか。

考えて回答します。いつも質問には質問で返しているのですか?ご自身の統計的な思考はどこにあるのでしょうか?
 
アレクセイ・ブルナコフ

ポイントは、@Quantumは 純粋にRの数学ライブラリのアナログをMQL5で実装し、完全検証していることです。

これは理論家の推理ではありません。そして、ライブラリが正しいことを保証するユニットテストを書くときも、深く掘り下げている。


Rですべてが正しいとアプリオリに決めつけてはいけない。逆に言えば、そこにC++で実装された関数があったとしても、すべてがかなり原始的なものだと言えるでしょう。また、スピードの面でも、当社のコンパイラでソースコードに含まれるMQL5ライブラリが平均3倍で勝っていることがわかります。

わざわざダブルチェックを行い、明らかな誤りを発見したのです。これらのエラーは確認されています。

Lenth [Lenth, R.V.,"Cumulative distribution function of noncentral t distribution", Applied Statistics, vol.1]によって提案されたアルゴリズムAS243を 用いる。38 (1989), 185-189].この方法の利点は、不完備なβ関数を持つ無限級数の項を高速に漸化計算することである。しかし、記事の中で【D.ベントン、K.Krishnamoorthy,"Computing discrete mixtures of continuous distributions: noncentral chisquare, noncentral t and distribution of square of sample multiple correlation coefficient", Computational Statistics & Data Analysis, 43, (2003), 249-267], このアルゴリズムは、特に非心デルタパラメータが大きい場合、系列の項の合計をする際に精度評価の誤差によりエラーを引き起こすことが示された。この論文の著者らは、非中心T分布確率を再帰的に計算する修正アルゴリズムを提案した。

MQL5統計ライブラリでは、論文[D.S.A]にある確率計算のための正しいアルゴリズムを使用しています。ベントン、K.Krishnamoorthy,"Computing discrete mixtures of continuous distributions: noncentral chisquare, noncentral t and distribution of sample multiple correlation coefficient", Computational Statistics & Data Analysis, 43, (2003), 249-267].であり、正確な結果が得られる。

計算の正確さを確認し、サードパーティの開発者がライブラリの品質をチェックできるように、いくつかのユニットテストスクリプトを納品に含めています。これらは /Scripts/UnitTests/Stat にあります。

発行日をご覧ください。科学者たちのヒントで、作業の様子がわかるはずです。

また、@Quantumを 科学者だと思わないのは間違いです。

 

次に、一様な連続分布の場合、極点での密度が正で積分が0になることを、直訳順にコメントします。https://en.wikipedia.org/wiki/Uniform_distribution_(連続)

 
レナト・ファットフーリン

ポイントは、@Quantumは 純粋にMQL5におけるRの数学ライブラリのアナログの実装と完全な検証を目的としていることです。

これは理論家の推理ではありません。そして、ライブラリが正しいことを保証するユニットテストを書くときも、深く掘り下げている。


Rですべてが正しいとアプリオリに決めつけてはいけない。逆に言えば、そこにC++で実装された関数があったとしても、すべてがかなり原始的なものだと言えるでしょう。また、スピードの面でも、当社のコンパイラでソースコードに含まれるMQL5ライブラリが平均3倍で勝っていることがわかります。

わざわざダブルチェックを行い、明らかな誤りを発見したのです。これらのエラーは確認されています。

出版物の日付を見てください。科学者のアドバイスを受けながら、作業がどのように進んでいるかがわかります。

また、@Quantumを 科学者だと思わないのは間違いです。

このエラーについては、何も言っていないんです。あるあるあるあるあるあるあるあるあるあるあるあるあるあるあるあるあるあるあるあるあるあるあるあるあるあるあるあるあるあるあるあるあるあるある

ガンマ分布について - それが、あなたの実装で彼がやっていることだと理解しました。そして、それに関する彼の主張が純粋な文字通りのものであることを、私は繰り返し述べている。