■超幾何関数を用いた確率分布の計算(その9)
 
 ウェルチのt検定や広津の累積χ2検定等では,小さい自由度でかつ小数付き自由度での片側確率・パーセント点を求める必要がありますが,その場合,旧来のプログラムでは,整数自由度で求めた2つの片側確率・パーセント点より,補間で求めることが必要になり,結構面倒ですし,なによりせっかくの精度が台なしです.とくに,自由度が小さい場合には正確な値が得られません.
 
 そこで,一連のコラムでは,小数付き自由度の場合でも使える確率分布の計算プログラムを掲載してきましたが,その計算結果は簡約統計数値表と比べても高精度であり,しかも小数付き自由度でも使えることがわかりました.
 
 自由度が整数でなく,小数点以下の端数をもつとき,旧来のプログラムの対処法は
  a)端数を切り捨てて,整数自由度に丸める
  b)前後2つの整数自由度での値からの内挿補間によって求める
かのいずれかです.
 
 内挿補間とはいっても,関数が直線で近似できる場合には,
  @直線補間 (要するに単純な比例配分)
でいいのですが,直線で近似できるとは限らないので,その場合,
  A自由度の逆数による補間
  Bラグランジュ補間(n個の標本点において与えられた値をとるn−1次の多項式)
をしているものなど,いろいろな対処法がみられました.そこで,今回は超幾何関数を用いた確率分布の計算値と各種補間法によって求められた値を比較することにしました.
 
===================================
 
【プログラム】
 
1000 OPEN "SCRN:" FOR OUTPUT AS #3
1010 '
2000 NR=10
2010 DIM X(NR),Y(NR),MS(NR),SP(4,NR)
2020 '
2030 P0=.95
2040 FOR I=1 TO 10
2050 DF=I:PRINT #3,DF;
2060 'GOSUB *CHI2.PERCENT1  :PRINT #3,UUX;
2070 'GOSUB *CHI2.PERCENT.HGF:PRINT #3,UUX
2080 'X(I)=DF:Y(I)=UUX
2090  GOSUB *T.PERCENT1  :PRINT #3,UUT;
2100  GOSUB *T.PERCENT.HGF:PRINT #3,UUT
2110  X(I)=DF:Y(I)=UUT
2120 NEXT I
2130 '
2140 FOR K=1 TO 9
2150  X=X(K)+.5:PRINT #3,X;
2160  X1=INT(X) :Y1=Y(X1)
2170  X2=INT(X)+1:Y2=Y(X2)
2180  M=(X-X1)/(X2-X1)
2190  Y=Y1*(1-M)+Y2*M:PRINT #3,Y
2200 NEXT K
2210 'END
2220 '
2230 FOR K=0 TO 9
2240  X=X(K)+.5:PRINT #3,X;
2250  GOSUB *LAGRANGE:PRINT #3,Y
2260 NEXT K
2270 'END
2280 '
2290 GOSUB *SPLINE
2300 FOR K=1 TO 9
2310  X=X(K)+.5:PRINT #3,X;
2320  Y=((SP(1,K)*X+SP(2,K))*X+SP(3,K))*X+SP(4,K)
2330  PRINT #3,Y
2340 NEXT K
2350 END
2360 '
2370 *LAGRANGE:
2380 Y=0
2390 FOR J=1 TO NR
2400  A=1
2410  FOR I=1 TO NR
2420   IF I<>J THEN A=A*(X-X(I))/(X(J)-X(I))
2430  NEXT I
2440  Y=Y+A*Y(J)
2450 NEXT J
2460 RETURN
2470 '
2480 *SPLINE:
2490 MS(1)=0:MS(NR)=0
2500 SP(1,1)=0:SP(1,NR)=1
2510 SP(2,1)=2*MS(1):SP(2,NR)=2*MS(NR)
2520 SP(3,1)=2
2530 SP(4,1)=SP(2,1)
2540 FOR SI=2 TO NR-1
2550  SP(1,SI)=(X(SI+1)-X(SI))/(X(SI+1)-X(SI-1))
2560  P1=(Y(SI+1)-Y(SI))/(X(SI+1)-X(SI))
2570  P2=(Y(SI)-Y(SI-1))/(X(SI)-X(SI-1))
2580  SP(2,SI)=6*(P1-P2)/(X(SI+1)-X(SI-1))
2590 NEXT SI
2600 FOR SI=2 TO NR
2610  P1=(1-SP(1,SI))/SP(3,SI-1)
2620  SP(3,SI)=2-P1*SP(1,SI-1)
2630  SP(4,SI)=SP(2,SI)-P1*SP(4,SI-1)
2640 NEXT SI
2650 MS(NR)=SP(4,NR)/SP(3,NR)
2660 FOR SI=NR-1 TO 2 STEP -1
2670  MS(SI)=(SP(4,SI)-SP(1,SI)*MS(SI+1))/SP(3,SI)
2680 NEXT SI
2690 '
2700 FOR SI=2 TO NR
2710  SH=X(SI)-X(SI-1)
2720  SP(1,SI-1)=(MS(SI)-MS(SI-1))/SH/6
2730  SP(2,SI-1)=(X(SI)*MS(SI-1)-X(SI-1)*MS(SI))/SH/2
2740  P1=(MS(SI)*X(SI-1)^2-MS(SI-1)*X(SI)^2)/SH/2
2750  SP(3,SI-1)=P1+(MS(SI-1)-MS(SI))*SH/6+(Y(SI)-Y(SI-1))/SH
2760  P1=(Y(SI-1)/SH-MS(SI-1)*SH/6)*X(SI)
2770  P1=P1-(Y(SI)/SH-MS(SI)*SH/6)*X(SI-1)
2780  SP(4,SI-1)=P1+(MS(SI-1)*X(SI)^3-MS(SI)*X(SI-1)^3)/SH/6
2790 NEXT SI
2800 RETURN
 
