В процессе тестирования расчетов в R была обнаружена ошибка расчета функции плотности для распределений Gamma, и ChiSquare и Noncentral ChiSquare в точке x=0.
Значение вероятности гамма-распределения в точке x=0 считается верно (gamma_cdf=0), но значение плотности гамма-распределения (функция dgamma() в R) в точке x=0 должно быть равно 0 (а показывает gamma_pdf=1) по определению плотности вероятности гамма-распределения.
Для функций ChiSquare и Noncentral ChiSquare плотность вероятности в точке x=0 также вычисляется с ошибкой:
Для расчета вероятности нецентрального T-распределения Стьюдента в языке R используется алгоритм AS 243, предложенный Lenth [6]. Достоинством этого метода является быстрый рекуррентный расчет членов бесконечного ряда с неполной бета-функций. Но в статье [7] было показано, что из-за ошибки оценки точности при суммировании членов ряда данный алгоритм приводит к ошибкам (таблица 3 в статье [7]), особенно для больших значений параметра нецентральности delta. Авторы статьи [7] предложили скорректированный алгоритм рекуррентного расчета вероятности нецентрального T-распределения.
У нас в в статистической библиотеке MQL5 используется правильный алгоритм для расчета вероятностей из статьи [7] , что дает точные результаты.
興味深い事実
のロシア語訳におけるガンマ分布の密度値の定義は以下の通りです。
Johnson N.L., Kotz S., Balakrishnan N. Univariate continuous distributions. Part 1とそれ以前の英語版とは異なります。
が、英語版では文字が違うため誤植の疑いがある。
これは誤植ではありません。数種類のガンマチュートリアルにわざわざ目を通すとなると......。ヘルプデスクの定義が違うことがわかると思います...。ゼロのあるところと、ゼロのないところ。
あなたは@Quantumと違って、まさにこのような資料をわざわざ見て引用して いるわけではありません。
しかも、明確な例を挙げないように、ExcelやPythonにまで言及するんですね。
今のところ、ウィットを実践しているのはあなただけです。
もちろん、Rからの回答があれば、それを引用することもお忘れなく。
Rの開発者は、その結果をどう説明しているのだろう。
dgamma(0,0.5,1)=inf
pgamma(0,0.5,1)=0
を含む場合、x=0 で無限大の密度を与え、pgamma(x,0.5,1) で積分すると無限大は存在しないかのように 0 とみなされます。
Rの開発者は結果をどのように説明するのか。
いい質問ですが、なぜこの掲示板で質問するのですか?レナートによると、Rアルゴリズムを研究している科学者のチームがあるそうですが、彼らに聞いてみて、後で教えてください。Rのソースコードを理解することは、本格的な移植を行う場合、チームの直接的な責任となります。
今となっては、あなたの「Rのアルゴリズムの解析」は、Rと同じパラメータを持つ関数を、詳細には触れずに大学の教科書による実装で作っているようにしか思えません。そして、そのせいで「0^0=1」をエラーと呼ぶような誤解が起こる。
このままでは、Rのようなインターフェイスを持つ関数が、実装の違いによって特定の条件下で異なる振る舞いをすることになります。そして、もし誰かが自分のコードをRからmqlに移したいと思っても、最終的に異なる結果が得られ、なぜ結果が異なるのかを探すのに疲れてしまい、全てを諦めてしまうでしょう。単体テストでは、問題のない一般的なデータしか対象としないため、このような差異のごく一部しか明らかになりません。
Rのインターフェイスをコピーし、Rのソースコードも勉強せずに関数の実装を自作し、wolframで結果を確認するというのは、とても不思議なアプローチです。この手法で何を得たいのかすら、わからない。
あなたのやっていることは、「Rからコピーしたインターフェースで、不特定の状況下ではwolframに適応した、自作の統計ライブラリmql」と呼ぶことができます。https://www.mql5.com/ru/articles/2742 のRに関する他の言葉は、Rとは関係なく、ただのマーケットニグです。期待外れ。
で積分すると、pgamma(x,0.5,1) の無限大は、あたかも存在しないかのようにゼロとみなされます。
x=1*10^(-90)
その数値はゼロではなく非常に小さく、不確定要素はありません。
タングステン、結果は同じです。
PDF[GammaDistribution[0.5,1], 1*10^(-90)]
5.6419×10^44
CDF[GammaDistribution[0.5,1], 1*10^(-90)]
1.12838×10^-45
さて、質問を言い換えてみると、数式に不定詞を入れずに。
5.641896e+44のような大きな数を返すdgammaを積分して、最後に非常に小さな数1.128379e-45を 出すにはどうしたらいいでしょうか?
答えはノーウェイです。* dgamma()の積分はpgamma()の計算に使われず、他の計算式があり、dgamma()からの無限大は計算には使われません。
この場合の pgamma(0, 0.5, 1) の計算は、「無限の数の集合 [0;Inf] からランダムに一つを選ぶと、<0 の数が選ばれる確率は?答えは1/Inf、つまり0です。これはpgamma()の結果に対応します。直感や論理のレベルで無限大や境界を扱うのは苦手なので、何か間違っていたら訂正してください。
*xが減少するにつれてdgamma()の結果が減少する速度を過小評価していたのです。
いい質問ですが、なぜこの掲示板で質問するのでしょうか?レナートによると、あなたはそこでRアルゴリズムを解析している科学者のチームを持っていて、彼らに質問し、そして我々に教えてくれるのだそうです。Rのソースコードを理解することは、本格的な移植を行う場合、チームの直接的な責任となります。
今、あなたの「Rのアルゴリズムの解析」は、Rと同じパラメータを持つ関数を作り、詳細には触れずに大学の教科書を使った実装をしているようにしか見えません。そして、そのために「0^0=1」をエラーと呼ぶような誤解が起こる。
このままでは、Rのようなインターフェイスを持つ関数が、実装の違いによって特定の条件下で異なる振る舞いをすることになります。そして、もし誰かが自分のコードをRからmqlに移したいと思っても、最終的に異なる結果が得られ、なぜ結果が異なるのかを探すのに疲れてしまい、全てを諦めてしまうでしょう。単体テストでは、問題のない一般的なデータしか対象としないため、このような差異のごく一部しか明らかになりません。
Rのインターフェイスをコピーし、Rのソースコードも勉強せずに関数の実装を自作し、wolframで結果を確認するというのは、非常に不思議なアプローチです。この手法で何を得たいのかすら、わからない。
あなたのやっていることは、「Rからコピーしたインターフェースで、不特定の状況下ではwolframに適応した、自作の統計ライブラリmql」と呼ぶことができます。https://www.mql5.com/ru/articles/2742 のRに関する他の言葉は、Rとは関係なく、ただのマーケットニグです。期待外れ。
Rについては、私を含め、私たち自身が誤解しているのです。もちろん、この妄想をメタ引用のせいにすることもできるのだが、真実は違うのだ。
Rを使っている人は、Rがそのオリンパスに昇格した歴史を思い浮かべることができるだろう。1993年にSから完全にパクったRシステムは、さらに10年間狭い範囲で広く知られることになった。そして、創業から10年、20年の歴史を持つSだけに、90年代に入ってから徐々に上昇を始め、5年前にトップ10入りを果たし、現在ではライバルはパイソン1社のみとなっています。現在、Rは統計学の標準を代表する巨大なシステムとなっています。
したがって、MKLの中でRのアナログは不可能であるという結論になります。
私たちは何を扱っているのでしょうか?
MKL5の開発プロセスでは、数学的な機能の面で非常に前向きな対応をしています。もし、metaquotesが、stats Rパッケージの関数の類似品で数学関数のセットを補充することに成功したら、このプロセスは歓迎されるべきものです。とはいえ、他の数学パッケージではなく、Rを模倣の元とするのは非常に良い選択です。しかし、これはRからの関数のインポートではなく、アナログで、オリジナルと一致するかどうかわからない関数を新たに 書き込んだものです。しかし、マッチングしないからといって、メタクオーツが始めた仕事の重要性が損なわれることはまったくない。そして、RからMKL5にコードを移植する人は、MKL5はRと相対する別の実装であり、独自のニュアンス、独自のバグ、独自の言語環境を持つことを忘れてはいけません。
だから、何かを比較する必要はない。MKL5は統計関数で拡張されているので、それでいいと思います。これにplotメソッドが加われば、MKL5のグラフ作成ツールに革命が起きるでしょう。
追記
そして、あなたや私、その他多くのRのユーザーが失望しないのは、ただ一点、ターミナルが書き直され、そのプログラミング言語がRになることです。
ラフトの最初のバージョンはすでに登場しています:https://www.mql5.com/ru/forum/97153/page10#comment_3831485
Rのエラーは我慢しなければならない。無謬性への信仰は悪い仲間だ。Rでも計算速度に関する神話を否定しました。そこにあるコードは、素直で無頓着に書かれている。
AS243を使用した誤差は議論の余地がなく、私たちの結果の質の研究によって証明され、第三者による資料によって確認されています。
あなたは今、ゼロの議論しかしていませんが、ここでもあきらめるしかないでしょう。すでに他の点を示唆して、論点から逃れようと必死になっていますね。
今回も質の高い仕事をし、テーマを扱い、テストですべてをカバーしました。
R言語は、正確にはSに由来し、20年とは言わないまでも、少なくとも15年は存在しています。アメリカの大学の統計学部の教授、准教授、いろいろな意味で。彼らの計算は、タダでやったからとバカ正直にコミットに受け入れるのではなく、査読付き雑誌での科学的な発表が伴います。そしてこれは、あまり重要でない機能やパッケージにも当てはまります。そして、これが重要なんです!例えば、ある検定の検出力を求める関数を使うとき、効果量の引数を入力しなければならないんです。そして、ドキュメントには、プールされた標準偏差 はこのように考えられていると書いてありました。インターネットで、そのメソッドの作者を探して、読んで...。そして、この機能を適用した結果について議論しています。
dgammaはCatherine Loaderによって提供された二項分布のコードに基づくものです。この方法は、2000年に発表されたものです。お気軽にお読みください。
そして、今度はMQLの質問ですが、アルゴリズムを書くと、ほとんど全部を拝借していることがわかりますね。まれに「アルゴリズムの精度が足りない」とおっしゃる方がいますが、本誌に記載されている別のアルゴリズムがありますので、そちらを使用します。他のアルゴリズムはどうでしょうか?ドキュメントに借りていることを書いているのか?まさか、二項分布の確率計算を再発明するつもりではないでしょうね...。
参考文献にそのようなものはありますか?
pwr.t2n.test {pwr} R Documentation
2標本(異なるサイズ)のt検定の検出力計算
商品説明
テストの検出力を計算する、または目標とする検出力を得るためのパラメータを決定する(power.t.testと同様)。
使用方法
pwr.t2n.test(n1 = NULL, n2 = NULL, d = NULL, sig.level = 0.05, power = NULL),
alternative = c("two.sided",
"less", "greater"))
論証
n1
第1標本の観測値数
n2
第2標本の観測値数
d
効果量
シグレベル
有意水準(Type I エラー確率)
けんせい
検定力(1-タイプIIエラー確率)
オールタナティブ
対立仮説を指定する文字列。"two.sided"(デフォルト)、"greater" または "less" のいずれかでなければならない。
詳細
パラメータ 'd', 'n1', 'n2', 'power', 'sig.level' のうちちょうど1つをNULLとして渡さなければならず、そのパラメータは他のパラメータから決定される。最後のものはデフォルトでNULLでないため、計算する場合は明示的にNULLを渡さなければならないことに注意してください。
価値
クラス ''power.htest'' のオブジェクトで、'method' と 'note' 要素で補強された引数のリスト (計算されたものを含む) です。
備考
uniroot' は未知数の累乗方程式を解くのに使われるので、特に、無効な引数が与えられたときにルートを括ることができないといったエラーが発生することがあります。
著者名(敬称略)
Stephane Champely <champely@univ-lyon1.fr> しかし、これはPeter Dalgaardの作品(power.t.test)の単なるコピーに過ぎないのです。
参考文献
コーエン,J.(1988).行動科学のための統計的検出力解析(第2版).Hillsdale,NJ: Lawrence Erlbaum.
また、コードの出所やメソッドの作者を引用せずにコードを借用した場合、その作品は盗作となります。また、統計界でどのように見られるかというと、もしどこかの量子さんが、キャサリンさんの仕事から導かれた間違った密度関数について偽りの論文を発表したら、それは大きな疑問です。それはないだろう...。
関数のガンマ族について。
GammaDist {stats} R ドキュメント
ガンマ分布
商品説明
Gamma分布の密度、分布関数、分位関数、ランダム生成(パラメータはshapeとscale)。
使用方法
dgamma(x, shape, rate = 1, scale = 1/rate, log = FALSE)
pgamma(q, shape, rate = 1, scale = 1/rate, lower.tail = TRUE),
log.p = FALSE)
qgamma(p, shape, rate = 1, scale = 1/rate, lower.tail = TRUE),
log.p = FALSE)
rgamma(n, shape, rate = 1, scale = 1/rate)
論証
x、q
のベクトルです。
p
確率のベクトル。
n
の観測数。length(n) > 1 の場合、必要な長さとする。
レート
尺度を指定する別の方法。
形状、規模
shapeとscaleのパラメータを設定します。ポジティブであること、スケールが厳しいこと。
ログ、ログピー
論理的なもので、TRUE の場合、確率/密度 p は log(p) として返されます。
下端
論理的; TRUE (デフォルト) の場合、確率は P[X ≤ x], それ以外の場合は P[X > x].
詳細
scaleが省略された場合は、デフォルトの1が指定されたものとする。
パラメータshape=a、scale=sのガンマ分布は、密度
f(x)= 1/(s^aガンマ(a)) x^(a-1) e^-(x/s)である。
x ≥ 0, a > 0, s > 0 のとき (ここで Gamma(a) は R の gamma() で実装され、そのヘルプで定義されている関数です).なお、a = 0はすべての質量が点0にあるトリビアルな分布に対応する)。
平均と分散は E(X) = a*s と Var(X) = a*s^2 です。
累積ハザードH(t) = - log(1 - F(t)) とする。
-pgamma(t, ..., lower = FALSE, log = TRUE)
形状が小さい場合(そして規模が適度な場合)、ガンマ分布の質量の大部分は、コンピュータの演算でゼロと表現されるほどゼロに近いxの値であることに注意してください。そのため、rgammaは0として表現される値を返す可能性がある。(実際の生成はscale = 1で行われるため、scaleの値が非常に大きい場合にも起こります)。
価値
dgammaは密度,pgammaは分布関数,qgammaは分位数関数,rgammaはランダムな偏差を生成します.
引数が無効な場合、警告とともに NaN が返される。
結果の長さは,rgammaではnで決まり,他の関数では数値引数の長さの最大値となる。
n 以外の数値引数は結果の長さにリサイクルされる。論理的主張の最初の要素だけが使用されます。
備考
S (Becker et al (1988))のパラメトリゼーションは、shapeとrateを介したもので、Sはscaleパラメータを持たない。R 2.x.y では scale が rate よりも優先されましたが、現在は両方を指定してもエラーになります。
pgamma は不完全ガンマ関数と密接な関係があります。Abramowitz and Stegun 6.5.1 (および 'Numerical Recipes') で定義されているように、これは次のとおりです。
P(a,x) = 1/Gamma(a) integral_0^x t^(a-1) exp(-t) dt
P(a, x)はpgamma(x, a)である。他の著者(例えば Karl Pearson の 1922 年の表)は正規化因子を省略して、不完全ガンマ関数 γ(a,x) を gamma(a,x) = integral_0^x t^(a-1) exp(-t) dt、すなわち pgamma(x, a) * gamma(a) として定義しています。また、不完備ガンマ関数の「上」を使う人もいます。
Gamma(a,x) = integral_x^Inf t^(a-1) exp(-t) dt,
これは pgamma(x, a, lower = FALSE) * gamma(a) によって計算することができます。
ただし、pgamma(x, a, ...) は現在 a > 0 を要求していますが、不完全ガンマ関数は負の a にも定義されていることに注意してください。その場合、gsl パッケージの gamma_inc(a,x) (for Γ(a,x)) を使用することができます。
https://en.wikipedia.org/wiki/Incomplete_gamma_function, または http://dlmf.nist.gov/8.2#i も参照してください。
ソース
dgammaは、Catherine Loaderが提供したコード(dbinomを参照)を用いて、ポアソン密度により計算されます。
pgammaは'主にMorten Welinder'による未発表の(そして他に文書化されていない)アルゴリズムを使用しています。
qgammaは、C言語による
ベスト、D.J.とD.E.ロバーツ(1975年)。アルゴリズム AS91.カイ二乗分布のパーセンテージポイント。応用統計学, 24, 385-388.
に加え、最終的にニュートンステップで近似度を向上させます。
rgamma for shape >= 1 を使用します。
アーレンス、J.H.、ディーター、U.(1982).修正拒絶法によるガンマ変量の生成。Communications of the ACM, 25, 47-54,
で、0 < shape < 1 の場合は
アーレンス、J.H.、ディーター、U.(1974).ガンマ,ベータ,ポアソン,二項分布からサンプリングするためのコンピュータ法Computing, 12, 223-246.
参考文献
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language.Wadsworth & Brooks/Cole.
Shea, B. L. (1988) Algorithm AS 239, Chi-squared and incomplete Gamma integral, Applied Statistics (JRSS C) 37, 466-473.
アブラモウィッツ,M.,ステグン,I.A.(1972) 「数学関数ハンドブック」。New York: Dover.第6章:ガンマ関数と関連関数。
NIST Digital Library of Mathematical Functions。http://dlmf.nist.gov/、8.2項。
ですから、親愛なる皆さん、コードの移植は、統計科学者の著作の配列にコードを組み立てるのとは、まったく別次元の作業なのです。
この部分は科学的にナンセンスです。
6. Обнаруженные ошибки расчетов в R
В процессе тестирования расчетов в R была обнаружена ошибка расчета функции плотности для распределений Gamma, и ChiSquare и Noncentral ChiSquare в точке x=0.
Значение вероятности гамма-распределения в точке x=0 считается верно (gamma_cdf=0), но значение плотности гамма-распределения (функция dgamma() в R) в точке x=0 должно быть равно 0 (а показывает gamma_pdf=1) по определению плотности вероятности гамма-распределения.
Для функций ChiSquare и Noncentral ChiSquare плотность вероятности в точке x=0 также вычисляется с ошибкой:
В точке x=0 функция dchisq() выдает ненулевые значения 0.5 и 0.3032653, при этом функция pchisq() вероятности вычисляет правильно (они равны 0).
一元分布の極点における 密度関数を計算する際の慣習の違い、とでも言うべきでしょうか。そして、統計学者向けに説明する - そして、なぜ他の大会にこだわって、3年生レベルではないのか(Wolframがそう考えているから)。
さて、これが法律のセクションに関連する唯一のジョイントであることがわかった。
Для расчета вероятности нецентрального T-распределения Стьюдента в языке R используется алгоритм AS 243, предложенный Lenth [6]. Достоинством этого метода является быстрый рекуррентный расчет членов бесконечного ряда с неполной бета-функций. Но в статье [7] было показано, что из-за ошибки оценки точности при суммировании членов ряда данный алгоритм приводит к ошибкам (таблица 3 в статье [7]), особенно для больших значений параметра нецентральности delta. Авторы статьи [7] предложили скорректированный алгоритм рекуррентного расчета вероятности нецентрального T-распределения.
У нас в в статистической библиотеке MQL5 используется правильный алгоритм для расчета вероятностей из статьи [7] , что дает точные результаты.
具体的な議論から逃げようと必死だなw
少なくとも、あなたは一つの問題を認めました。チェックを行い、理解し、より良い解決策を見出すことができる専門家がいることを認め忘れています。
アレクセイ、Rからの回答を待つ。そして、@Quantumの 質問に答えなくなったことに注目してください。彼は、既知のゴールにきちんと向かって、意図的にあなたを導いているのです。
今のところ、私たちの方は Mathematica + Wolfram Alpha + Mathlab + MQL5 で、そちらの方は Opsorced R ですね。どのコードがぞんざいに書かれていて、20年前のプロジェクトに期待されるような洗練されたものでは全くないのです。