#問題文
正規母関数より標本10を取り、標本平均Yを算出する。このとき、標本平均Yの標本分散が母関数の分散の1/2倍より小さいか、または母関数の分散の2倍より大きくなる確率を答えよ
#アプローチ
自由度10-1のカイ二乗分布を定積分する。
#トラブル
計算結果が合わない。
正答(25.85%)より10%程度低く算出されてしまう。
#ゴール
ソースコード上の具体的な問題点の把握
または正答自体の誤りの把握
#ソースコード
Python
1print("preparing") 2 3import pandas as pd 4import sympy as sym 5import sympy.stats as sst 6import sympy.plotting as spl 7 8import matplotlib.pyplot as plt 9 10sym.init_printing() 11oo = sym.oo 12 13 14sigma, s, x, mu, mu2, m, n, n2 = sym.symbols( 15 "sigma,s,x,mu,mu2,m,n,n2", real=True) 16sigma = sym.Symbol("sigma", positive=True) 17 18# %% 19def temp_f(n_2): 20 # カイ二乗分布の取得 21 f = sst.ChiSquared(x, n_2-1) 22 f = sst.density(f)(x) 23 24 # 上限値と下限値の設定 25 up = 2*sigma**2 26 down = (1/2)*sigma**2 27 28 # 評価するパラメータ 29 par = s**2 30 31 # パラメータをカイ二乗統計量に変換するための写像を取得 32 temp = sym.Eq((n_2-1)*s**2/sigma**2, m*par) 33 g = sym.solve(temp, m)[0] 34 35 # 上限下限の値にもその写像を適用 36 up = up*g 37 down = down*g 38 39 # カイ二乗分布の方程式は計算に非常に時間がかかるのでテイラー展開(n=20) 40 print("expanding") 41 f = sum([f.subs(x, x+(up+down)/2).taylor_term(i, x) for i in range(20)]) 42 43 # 分布関数を定積分 44 print("now integrating") 45 F = sym.integrate(f.subs(x, x-(up+down)/2), (x, down, up)) 46 print("integrate done") 47 48 return F.evalf() 49 50# %% 51r= temp_f(10) 52print(1-r)
#実行環境
Python3.6.7 | conda base
VS Code 1.8.2 | with Jupyter extension
#備考
グローバル変数ガンガンに使っててヤバイのは把握してますがなんかのサービスにデプロイするつもりはないのでご勘弁ください。
回答1件
あなたの回答
tips
プレビュー