■t分布の乱数発生アルゴリズム

 点推定よりも区間推定できるほうが「精度保証つき」計算という面からいって格段と優れていることはいまさらいうまでもありません.
 
 最小2乗法において,パラメータの信頼区間は分散・共分散行列の対角要素から求めることができます.パラメータの誤差の導出はやや難解ですので,おしつけがましく結果だけを示しておきますが,パラメータθjの100(1−α)%信頼区間は,
  θj±t(α/2,n−m)√V(θj)   (j=1〜m)
によって与えられます.ただし,
  n:データ数
  m:パラメータ数
  σ^2=Σ(yi−f(xi))^2/(n−m)   残差の不偏分散
  V(θj)=σ^2Δjj   θjの不偏分散
 
 ここで,Δは分散・共分散行列と呼ばれるm次の対称行列で,gを行ベクトルとするとき,gΔg’が正定値2次形式になるという性質をもっています.また,最小2乗推定量θjは最良線形不偏推定量(BLUE),すなわち,線形不偏推定量の中で分散が最小のもの(最小分散不偏推定量)になっています.これらに関する参考文献は多数ありますから,天下り式で我慢できないかたはぜひ参照してください.
 
 ところで,最小2乗法によって推定されるパラメータの値を使ってモンテカルロ・シミュレーションを行う必要に迫られるときがあります.その際,パラメータの分布はt分布に従うわけですから,正規乱数ではなくて,t乱数を発生させなければなりません.
 
 しかし,t乱数がモンテカルロ・シミュレーションに用いられることはほとんどなく,通常は正規乱数で代用されています.モンテカルロ法の精度はラフなので厳密さにこだわる必要はなかろうというのがおおかたの意見かもしれませんが,今回のコラムでは,モンテカルロ法が粗雑であるからこそ厳密にという考えから,t乱数を用いたモンテカルロ法の話題を取り上げたいと思います.
 
===================================
 
【1】t乱数の発生法
 
 t乱数を発生させるには,正規乱数とカイ2乗乱数を組み合わせてつくるのがもっとも近道と思われます.すなわち,xが標準正規分布に従い,yが自由度dfのχ^2分布に従うとき,
  t=x/√(y/df)
は自由度dfのt分布に従うことを利用するのです.
 
 uを区間[0,1]の一様乱数とすると,それから正規乱数zを発生させる方法はいくつかあって,たとえば,
  a)中心極限定理を利用する発生法
  b)ボックス・ミューラー(Box-Muller)法
などが知られています.→【補】
 
 一方,カイ2乗乱数は,以下のようにして発生させます.
 
(1)指数乱数
 指数分布はF(x)=1-exp(-x)  F^(-1)(x)=-log(1-x)
したがって,uを一様乱数とすると逆関数法によりx=-log(1-u)
1-uも(0,1)上の一様乱数であるから,x=-loguとする.
これより,平均値1の指数分布(自由度1のガンマ分布)が得られます.
 
 また,尺度母数θの指数分布,すなわち,平均値θの指数分布乱数は,変換
  y=-1/θlogx
によって得ることができます.たとえば,y=-2logxは一様乱数を平均値2の指数分布に変換します.
 
(2)ガンマ乱数
 k個の一様乱数u1,u2,・・・,ukを用いて
  y=-1/θlog(u1*u2*・・・*uk)
とすると平均値θ,自由度kのガンマ乱数が得られます.なお,kが大きいときにはこの方法は効率的ではなく,またkが整数でないときには適用できません.
 
(3)カイ2乗乱数
 Gが自由度df/2のガンマ分布に従うとき,2Gは自由度dfのカイ2乗分布に従いますから,
  t=x/√(2G/df)
の分布はt(df)となります.
 
 したがって,自由度dfの奇偶によって,df/2が半整数(整数+1/2)あるいは整数のガンマ乱数を作ればよいことになります.自由度が1のガンマ分布は平均1の指数分布ですが,自由度1/2は標準正規分布をする確率変数をzとするとき,z^2/2の分布に対応します.
 
 ここで,ガンマ分布の再生性「変数xiがガンマ分布G(αi,β)にしたがうとき,Σxiはガンマ分布G(Σαi,β)に従う.」すなわち,ガンマ分布にしたがう変数の和もガンマ分布になるという性質をもっていますから,カイ2乗乱数は指数乱数および正規乱数を使って容易に作れることになります.
 
