Daniel Bernoulliの発想を継承した二項分布の正規近似の導出
Daniel Bernoulliの正規曲線の方程式の導出法
https://doi.org/10.34336/jhsj.25.158_89
に、Daniel Bernoulliが1770年頃に発表したらしい、二項分布の正規近似の導出法が書かれてて、ちょっと面白い議論だった。
二項分布の正規近似は、de Moivreの1733年の論文に起源があるとされる。de Moivreは、本質的には、現代の殆どの教科書で使われてるのと同様、Stirlingの公式を使った議論を行ったのだろう。このStirlingの公式も、発見したのは、de Moivreとされている。
Stirlingの公式に関するde Moivreの議論は、以下の論説に詳しい。
The Early History of the Factorial Function
https://doi.org/10.1007/BF00389433
de Moivreの元々の動機からして、二項係数に端を発していて、その途中で、de Moivreは、
という形の式を証明したらしい。はベルヌーイ数。この定数がであることを指摘したのが、Stirlingだったそうだ。この公式が、Stirlingの公式と呼ばれるようになった経緯は知らない。
この論説の中にあるDaniel Bernoulliから、Goldbachへの1729年の手紙というのは
File:DanielBernoulliLetterToGoldbach-1729-10-06.jpg
https://commons.wikimedia.org/wiki/File%3ADanielBernoulliLetterToGoldbach-1729-10-06.jpg
で読める。簡潔で証明もないけど、ガンマ関数の無限積表示が与えられているっぽい。これはGoldbachが出した問題に対する解答っぽいけど、同じ問題に対するEulerの解答が、
De progressionibus transcendentibus seu quarum termini generales algebraice dari nequeunt
https://scholarlycommons.pacific.edu/euler-works/19/
にある(Euler archiveのE19)。この報告では、ガンマ関数の積分表示(9ページ目。式の形は、現在の標準的なものとは違い、ちょっとした変数変換がいる。あと、英訳版は、lnが誤植っぽい?)が見られる。何にせよ、彼らは、確率論とは異なる文脈で、ガンマ関数に到達したらしい。
正規近似に関するD.Bernoulliの論文は、
Mensura sortis ad fortuitam successionem rerum naturaliter contingentium applicata (1770)
Continuatio argumenti de mensura sortis ad fortuitam successionem rerum naturaliter contingentium applicata (1771)
と2本あったようだが、電子化された原文を見つけられなかった。
D.Bernoulliによる正規近似の導出は、冒頭の論文に書かれてるけど、少し記号を変えて再構成すると以下のような議論。
正数と自然数、0〜1の実数に対して、
とすると、
が成り立つ。、,と記号を導入すると、
と変形できる。を実数上定義された微分可能な関数であれば
なので、が、で、ほぼ一定であれば、微分方程式
を得る。これは初期条件の元で解くことができる。
関数方程式を微分方程式で近似するタイプの議論は、他にもいくつか存在する。例えば、
の解は、ベルヌーイ多項式だけど、
と置き換えると
と解けて、ベルヌーイ多項式の主要項が得られる。
もうひとつの例として
なら、対数を取って
なので、同様の近似によって
という形で、de Moivre-Stirlingの公式の主要項が得られる。
そうは言っても、この議論は、ちょっと荒っぽい。後者の議論に関連して、大学一年レベルの解析学の教科書には
という不等式が書いてある。正規近似の導出でも、同じようなことができそうか考える。
関数方程式に立ち戻ると、解きたいのは
だけど
と置くと
という形になる。
の時、なので対数を取って、
になる。で、は、単調減少関数なので
が成り立つ。従って
なので
となる。
更に
を使うと、
が示せる。
上側の評価は、似たような議論で、もう少し改善できて、
を示すことが出来る。
の時も、同じような議論ができるが省略。以下、で考える。は、実数値を取るとしてるが、例えば、が、で単調減少すると仮定すると
と分解(は、xを超えない最大の整数)して、は、Nが大きくなると、0に近付く。ちゃんと計算すると、(が、で単調減少するという仮定のもとで)xが自然数の時と同じように、xが任意の実数の時でも同様の不等式の成立を示すことができる。
数値例を一つ見ておく。ベータ関数を使うと、関数方程式の一つの厳密解を書くことができ、これに対して、
という関数を定義する。ここで考えた近似解に対して同様の関数を計算すると、
を得る。また、ベルヌーイによる微分方程式の解からは
が得られる。
これらの関数をの時、プロットすると、以下のようになる。
厳密解は、とのほぼ中間を通り、は、Nが比較的小さい時でも、厳密解とよく一致する。微分方程式解から得られるは、xが0の近くにある時には、と近い値を取るが、xが大きくなると、乖離が目立つ。
正規近似を得るには、をTaylor展開して、二次の項まで取ればいい。大体の計算は、素直に展開してけばいい。
という分解を使うといい。このへんの議論は、冒頭の論説と本質的には変わらないので省略。
グラフ作成コード
import math from scipy.special import betaln import numpy as np import matplotlib.pyplot as plt N,p=106,0.23 M=p*N def exact(x): return x * math.log(p/(1-p)) - betaln(M+x+1 , (1-p)*M/p - x + 1) + 0*(M*math.log(p) + ((1-p)*M/p) * math.log(1-p) - math.log(N+1)) + betaln(M+1 , (1-p)*M/p+1) def approx(x): w = p/(1-p) C = (M*math.log(M/(M+1)) + (M*w+M+w)*math.log(M+1))/w return ((w*x-M)*math.log((M-w*x)/(M+x+1)) - (M*w+M+w)*math.log(M+x+1))/w + C def C(x): w = p/(1-p) return -(1+w)*x + (M*w+M+w)*math.log((M+x+1)/(M+1)) if __name__=="__main__": x = (np.arange(4000)/100 - 20) y1 = np.vectorize(exact)(x) y2 = np.vectorize(approx)(x) y3 = np.vectorize(approx)(x-1)-approx(-1) y4 = np.vectorize(C)(x) y5 = (y2+y3)/2 plt.plot(x,y1 ,label="E(x)" , linewidth=3 ,alpha=0.6) plt.plot(x,y2 , label="M(x)",linestyle="dashed") plt.plot(x,y3 , label="M(x-1)-M(-1)",linestyle="dashed") plt.plot(x,y4 , alpha=0.8 , label="C(x)" , linewidth=5 , linestyle="dotted") plt.plot(x,y5 , alpha=1 , label="(M(x)+M(x-1)-M(-1))/2" , linewidth=5 , linestyle="dotted") plt.legend() plt.show()