===================================
 
【直線補間】
 
 まず,直線補間の計算例を示しますが,一般に,自由度が10未満では直線補間して求めるプログラムを用意しているものが多いようです.
 
(1)χ2分布の上側5%点の計算精度(小数自由度)
 
自由度     補間値       計算値       数値表
.5                2.42024       2.420
1                3.84146       3.841
1.5      4.91646      4.98018       4.980
2                5.99146       5.991
2.5      6.90309      6.92808
3                7.81473       7.815
3.5      8.65124      8.66512
4                9.48775       9.488
4.5      10.2791      10.2882
5                11.0705       11.07
5.5      11.8311      11.8376       11.84
6                12.5916       12.59
6.5      13.3294      13.3343       13.33
7                14.0671       14.07
7.5      14.7873      14.7911       14.79
8                15.5074       15.51
8.5      16.2132      16.2164       16.22
9                16.919       16.92
9.5      17.6131      17.6157       17.62
10                18.3072       18.31
 
(2)t分布の上側5%点の計算精度(小数自由度)
 
自由度     補間値       計算値       数値表
.5                41.1359       41.136
1                 6.31375       6.314
1.5      4.61687      3.70518       3.705
2                2.91998       2.920
2.5      2.63667      2.55822
3                2.35336       2.353
3.5      2.2426       2.22243
4                2.13185       2.132
4.5      2.07345      2.06558
5                2.01505       2.015
5.5      1.97911      1.97528       1.975
6                1.94318       1.943
6.5      1.91888      1.91674       1.917
7                1.89458       1.895
7.5      1.87706      1.87575       1.876
8                1.85955       1.860
8.5      1.84633      1.84547       1.845
9                1.83311       1.833
9.5      1.82279      1.82219       1.822
10                1.81246       1.812
 
===================================
 
【ラグランジュ補間】
 
 相異なるn+1点の標本点に関するn次補間多項式はただひとつ存在します.これをラグランジュ補間といいます.
 
 直線補間は1次のラグランジュ補間と一致しますが,ここでは自由度が1から10までの10組の計算値から計算した9次の多項式で近似してみることにします.また,自由度が0.5の場合は補外(外挿)により推定しています.
 
(1)χ2分布の上側5%点の計算精度(小数自由度)
 
自由度     補間値       計算値       数値表
.5      2.49438      2.42024       2.420
1                3.84146       3.841
1.5      4.9784       4.98018       4.980
2                5.99146       5.991
2.5      6.92827      6.92808
3                7.81473       7.815
3.5      8.66508      8.66512
4                9.48775       9.488
4.5      10.2882      10.2882
5                11.0705       11.07
5.5      11.8376      11.8376       11.84
6                12.5916       12.59
6.5      13.3344      13.3343       13.33
7                14.0671       14.07
7.5      14.7912      14.7911       14.79
8                15.5074       15.51
8.5      16.2165      16.2164       16.22
9                16.919       16.92
9.5      17.6156      17.6157       17.62
10                18.3072       18.31
 