(4)標準t乱数
 (1)〜(3)により,自由度dfのt分布が得られたことになりますが,この分布の平均は0,分散はdf/(df-2)で与えられます.
  E[x]=0
  V[x]=df/(df-2)
 
 ここで
  (x-E[x])/√V[x]
と変数変換すると,平均0,標準偏差1の分布が得られます.これを規格化(standardizationあるいはnormalization)といいます.t分布の場合,
  (x-E[x])/√V[x]=x*√(df-2)/df
となりますが,このようにすると,任意の分布において規格化された分布が得られます.
 
 逆に,もしtが標準t乱数すなわち平均0,標準偏差1のt乱数ならば,平均m,標準偏差sのt乱数を発生させるには,
  m+st
として計算すればよいわけです.
 
===================================
 
(プログラム)
 
 2310〜2500行では,正規乱数とガンマ乱数を組み合わせてt乱数を発生させています.(1)〜(4)の考え方は20行ほどのプログラムとしてまとめることができました.
 
1000 '
1010 ' **** 正規乱数とt乱数 (RANDOM) ****
1020 '
1030 SCREEN 3,0:CONSOLE ,,0,1:CLS 3
1040 GOSUB *INITIALIZE
1050 GOSUB *MENU
1060 END
1070 '
1080 ' *** 初期設定 ***
1090 '
1100 *INITIALIZE:
1110 MENU.NO=3:DIM MENU$(MENU.NO)
1120 MENU$(0)="終了"
1130 MENU$(1)="正規乱数(中心極限定理)"
1140 MENU$(2)="正規乱数(Box-Muller法)"
1150 MENU$(3)="t乱数"
1160 ANS$="Yy"+CHR$(&HD)
1170 PI=3.14159
1180 '
1190 INPUT "No. of paremeters=";NP
1200 INPUT "No. of data=";ND
1210 INPUT "No. of sets of random numbers=";NS
1220 PRINT
1230 INPUT "OK?  (Y/N)";OK$
1240 IF INSTR(ANS$,OK$)=0 THEN 1180
1250 DF=ND-NP:' degree of freedom
1260 DIM EX(NP),SD(NP)
1270 DIM Y(NS,NP),YW(NP)
1280 '
1290 ' no correlation
1300 FOR I=1 TO NP
1310  PRINT
1320  PRINT "parameter(";I;")=";:INPUT EX(I)
1330  PRINT "S.D. of parameter(";I;")=";:INPUT SD(I)
1340 NEXT I
1350 PRINT
1360 INPUT "OK?  (Y/N)";OK$
1370 IF INSTR(ANS$,OK$)=0 THEN 1280
1380 RETURN
1390 '
1400 ' *** 乱数の選択 ***
1410 '
1420 *MENU:
1430 CLS 3
1440 PRINT
1450 FOR I=1 TO MENU.NO
1460  PRINT USING "##";I;
1470  PRINT ".......";MENU$(I)
1480 NEXT I
1490 PRINT
1500 PRINT " 0.......";MENU$(0)
1510 PRINT:PRINT:PRINT
1520 PRINT "何をしますか ";:INPUT MENU
1530 IF MENU<0 OR MENU>MENU.NO THEN BEEP:GOTO 1430
1540 ON MENU GOSUB *NORMAL.RANDOM,*NORMAL.RANDOM2,*T.RANDOM
1550 RETURN
1560 '
1570 ' *** 正規乱数 (1) ***
1580 '
1590 *NORMAL.RANDOM:' [ central limit theorem ]
1600 I=0
1610 WHILE I<NS
1620  FOR J=1 TO NP
1630   GOSUB *NORMAL.GENERATE:YW(J)=YW
1640  NEXT J
1650  '
1660  I=I+1
1670  FOR J=1 TO NP
1680   EX=EX(J):SD=SD(J)
1690   Y=YW(J)*SD+EX
1700   Y(I,J)=Y:PRINT Y
1710  NEXT J
1720  PRINT
1730 WEND
1740 RETURN
1750 '
1760 *NORMAL.GENERATE:
1770 YW=0
1780 FOR K=1 TO 12
1790  YW=YW+RND(1)
1800 NEXT K
1810 YW=YW-6
1820 RETURN
1830 '
1840 ' *** 正規乱数 (2) ***
1850 '
1860 *NORMAL.RANDOM2:' [ BOX-MULLER method ]
1870 I=0
1880 WHILE I<NS
1890  FOR J=1 TO NP
1900   GOSUB *NORMAL.GENERATE2:YW(J)=YW
1910  NEXT J
1920  '
1930  I=I+1
1940  FOR J=1 TO NP
1950   EX=EX(J):SD=SD(J)
1960   Y=YW(J)*SD+EX
1970   Y(I,J)=Y:PRINT Y
1980  NEXT J
1990  PRINT
2000 WEND
2010 RETURN
2020 '
2030 *NORMAL.GENERATE2:
2040 R1=RND(1):R2=RND(2)
2050 ZZ=SQR(-2*LOG(R1))
2060 WW=2*PI*R2
2070 Z1=ZZ*COS(WW)
2080 Z2=ZZ*SIN(WW)
2090 YW=Z1:' YW=Z2
2100 RETURN
2110 '
2120 ' *** t乱数 ***
2130 '
2140 *T.RANDOM:
2150 I=0
2160 WHILE I<NS
2170  FOR J=1 TO NP
2180   GOSUB *T.GENERATE:YW(J)=YW
2190  NEXT J
2200  '
2210  I=I+1
2220  FOR J=1 TO NP
2230   EX=EX(J):SD=SD(J)
2240   Y=YW(J)*SD+EX
2250   Y(I,J)=Y:PRINT Y
2260  NEXT J
2270  PRINT
2280 WEND
2290 RETURN
2300 '
2310 *T.GENERATE:
2320 YW=0
2330 FOR K=1 TO (DF \ 2)
2340  YW=YW-LOG(RND(1))
2350 NEXT K
2360 IF (DF MOD 2)=0 THEN 2430
2370 ZW=0
2380 FOR K=1 TO 12
2390  ZW=ZW+RND(1)
2400 NEXT K
2410 ZW=ZW-6
2420 YW=YW+ZW*ZW/2
2430 '
2440 ZW=0
2450 FOR K=1 TO 12
2460  ZW=ZW+RND(2)
2470 NEXT K
2480 ZW=ZW-6
2490 YW=ZW/SQR(YW*2/DF)*SQR((DF-2)/DF)
2500 RETURN
 
