F分布のパーセント点     Last modified: May 15, 2002

 自由度 df1, df2 のF分布において,上側確率が p に対するパーセント点を与える関数です。


# F分布のパーセント点を求める。

function pxf(p0, df1, df2,     p9, xl, xm, xr, c, temp, ok)
{
   ok = 0
   
   xl = 0
   xr = 10
   while (xr < 1e30) {
       p9 = fxp(xr, df1, df2)
       if (p9 == p0) {
           return xr
       }
       else if (p9 < p0) {
           ok = 1
           break
       }
       xl = xr
       xr *= 10
   }
   
   if (ok == 0) {
       if (df1 > df2) {
           temp = df1
           df1 = df2
           df2 = temp
           p0 = 1-p0
           ok = 1
       }
       if (df1 == 1) {
           c = pxt(p0, df2)
           c = c*c
       }
       else {
           temp = df1-2.0
           printf "pxf(1): 近似計算を行いました。" > "/dev/stderr"
           c = pxx(p0, df1)
           c = c/df1*(1+ (c-temp)*0.5/df2 + (4*c*c-11*temp*c \
               +temp*(7*df1-10))/(24*df2^2)+(2*c^3-10*temp*c*c \
               +temp*(17*df1-26)*c-(df1-2)*temp*(9*df1-6))/(48*df2^3))
       }
       return (ok == 1 && c != 0) ? 1/c : c
   }
   
   do {
       xm = (xl+xr)*0.5
       p9 = fxp(xm, df1, df2)
       if (p9 > p0) {
           xl = xm
       }
       else {
           xr = xm
       }
   } while (abs(xr-xl)/xm > 1e-10)
   
   return xm
}

・ 直前のページへ戻る  ・ E-mail to Shigenobu AOKI