(2)t分布の上側5%点の計算精度(小数自由度)
 
自由度     補間値       計算値       数値表
.5      12.4125      41.1359       41.136
1                 6.31375       6.314
1.5      3.85603      3.70518       3.705
2                2.91998       2.920
2.5      2.54482      2.55822
3                2.35336       2.353
3.5      2.2426       2.22243
4                2.13185       2.132
4.5      2.06438      2.06558
5                2.01505       2.015
5.5      1.97606      1.97528       1.975
6                1.94318       1.943
6.5      1.91594      1.91674       1.917
7                1.89458       1.895
7.5      1.87702      1.87575       1.876
8                1.85955       1.860
8.5      1.84214      1.84547       1.845
9                1.83311       1.833
9.5      1.83896      1.82219       1.822
10                1.81246       1.812
 
===================================
 
【スプライン補間】
 
 スプライン関数とは,多項式を連続条件を満たすように接続した区分多項式であり,3次スプライン関数はその多項式に2次導関数まで連続となるような3次式を用いたものです.区間ごとに次の係数a,b,c,dを算定し,有限区間を補間します.
 
 スプライン曲線     : y=ax3 +bx2 +cx+d
 1次導関数(曲線の傾き): y’=3ax2 +2bx+c
 2次導関数(曲率)   : y”=6ax+2b
 
 3次スプライン補間では2次導関数は折れ線(1次のスプライン関数)ですので,これを2回積分して係数を決定します.通常,曲線の始点と終点ではその外側に接続されるべきセグメントがないので,境界条件としては両端点における2次微係数を0とした自然スプライン曲線により任意の点における曲線形状を定めます.係数a,b,c,dはサブルーチン中の変数SP(i,j)   (i=1〜4)で与えられます.→【補】
 
 ラグランジュ補間(n個の標本点において与えられた値をとるn−1次の多項式)・エルミート補間(標本点における微分係数まで一致する2n−1次の多項式)は計算量は少ないのですが,高次式であるため振動しやすい欠点を有しています.それに対して,3次スプライン補間は3次式で補間するため多項式補間よりも振動しにくく,変曲点も表現できる優れた性質をもつ補間法ですので,実験データの処理に有効です.
 
 3次のスプライン関数は歪エネルギーを最小にする曲線であり自在定規によって描かれた曲線は3次のスプライン関数に近似的に等しいこと,および,近似精度と計算量の兼ね合い(1次・2次では近似精度が不十分,3次を越えれば計算量がかなり増加する)からもっとも多く利用されています.
 
(1)χ2分布の上側5%点の計算精度(小数自由度)
 
自由度     補間値       計算値       数値表
.5                2.42024       2.420
1                3.84146       3.841
1.5      4.9458       4.98018       4.980
2                5.99146       5.991
2.5      6.93761      6.92808
3                7.81473       7.815
3.5      8.66271      8.66512
4                9.48775       9.488
4.5      10.2889      10.2882
5                11.0705       11.07
5.5      11.8374      11.8376       11.84
6                12.5916       12.59
6.5      13.3344      13.3343       13.33
7                14.0671       14.07
7.5      14.7911      14.7911       14.79
8                15.5074       15.51
8.5      16.2167      16.2164       16.22
9                16.919       16.92
9.5      17.6149      17.6157       17.62
10                18.3072       18.31
 
(2)t分布の上側5%点の計算精度(小数自由度)
 
自由度     補間値       計算値       数値表
.5                41.1359       41.136
1                 6.31375       6.314
1.5      4.34141      3.70518       3.705
2                2.91998       2.920
2.5      2.40289      2.55822
3                2.35336       2.353
3.5      2.26365      2.22243
4                2.13185       2.132
4.5      2.05437      2.06558
5                2.01505       2.015
5.5      1.97823      1.97528       1.975
6                1.94318       1.943
6.5      1.91592      1.91674       1.917
7                1.89458       1.895
7.5      1.87597      1.87575       1.876
8                1.85955       1.860
8.5      1.84536      1.84547       1.845
9                1.83311       1.833
9.5      1.82239      1.82219       1.822
10                1.81246       1.812
 