===================================
 
【2】多変量t乱数の発生法?
 
 たとえば,パラメータ数が3の場合,通常行われている(相関を考慮しない)モンテカルロ法では,3個の標準正規乱数z1,z2,z3を用いて,
  m1+s1z1
  m2+s2z2
  m3+s3z3
を発生させています.
 
 しかし,通常,パラメータ同士には相関があり,どうしても相関を考慮に入れたモンテカルロ法が必要になる場合があります.分散・共分散行列はすべてのパラメータが独立と考えられる場合は対角行列,また,パラメータ間に強い相関がある場合には非対角要素は無視できなくなり対称行列となるからです.
 
 コラム「正規楕円とt楕円」では,分散・共分散行列のコレスキー分解に基づいた多変量正規乱数発生法について紹介しましたが,しばらくの間,それを再録することにします.
 
『n次元正規分布の同時確率密度関数は
  f(X,μ,Σ)=(2π)^(n/2)Σ^(-1/2)exp(-(X-μ)'Σ^(-1)(x-μ)/2}
と表すことができるが,Σが分散共分散行列であり,(X-μ)'Σ^(-1)(x-μ)=c^2が等確率楕円である.
 
 この等確率楕円が描けるような多変量正規乱数発生法の原理は簡単で,互いに独立な標準正規乱数X1,X2,・・・,Xnから,
  Y1=μ1+a11X1
  Y2=μ2+a21X1+a22X2
  ・・・・・・・・・・・・・・
  Yn=μn+an1X1+an2X2+・・・+annXn
とおくと,Yiは正規変数の線形結合であるから平均値μiの正規分布することは明らかだし,YiとYjが相関することも理解できるだろう.
 
 その際の分散・共分散σijは,
  σij=ai1aj1+ai2aj2+・・・+aijajj   (i≧j)
に等しい.したがって,あとはaijが求められればよいことになるが,それには正値対称行列Σのコレスキー分解
  Σ=LL’   (Lは下三角行列,L’はLの転置行列)
によって
  Y=LX+μ
と置けばよいことが示される.詳細については,宮武・脇本共著「乱数とモンテカルロ法」共立出版を参照されたい.』
 
 すなわち,相関を考慮に入れたモンテカルロ法でも,必要となる乱数の数は同じ3個であって,唯一異なる点は,
  m1+c11z1
  m2+c21z1+c22z2
  m3+c31z1+c32z2+c33z3
となる点です.もちろん係数cijはコレスキー分解により求めます.
 
 自由度mのn変量t分布の同時確率密度関数は,
  f(X,μ,Σ)=Γ((m+n)/2)/Γ(m/2)(mπ)^(n/2)|Σ|^(-1/2)(1+(X-μ)'Σ^(-1)(x-μ)/n)^(-(m+n)/2)
で与えられますが,多変量正規分布の場合と同様に,
  a)平均0,分散1の標準t乱数を生成するプログラムを作る
  b)分散・共分散行列は既知なので,コレスキー分解を利用して多変量乱数を発生させる
