excel を使って信頼区間を求める 試行数,n, 100 生起数,x, 7 α,alpha,=0.05 下側信頼限界, , 自由度1,dfl_1,= 2*(n-x+1) 自由度2,dfl_2,= 2*x PL,PL,"=dfl_2/(dfl_1*finv(alpha/2,dfl_1,dfl_2)+dfl_2)" 上側信頼限界,, 自由度1,dfu_1,= 2*(x+1) 自由度2,dfu_2,= 2*(n-x) PU, PU,"=dfu_1*finv(alpha/2,dfu_1,dfu_2)/(dfu_1*finv(alpha/2,dfu_1,dfu_2)+dfu_2)" これをベータ分布で行うと、,, 下側信頼限界,PBL,"=betainv(alpha/2,x,n-x+1)" 上側信頼限界,PBU,"=betainv(1-alpha/2,x+1,n-x)" |
試行数 | n | 100 |
生起数 | x | 7 |
α | alpha | 0.05 |
信頼下限 | ||
自由度1 | dfl_1 | 188 |
自由度2 | dfl_2 | 14 |
PL | PL | 0.028605222 |
信頼上限 | ||
自由度1 | dfu_1 | 16 |
自由度2 | dfu_2 | 186 |
PU | PU | 0.138919802 |
これをベータ分布で行うと、 | ||
下限 | PBL | 0.028605223 |
上限 | PBU | 0.13891983 |
2項分布とベータ分布との関係 (蓑谷(1998:p172)を参考にした) nを試行回数、pを母比率(成功確率), xを 0 以上 n 以下の任意の整数(成功回数)とする。 X〜b(n,p) (Xはパラメータ n, p の2項分布に従う確率変数), Y〜BETA(x,n-x+1) (Yはパラメータx,n-x+1のベータ分布に従う確率変数)とする。 このときXの上側確率P(X>=x)を、次のようにしてベータ分布から求めることができる。 P(X>=x)=P(Y<=p) |
xのときの上側確率αの母比率をp(α)(x) xのときの下側確率αの母比率をp(α)(x) と表す。 p(1-α)(x)=p(α)(x-1) for x=1,2,...,n. p(1-α)(x)=1-p(1-α)(n-x) for x=0,1,...,n. この2つの式から次の式が導きだされる。 p(1-α)(x)=1-p(α)(n-x-1) for x=0,1,...,n-1. |
40000回コインを投げて,20,400回以上、あるいは19,600以下表がでることは、どの程度の確率であろうか。 |
Function critbinomex(試行回数, 成功率_母比率, 確率) '返値:限界値 '=CRITBINOM(100,0.5,0.05/2) n = 試行回数 p0 = 成功率_母比率 p = 確率 '前処理 If (p0 <= 0) Or (p0 >= 1) Then critbinomex = "#NUM!:母比率は0と1の間です" Exit Function End If If (p < 0) Or (p > 1) Then critbinomex = "#NUM!:上側累積確率は0以上1以下の値です" Exit Function End If n = Int(n) 'nは整数。小数点以下は切り捨て If n <= 0 Then critbinomex = "#NUM!試行回数は1以上の数です" Exit Function End If '本処理 tmp = binominv(n, p0, p) critbinomex = Int(tmp * n) '母比率より高いときは小数点以下切り捨て If (tmp < p0) And (tmp <> critbinomex) Then '母比率より低いときは小数点以下切り上げ critbinomex = critbinomex + 1 End If End Function Function binominv(試行回数, 成功率_母比率, 確率) '返値:成功回数の比率(母比率より上と下で違ってくる。' ' 母比率より下では(1-確率)の下側確率を確保 ' 母比率より上では(確率)の上側確率を確保 ' '=betainv(alpha/2,k,n-k+1) n = 試行回数 p0 = 成功率_母比率 p = 確率 esp = 0.000000000001: '1e-12 If (p0 >= 1#) Or (p0 <= 0#) Or (p >= 1#) Or (p <= 0#) Then binominv = "#NUM!" Exit Function End If xl = 0# xr = n k = 0 Do k = k + 1 xm = (xl + xr) * 0.5 If p0 * n >= xm Then temp = Application.BetaInv(1 - p, xm + 1, n - xm): Else temp = Application.BetaInv(1 - p, xm, n - xm + 1) End If If (temp < p0) Then xl = xm Else xr = xm End If If xm = 0 Then Exit Do If k >= 100 Then Exit Do Loop Until ((Abs(xr - xl) / n) < esp) binominv = xm / n If binominv < esp Then binominv = 0 If (1 - binominv) < esp And xr = n Then binominv = 1 If k >= 100 Then If xl = 0 Then binominv = 0 Else: If xr = n Then binominv = 100 Else binominv = "収束しませんでした:k>=100:xl" + Str(xl) + ":x=" + Str(xr) End If End If End Function Function binomdistex(成功数, 試行回数, 成功率, 関数形式) 'BINOMDIST(成功数, 試行回数, 成功率, 関数形式) 'BETADIST(x, α, β, A, B) x = 成功数 n = 試行回数 p0 = 成功率 ftype = 関数形式 If p0 > 1 Or p0 < 0 Or n < x Or n < 1 Then binomdistex = "#NUM" Exit Function End If If n < x Or n < 1 Then binomdistex = "#NUM:試行回数は1以上かつ成功数以上でなけばなりません" Exit Function End If binomdistex = 0 If x = n Then binomdistex = 1 Else binomdistex = 1 - Application.BetaDist(p0, x + 1, n - x) End If If Not (ftype) Then If x = 0 Then Exit Function y = 1 - Application.BetaDist(p0, x, n - x + 1) binomdistex = binomdistex - y End If End Function |
コラム excel BINOMDIST(成功数, 試行回数, 成功率, 関数形式)関数の計算のおかしなところ =binomdist(7,10,0,true) =binomdist(7,10,1,true) どちらも 0 を返してきます(trueは累積を求める)。母比率0.0 のときは7のときの累積は1.00にならないといけない。 |