' ProbChi2(chi02, d, gamma) のExcel関数プログラム(テキスト p.161) ' ' [作成法] ' ' (1) 開発タブが見えている場合 ' 1) 開発>マクロ と進む. ' 2) マクロ名 の欄に ProbChi2 を入力する. ' 3) 作成ボタンをクリックする.Sub ProbChi2・・・End Sub がマクロ作成用テンプレート ' として用意される. ' 4) このファイルの中身をコピーし、テンプレートに貼り付けて上書きする. ' 5) 作成用ウィンドウを閉じる. ' ' (2) 開発タブが見えていない場合 ' 1) 表示>マクロ>マクロの表示 と進む. ' 2) マクロ名 の欄に ProbChi2 を入力する. ' 3) 作成ボタンをクリックする.Sub ProbChi2・・・End Sub がマクロ作成用テンプレート ' として用意される. ' 4) このファイルの中身をコピーし、テンプレートに貼り付けて上書きする. ' 5) 作成用ウィンドウを閉じる. ' ' [使用例](1行目は見出し、2行目が計算) ' | A | B | C | D | '---|---------------|-----------|----------------|------------------------| ' 1 | "chi_o^2の値" | "自由度" | "ガンマ関数" | "確率(%)" | '---|---------------|-----------|----------------|------------------------| ' 2 | =1 | =5 | =GAMMA(0.5*B2) | =100*ProbChi2(A2,B2,C2)| '---|---------------|-----------|----------------|------------------------| ' ' [注] ' 1) Excelを閉じる際は XLSM 形式で「名前をつけて保存」します. ' 2) この計算式の精度が気になるのであれば、h=0.005 の結果と比較するとよいでしょう. ' (c) S. Hayashi, 2016 '===================================================================================== Option Explicit Dim N As Integer Static Function ProbChi2(chi02 As Double, dfree As Integer, Gamma As Double) As Double Dim S0, S, x, y, fac, xmax As Double Dim i As Integer Const eps = 0.000001 Const h = 0.01 Const dxmax = 5# If chi02 <= 0 Then ProbChi2 = 1# Exit Function End If N = dfree fac = 2# * Exp(-0.5 * Log(2#) * (dfree)) / Gamma x = Sqr(chi02 * dfree) xmax = Sqr(dfree) + dxmax S0 = fun(x) i=0 S = 0# Do i=i+1 x=x+h y = fun(x) If i Mod 2 = 0 Then S=S+y Else S=S+y+y End If Loop While (y > eps) And (x < xmax) S=2#*S+ S0 ProbChi2=fac * S*h / 3# End Function Function fun(ByVal x As Double) As Double fun= Exp((N -1) * Log(x) -0.5* x * x) End Function