ことを考えました.
 
 ところが,正規分布の場合,その線形結合
  Yn=μn+an1X1+an2X2+・・・+annXn
が正規分布することは明らかなのに対し,t分布の場合,再生性は成り立たないわけですから,t分布の線形結合はt分布とはなりません.これ以外の議論については正規分布であってもt分布であっても同じですから,唯一,この点だけが引っかかってしまいました.
 
 すなわち,複数の独立なt分布に従う乱数の線形結合を使って,多変量のものをつくるというわけにはいかないのではと思われます.とはいっても,具体的にどうすれば多変量t乱数を発生できるかについては思い当たりませんでした.
 
 しかし,an1X1+an2X2+・・・+annXnは名目的には線形結合であっても,実質的には乱数1個分に相当するわけですから,近似的な多変量t分布が得られるはずです.この点については,厳密に証明したわけではありませんが,そのように考えないと整合性が保たれないのです.したがって,相関を考慮した多変量t分布の乱数発生でも,tを標準t乱数とすると,
  y1=m1+c11t1
  y2=m2+c21t1+c22t2
  y3=m3+c31t1+c32t2+c33t3
で近似的な値は求められるものと思われます.
 
 私はこれまで多変量のt分布というものを試したことがないので詳しいことは何一つわからないし,確たる自信もないのですが,擬似的な多変量t乱数ということで,ひとつご勘弁を願います.
 
===================================
 
(プログラム)
 
 t乱数を発生させる基本的な部分はすでにできているので,あとは分散・共分散行列を入力して,コレスキー分解する部分をつくれば完成です.そうすると,相関のある場合,ない場合の両方に対応することが可能になります.
 