===================================
 
【補間値の比較】
 
 直線補間,ラグランジュ補間,スプライン補間によって得られた値を比較します.最良補間値には*印,最悪補間値に/印をつけましたが,全般的にみて,ラグランジュ補間が最も真値に近いようです.
 
(1)χ2分布の上側5%点の計算精度(小数自由度)
 
自由度   直線補間   ラグランジュ   スプライン   計算値
.5            2.49438              2.42024
1.5    4.91646/   4.9784*      4.9458     4.98018
2.5    6.90309/   6.92827*     6.93761     6.92808
3.5    8.65124/   8.66508*     8.66271     8.66512
4.5    10.2791/   10.2882*     10.2889     10.2882
5.5    11.8311/   11.8376*     11.8374     11.8376
6.5    13.3294/   13.3344*     13.3344*    13.3343
7.5    14.7873/   14.7912      14.7911*    14.7911
8.5    16.2132/   16.2165*     16.2167     16.2164
9.5    17.6131/   17.6156*     17.6149     17.6157
(2)t分布の上側5%点の計算精度(小数自由度)
 
自由度   直線補間   ラグランジュ   スプライン   計算値
.5            12.4125              41.1359
1.5    4.61687/   3.85603*     4.34141     3.70518
2.5    2.63667    2.54482*     2.40289/    2.55822
3.5    2.2426    2.22541*     2.26365/    2.22243
4.5    2.07345    2.06438*     2.05437/    2.06558
5.5    1.97911/   1.97606*     1.97823     1.97528
6.5    1.91888/   1.91594*     1.91592     1.91674
7.5    1.87706/   1.87702      1.87597*    1.87575
8.5    1.84633    1.84214/     1.84536*    1.84547
9.5    1.82279    1.83896/     1.82239*    1.82219
 
 自由度が半整数のとき,直線補間の誤差はラグランジュ補間の誤差よりも大きくなることが予想されますが,やはり,直線補間では,小数点つきの小さい自由度に対して,統計数値表の精度を実現できないようです.ただし,t分布の自由度が10に近いところでは,ラグランジュ補間は直線補間よりも悪いという結果が得られました.これは,ラグランジュ補間の振動しやすい欠点によるものと推測されます.また,スプライン補間の計算精度は,前2者の中間に位置しています.
 
 なお,簡約統計数値表に紹介されている小数点自由度のχ2分布,t分布のパーセント点は,補間によって求められたものでないことは明らかです.超幾何関数と類似の方法,多分,不完全ガンマ関数や不完全ベータ関数を小数点自由度まで拡張させた計算方法を採っているものと推測されます.
 
 残念ながら,簡約統計数値表が採用している計算方法は公開されていないようですが,パラメータに関する漸化式,微分に関する漸化式などを利用して計算速度を速くすることまで考慮すると,不完全ガンマ関数・不完全ベータ関数よりも超幾何関数のほうが何かと便利です.
 
===================================
 
【補】パラメトリックスプライン
 
 前述したことは,x−y平面にある補間曲線がy=f(x)と表される場合,すなわち一価関数については利用できますが,xのある値に対しyの値を複数もつような多価関数f(x,y)=0の表現はできません.
 
 多価関数f(x,y)=0に対してもスプライン曲線を描けるようにするためには,独立変数x,yを用いるのではなく,パラメータ表示[x=x(t),y=y(t)]の一意に定まるパラメータtを導入して補間曲線上の座標(x,y)に替わる新しい点列(t,x),(t,y)の各区間における補間値を求めるようにします.このようなスプライン関数をパラメトリックスプラインと呼びます.
 
 パラメトリックスプラインでは,端点における境界条件を自然条件にすると始点と終点を重ねたときその点が尖点となってしまいます.そこで滑らかな閉曲線を求める場合には始点と終点で接線の方向が一致する周期条件を用いる必要があります.開曲線の両端は自然スプラインにしますが,閉曲線では周期スプラインにすると,始点と終点が急な角度で結ばれることはありません.
 
 3次スプライン補間の詳細については,「スプライン関数とその応用」(市田浩三,教育出版),「数値計算法」(長島秀世,槙書店),「パソコンによるスプライン関数」(吉村和美,電気大出版局)などを参照して下さい.
 
===================================