1000 '
1010 ' **** 正規乱数とt乱数 (RANDOM2) ****
1020 '
1030 SCREEN 3,0:CONSOLE ,,0,1:CLS 3
1040 GOSUB *INITIALIZE
1050 GOSUB *MENU
1060 END
1070 '
1080 ' *** 初期設定 ***
1090 '
1100 *INITIALIZE:
1110 MENU.NO=3:DIM MENU$(MENU.NO)
1120 MENU$(0)="終了"
1130 MENU$(1)="正規乱数(中心極限定理)"
1140 MENU$(2)="正規乱数(Box-Muller法)"
1150 MENU$(3)="t乱数"
1160 ANS$="Yy"+CHR$(&HD)
1170 PI=3.14159
1180 '
1190 INPUT "No. of paremeters=";NP
1200 INPUT "No. of data=";ND
1210 INPUT "No. of sets of random numbers=";NS
1220 PRINT
1230 INPUT "OK?  (Y/N)";OK$
1240 IF INSTR(ANS$,OK$)=0 THEN 1180
1250 DF=ND-NP:' degree of freedom
1260 DIM EX(NP),SD(NP)
1270 DIM Y(NS,NP),YW(NP)
1280 DIM COV(NP,NP),L(NP,NP)
1290 '
1300 ' correlation
1310 PRINT:PRINT "パラメータ値を入力します"
1320 FOR I=1 TO NP
1330  PRINT
1340  PRINT "parameter(";I;")=";:INPUT EX(I)
1350 NEXT I
1360 PRINT:PRINT "分散・共分散行列を入力します"
1370 FOR I=1 TO NP
1380  PRINT:PRINT I;"行"
1390  FOR J=1 TO I
1400   PRINT "covariance(";I;",";J;")=";
1410   INPUT COV(I,J):COV(J,I)=COV(I,J)
1420  NEXT J
1430 NEXT I
1440 PRINT
1450 INPUT "OK?  (Y/N)";OK$
1460 IF INSTR(ANS$,OK$)=0 THEN 1290
1470 GOSUB *CHOLESKI
1480 RETURN
1490 '
1500 ' *** コレスキー分解 ***
1510 '
1520 *CHOLESKI:
1530 L(1,1)=SQR(COV(1,1))
1540 FOR I=2 TO NP
1550  L(I,1)=COV(I,1)/L(1,1)
1560 NEXT I
1570 FOR K=2 TO NP
1580  S=0
1590  FOR J=1 TO K-1
1600   S=S+L(K,J)*L(K,J)
1610  NEXT J
1620  L(K,K)=SQR(ABS(COV(K,K)-S))
1630  FOR I=K+1 TO NP
1640   S=0
1650   FOR J=1 TO K-1
1660    S=S+L(K,J)*L(I,J)
1670   NEXT J
1680   L(I,K)=(COV(I,K)-S)/L(K,K)
1690  NEXT I
1700 NEXT K
1710 RETURN
1720 '
1730 ' *** 乱数の選択 ***
1740 '
1750 *MENU:
1760 CLS 3
1770 PRINT
1780 FOR I=1 TO MENU.NO
1790  PRINT USING "##";I;
1800  PRINT ".......";MENU$(I)
1810 NEXT I
1820 PRINT
1830 PRINT " 0.......";MENU$(0)
1840 PRINT:PRINT:PRINT
1850 PRINT "何をしますか ";:INPUT MENU
1860 IF MENU<0 OR MENU>MENU.NO THEN BEEP:GOTO 1760
1870 ON MENU GOSUB *NORMAL.RANDOM,*NORMAL.RANDOM2,*T.RANDOM
1880 RETURN
1890 '
1900 ' *** 正規乱数 (1) ***
1910 '
1920 *NORMAL.RANDOM:' [ central limit theorem ]
1930 I=0
1940 WHILE I<NS
1950  FOR J=1 TO NP
1960   GOSUB *NORMAL.GENERATE:YW(J)=YW
1970  NEXT J
1980  '
1990  I=I+1
2000  FOR J=1 TO NP
2010   EX=EX(J):S=EX
2020   FOR K=1 TO NP
2030    S=S+YW(J)*L(J,K)
2040   NEXT K
2050   Y=S
2060   Y(I,J)=Y:PRINT Y
2070  NEXT J
2080  PRINT
2090 WEND
2100 RETURN
2110 '
2120 *NORMAL.GENERATE:
2130 YW=0
2140 FOR K=1 TO 12
2150  YW=YW+RND(1)
2160 NEXT K
2170 YW=YW-6
2180 RETURN
2190 '
2200 ' *** 正規乱数 (2) ***
2210 '
2220 *NORMAL.RANDOM2:' [ BOX-MULLER method ]
2230 I=0
2240 WHILE I<NS
2250  FOR J=1 TO NP
2260   GOSUB *NORMAL.GENERATE2:YW(J)=YW
2270  NEXT J
2280  '
2290  I=I+1
2300  FOR J=1 TO NP
2310   EX=EX(J):S=EX
2320   FOR K=1 TO NP
2330    S=S+YW(J)*L(J,K)
2340   NEXT K
2350   Y=S
2360   Y(I,J)=Y:PRINT Y
2370  NEXT J
2380  PRINT
2390 WEND
2400 RETURN
2410 '
2420 *NORMAL.GENERATE2:
2430 R1=RND(1):R2=RND(2)
2440 ZZ=SQR(-2*LOG(R1))
2450 WW=2*PI*R2
2460 Z1=ZZ*COS(WW)
2470 Z2=ZZ*SIN(WW)
2480 YW=Z1:' YW=Z2
2490 RETURN
2500 '
2510 ' *** t乱数 ***
2520 '
2530 *T.RANDOM:
2540 I=0
2550 WHILE I<NS
2560  FOR J=1 TO NP
2570   GOSUB *T.GENERATE:YW(J)=YW
2580  NEXT J
2590  '
2600  I=I+1
2610  FOR J=1 TO NP
2620   EX=EX(J):S=EX
2630   FOR K=1 TO NP
2640    S=S+YW(J)*L(J,K)
2650   NEXT K
2660   Y=S
2670   Y(I,J)=Y:PRINT Y
2680  NEXT J
2690  PRINT
2700 WEND
2710 RETURN
2720 '
2730 *T.GENERATE:
2740 YW=0
2750 FOR K=1 TO (DF \ 2)
2760  YW=YW-LOG(RND(1))
2770 NEXT K
2780 IF (DF MOD 2)=0 THEN 2850
2790 ZW=0
2800 FOR K=1 TO 12
2810  ZW=ZW+RND(1)
2820 NEXT K
2830 ZW=ZW-6
2840 YW=YW+ZW*ZW/2
2850 '
2860 ZW=0
2870 FOR K=1 TO 12
2880  ZW=ZW+RND(2)
2890 NEXT K
2900 ZW=ZW-6
2910 YW=ZW/SQR(YW*2/DF)*SQR((DF-2)/DF)
2920 RETURN
 
===================================
 
【3】母数空間と標本空間
 
 コラム「正規楕円とt楕円」では,パラメータθjの信頼区間がt分布
  θj±t(α/2,n−m)√V(θj)
で与えられるとき,母数空間
  Θ=(θ1,θ2,・・・,θm)
は直方体領域で与えられるのではなく,F分布によって規定される楕円体領域となることを示しました.ちなみに,パラメータの信頼区間が正規分布ならば,対応する母数空間はχ^2分布で規定される楕円体領域となります.直方体は楕円体領域の近似解にすぎないのです.
 
 そして,相関係数が0に近いときには長方形が第0近似解となるような太った楕円が与えられますが,相関が大きいほど細長い楕円になりますから,相関が考慮されることによって,誤差は一回り減少することがわかります.さて,この直観的な幾何学的表現を,もう少し解析的に評価してみることにしましょう.
 
 相関を考慮しない場合の信頼楕円は,半径√σiiの楕円体に相当しますから,その体積は分散・共分散行列Δの主対角要素の積の平方根のm乗
  (σ11*σ22*・・・*σmm)^(m/2)
に比例します.
 
 一方,分散・共分散行列の固有値をλ1,・・・,λmとすると,楕円体の半径は√λiになりますから,その体積は
  (λ1*λ2*・・・*λm)^(m/2)
に比例することになります.
 
 分散・共分散行列は正定値行列ですから,すべての固有値は正であり,また,分散・共分散行列の行列式の値は
  |Δ|=λ1*λ2*・・・*λm
で与えられますから,相関を考慮に入れることによって,楕円体の体積は
  |Δ|^(m/2)
すなわち,行列式の値|Δ|の平方根のm乗と書かれることも理解されるでしょう.
 
 行列式の値|Δ|は,m=2なら平行四辺形の面積,m=3なら平行六面体の体積となります.これはm次元単体の体積のm!倍です.もし,推論
  σ11*・・・*σmm≧λ1*・・・*λm   (等号は対角行列のとき)
が本当なら,教科書に載っているはずです.そこで,手持ちの本をあたっていたところ「線形作用素への誘い」古田孝之著(培風館)p20に,「アダマールの定理」を発見しました.
 
 それによると,上の推論は表現形は若干違うものの,アダマールの定理そのものです.アダマールの定理は,平行六面体の体積はノルムの積によって上から抑えられるという非常に興味深い事実を示しているのであって,ベクトルの内積はノルムの積より小さいというシュワルツの不等式の拡張であると見なすこともできます.
 
 なお,線形代数の知識を使うと,対角線の項の和=固有値の総和,
  σ11+・・・+σmm=λ1+・・・+λm
が成り立ちますから,これを使って
  σ11*・・・*σmm≧λ1*・・・*λm   (等号は対角行列のとき)
を証明する問題は,平行六面体の辺の長さ(の2乗和)
  σ11+・・・+σmm=λ1+・・・+λm
が一定のとき,その体積が最大になるのは直方体のときであるという1種の等周問題に帰着されます.
 
【参】すべての辺の長さが等しい平行六面体格子(菱形体格子)をつくってみると,辺が互いの60°の角度をなすようにすると,平行六面体の体積は最小値となる.
 
===================================
 
 次に,標本空間において,最小2乗モデル式:y=f(x,θ)の推定誤差Δyについて考えてみることにしましょう.
 
 この際,パラメータ数が3の場合についてのみ述べますが,「誤差伝播の法則」(propagation of error)を使って,
  (Δy)^2=(df/dθ1)^2(Δθ1)^2+(df/dθ2)^2(Δθ2)^2+(df/dθ3)^2(Δθ3)^2
あるいは,見通しをよくするために,重み係数df/dθの部分を誤差Δθのなかに繰り込んで,
  (Δy)^2=(Δa)^2+(Δb)^2+(Δc)^2
のように書かれている本が一般的かと思われます.
 
 この式は(本質的なところだけを抜き出すと)ピタゴラスの定理にほかならないので,母数空間が直方体領域で与えられるという誤解を招きますし,また,実際例に応用してみると誤差が大きすぎて,実用性には乏しいことがわかりました.なぜそうなるかというと,それは母数間の相関を考えていないからです.
 
 そこで,もう少しつじつまがあっていて,しかもいろいろな場面の応用できるましな方法に改良する余地ありということで,ピタゴラスの定理を一般化して得られる余弦定理にあたる誤差公式を考えてみることが必要になりました.
 
 それが,
  (Δy)^2=(Δa)^2+(Δb)^2+(Δc)^2+2ΔaΔb+2ΔbΔc+2ΔcΔa
です.ここで(Δa)^2は分散,ΔaΔbは共分散を表す略号とします.
 
 最近の誤差解析の本には,やっとこの形の式が取り上げられるようになってきましたが,この改良式は母数間の相関を考慮したもので,余弦定理というよりも楕円体そのものを表す式となっています.すなわち,2つ(3つ)の母数がある場合,その同時信頼区間は長方形(直方体)領域で与えられるものではなく,楕円(楕円体)となることを示しているのであって,幾何学的には2次元ならば長方形に内接する楕円,3次元ならば直方体に内接する楕円体すなわちラグビーボール状態を考えることに相当します.
 
 さて,相関を考えた式:
  (Δy)^2=(Δa)^2+(Δb)^2+(Δc)^2+2ΔaΔb+2ΔbΔc+2ΔcΔa・・・・・(1)
と相関を考えない式:
  (Δy)^2=(Δa)^2+(Δb)^2+(Δc)^2・・・・・(2)
では,前者のほうが小さいことが以下のようにして示されます(数学的な証明にはほど遠いのですが・・・).
 
 分散・共分散行列Δ={σij}と呼ばれるものは,
  σij=E[(θi-θi0)(θj-θj0)]
で定義されます.また,最小2乗法では線形近似
  f(x,θ)=f(x,θ0)+Σdf/dθk(θk-θk0)
と書けるのですが,収束点付近では
  Σdf/dθk(θk-θk0) 〜 0
ですから,これより,
  (df/dθi)(df/dθj)>0のとき,σij<0
  (df/dθi)(df/dθj)<0のとき,σij>0
でなければならず,結局,
  2ΔaΔb+2ΔbΔc+2ΔcΔa<0
より,(1)<(2)が証明されたことになります.
 
===================================
 
【4】まとめ
 
 厳密には「相関を考えたt乱数を発生させる」必要があっても,それは簡単にはいかないことがわかりました.可能なことことは,
  1)相関を考えた正規乱数の発生
  2)相関を考えない正規乱数の発生
  3)相関を考えないt乱数の発生
ですが,通常,モンテカルロ法というと相関は考慮していないわけですから,相関を考えたt乱数を発生させる必要がある場合は,相関を考えた正規乱数を発生させることで代用すべきと思われます.1)は2),3)よりも優れた結果を与えてくれます.
 
 大抵のプログラム言語は乱数発生関数をもっていますが,t分布など特定の分布に従うものはありません.一方,Mathematicaの標準パッケージでは分布関数とそれに従う乱数を発生させることができ,StudentDistributionがt分布にに相当します.しかし,多変量t分布のように,標準パッケージ組み込み以外の分布関数について乱数を発生させことはできません.いまのところ,多変量正規乱数,多変量t乱数などに対しては乱数発生アルゴリズムを自ら組み込むしかなさそうです.
 
 一方,誤差を見積もる問題は,シミュレーションに頼らなくとも,誤差伝播の法則を使って解決できることがわかりました.誤差伝播の法則は,分布形に関わらず(厳密にはコーシー分布を除いて)成り立ちますし,相関を考慮することも簡単です.相関を考慮すると,考慮しない場合より誤差が小さくなることは本文中で証明したとおりです.また,以前に,積分値の誤差は誤差の積分値よりも小さくなることを証明しましたが,これらの点でも,誤差伝播の法則は利用価値の高いものになっています.
 
===================================
 
【補】中心極限定理を利用した正規乱数発生法
 
 特性関数は積率母関数同様に和の分布を求めるときなど利用されていますが,ここでは,区間(0,1)の一様分布の特性関数が
  φ(t)=exp(it/2)sin(t/2)/(t/2)
となることを利用して,一様乱数ri(0〜1)をn個合計したものの分布が,n→∞の極限で正規分布になることを示してみましょう.
 
 一様乱数をn個の合計のしたものの分布の特性関数は
  [φ(t)]^n=exp(int/2){sin(t/2)/(t/2)}^n
一方,シンク関数
  sinx/x=Σ(-1)^mx^2m/(2m+1)!
        =1−1/3!x^2 +1/5!x^4 −・・・
の解が±π,±2π,±3π,±4π,・・・となることを利用して,無限積表示すると
  sinx/x=(1-x2/π2)(1-x2/4π2)(1-x2/9π2)(1-x2/16π2)・・・
     =Π(1-x2/k2π2)
 
 kが大きいとき
  (1-x2/k2π2)〜exp(-x2/k2π2)   (補)(1+x/n)^n→exp(x)
  Π(1-x2/k2π2)〜exp(-x2/π2Σ1/k2)
ここで,(Σ1/k2=π2/6)より
  Π(1-x2/k2π2)〜exp(-x2/6)
(補)Σ1/k2=π2/6=ζ(2)
  sinx/x=1-1/6x2+120x4-・・・(ベキ級数表示)
また,
  sinx/x=Π(1-x2/k2π2)  (無限積表示)
     =1-1/π2(Σ1/k2)x2+・・・
の両辺を比較することにより,Σ1/k2=π2/6,Σ1/k4=π4/90が計算される.Σ1/k2はゼータ関数ζ(2)に,Σ1/k4はゼータ関数ζ(4)に相当する.
 
 これより,
  {sin(t/2)/(t/2)}^n→exp(-nt2/24) 
ですから,
  [φ(t)]^n→exp(int/2-nt2/24)
 
 正規分布N(μ,σ^2)の特性関数はexp(iμt-σ2t2/2)ですから,この結果はn個の独立した一様乱数の和の分布は平均値n/2,分散n/12の正規分布に近づくことを示しています.
 
 次に,一様乱数をもとに正規乱数を発生させる具体的な方法を述べてみましょう.中心極限定理によって,区間(0,1)の一様乱数ri(平均1/2,分散1/12)をn個合計したものの分布は平均値μがn/2,分散σ^2がn/12の正規分布に近くなりますから,正規化して
  Z=√12/n(Σri−n/2)とおけば,
Zの分布は標準正規分布N(0,1)となります.
 
 そこで,12個の一様乱数を加えることにすると平方根の計算をしないで済みます.
  Z=(Σri−6)   (i=1〜12)
実際,一様分布に従う確率変数12個ずつの平均をとり100個のデータから構成したヒストグラムは元の一様分布とは似ても似つかない滑らかな分布となります.
 
 なお,中心極限定理を利用した正規乱数発生法は,12個の一様乱数から1個の正規乱数が得られる効率のよくない方法で,それに比べ,ボックス・ミューラー法はかなり効率がよくなっています.
 
===================================
 
【補】ボックス・ミューラーの正規乱数発生法
 
 正規乱数を発生させる方法に,ボックス・ミューラー(Box-Muller)法があります.
 
 z1,z2が正規分布N(0,1)にしたがい,独立のとき(z1^2+z2^2)^(1/2)はレイリー分布にしたがいます.したがって,レイリー乱数を発生させることができると正規乱数に変換することができます.rを一様乱数とすると(-2lnr)は平均値2の指数分布,したがって(-2lnr)^(1/2)はレイリー乱数,また2πrは(0,2π)の一様乱数になります.
 
 r^2=-2logr1,θ=2πr2ですから,これにより,2個の一様乱数r1,r2から互いに独立に標準正規分布に従う2個の正規乱数z1,z2
  z1=(−2lnr1)^(1/2)cos(2πr2)
  z2=(−2lnr1)^(1/2)sin(2πr2)
を作りだすことができます.このように,ボックス・ミューラー法は,標的問題の解であるレイリー分布を応用していると考えることができます.
 
===================================