【解答1】newton-raphson法と fisher’s scoring …€解答1】newton-raphson法と fisher’s...
TRANSCRIPT
【解答1】Newton-Raphson法と Fisher’s Scoring法の計算
H22年度 BioS継続勉強会:第10・11回
土居正明
はじめに
解答が長くなりますので、本稿では1変数・1パラメータの「問題1」「問題2」の解答を述べます。なお、収束基準と合
わせるために解答は小数第 9位まで計算していますが、文章中で引用するときは面倒ですので小数第 5位を四捨五入して第
4位まで表示します。
問題1:1変数の Newton-Raphson法の基礎
以下の各問題で、(i) で定義するマクロ% seqと% exeは、「問題1」の全ての問題で用います。
(i) f(x) = x3 − 3とおくと、f ′(x) = 3x2 となります。これより、Newton-Raphson法による逐次計算は
xm = xm−1 −f(xm−1)f ′(xm−1)
= xm−1 −x3
m−1 − 33x2
m−1
となります。これより、SASプログラムは
*元の関数;
%macro f(x);
&x**3 - 3
%mend f;
*微分した関数;
%macro df(x);
3 * (&x**2)
%mend df;
*xm−1 から xm を計算するマクロ;
%macro seq(x);
f x =% f(&x); *f(xm−1)の値の計算;
df x =% df(&x); *f ′(xm−1)の値の計算;
y = &x - f x / df x ; *xm−1 から xm を求める;
%mend seq;
1
*計算実行マクロ;
*init は初期値;
*denomはくり返し計算の際の分母(Newton-Raphsonなら df x, Fisher’s Scoringなら I x);
*noは通し番号;
%macro exe(init, denom, no);
data d&no;
length i 3.0 diff x f x &denom y sol check 8.0;
i = 1; *くり返し回数の初期値;
diff = 10; *xm と xm−1 の差の初期値;
&denom = 100; *分母(微分した値)の初期値(以下のループで、0になったら計算中止);
x = &init; * x0 の値;
* |xm − xm−1| < 10−8 となるか、くり返しの分母 f ′(xm−1) = 0となるか、;
*くり返し回数 i が 1000を超えるまでループを続ける;
do until(diff < 10**(-8) or &denom = 0 or i> 1000);
% seq(x)
output;
diff = abs(y - x);
x = y; *値を更新;
i = i + 1; *くり返し回数を 1回増やす;
end;
sol = y; *Newton-Raphson法による解;
check =% f(sol); *元の関数に solを入れて、(大体)0になるか(つまり f(x) = 0の解となるか)確認;
output;
run;
%mend exe;
となります。実行プログラムは
% exe(10, dfx, 1)
となり、出力は以下のようになります。
2
i diff x f x df x y sol check
1 10.000000000 10.000000000 997.00000000 300.00000000 6.676666667 . .
2 3.323333333 6.676666667 294.63163063 133.73363333 4.473543763 . .
3 2.203122904 4.473543763 86.527214154 60.037781390 3.032331044 . .
4 1.441212719 3.032331044 24.882379645 27.585094677 2.130308414 . .
5 0.902022630 2.130308414 6.667795337 13.614641815 1.640556614 . .
6 0.489751800 1.640556614 1.415436730 8.074278009 1.465254658 . .
7 0.175301956 1.465254658 0.145859568 6.440913635 1.442608869 . .
8 0.022645788 1.442608869 0.002242674 6.243361048 1.442249660 . .
9 0.000359209 1.442249660 0.000000558 6.240252243 1.442249570 . .
10 0.000000089 1.442249570 0.000000000 6.240251469 1.442249570 . .
11 0.000000000 1.442249570 0.000000000 6.240251469 1.442249570 1.442249570 -0.000000000
これより、初期値 x0 は xの1行目、xi は yの i 行目となります。つまり、x0 = 10.0000, x1 = 6.6767, x2 = 4.4735, x3 =
3.0323, x4 = 2.1303 · · · となり、解は x = 1.4422となります。
(ii) f(x) = x5 − 2とおくと、f ′(x) = 5x4 となります。これより、Newton-Raphson法による逐次計算は
xm = xm−1 −f(xm−1)f ′(xm−1)
= xm−1 −x5
m−1 − 25x4
m−1
となります。従って、SASプログラムの関数の部分は、
*元の関数;
%macro f(x);
&x**5 - 2
%mend f;
*微分した関数;
%macro df(x);
5 * (&x**4)
%mend df;
となります。実行プログラムは
% exe(10, dfx, 2)
となり、出力は以下の通りとなります。
3
i diff x f x df x y sol check
1 10.000000000 10.000000000 99998.000000 50000.000000 8.000040000 . .
2 1.999960000 8.000040000 32766.819208 20480.409603 6.400129654 . .
3 1.599910346 6.400129654 10736.505903 8389.2877826 5.120342123 . .
4 1.279787532 5.120342123 3517.6128906 3436.8923075 4.096855619 . .
5 1.023486503 4.096855619 1152.1261848 1408.5512062 3.278904394 . .
6 0.817951225 3.278904394 377.00397834 577.94301509 2.626584064 . .
7 0.652320330 2.626584064 123.01338793 237.97713091 2.109671420 . .
8 0.516912644 2.109671420 39.790166117 99.044253333 1.707930130 . .
9 0.401741290 1.707930130 12.532840275 42.545183845 1.413352950 . .
10 0.294577180 1.413352950 3.639662940 19.951360838 1.230926149 . .
11 0.182426801 1.230926149 0.825920812 11.478839793 1.158974556 . .
12 0.071951593 1.158974556 0.091074506 9.021226979 1.148878977 . .
13 0.010095579 1.148878977 0.001572900 8.710982358 1.148698412 . .
14 0.000180565 1.148698412 0.000000494 8.705507354 1.148698355 . .
15 0.000000057 1.148698355 0.000000000 8.705505633 1.148698355 . .
16 0.000000000 1.148698355 0.000000000 8.705505633 1.148698355 1.148698355 -0.000000000
これより、解は x = 1.1487となります。
(iii) f(x) = x3 − 6x2 + 15x− 2とおくと、f ′(x) = 3x2 − 12x + 15となります。これより、Newton-Raphson法による逐次
計算は
xm = xm−1 −f(xm−1)f ′(xm−1)
= xm−1 −x3
m−1 − 6x2m−1 + 15xm−1 − 2
3x2m−1 − 12xm−1 + 15
となります。従って、SASプログラムの関数の部分は、
*元の関数;
%macro f(x);
&x**3 - 6*( &x**2) + 15*x -2
%mend f;
*微分した関数;
%macro df(x);
3*(&x**2) - 12* &x + 15
%mend df;
となります。実行プログラムは
4
% exe(10, dfx, 3)
となり、出力は以下の通りとなります。
i diff x f x df x y sol check
1 10.000000000 10.000000000 548.00000000 195.00000000 7.189743590 . .
2 2.810256410 7.189743590 167.34687072 83.800315582 5.192771746 . .
3 1.996971844 5.192771746 54.124764474 33.581374266 3.581022207 . .
4 1.611749538 3.581022207 20.695039093 10.498893662 1.609858411 . .
5 1.971163797 1.609858411 10.770191601 3.456631379 -1.505947245 . .
6 3.115805656 -1.505947245 -41.61177459 39.874998258 -0.462391724 . .
7 1.043555521 -0.462391724 -10.31757467 21.190119007 0.024513265 . .
8 0.486904990 0.024513265 -1.635891689 14.707643515 0.135740580 . .
9 0.111227314 0.135740580 -0.071943244 13.426389557 0.141098926 . .
10 0.005358346 0.141098926 -0.000160425 13.366539608 0.141110928 . .
11 0.000012002 0.141110928 -0.000000001 13.366405745 0.141110928 . .
12 0.000000000 0.141110928 -0.000000001 13.366405745 0.141110928 0.141110928 0.000000000
これより解は x = 0.1411となります*1。
(iv) f(x) = ex − 1とおくと、f ′(x) = ex となります。これより、Newton-Raphson法による逐次計算は
xm = xm−1 −f(xm−1)f ′(xm−1)
= xm−1 −exm−1 − 1
exm−1
となります。従って、SASプログラムの関数の部分は、
*元の関数;
%macro f(x);
exp(&x) -1
%mend f;
*微分した関数;
%macro df(x);
exp(&x)
%mend df;
となります。実行プログラムは
% exe(10, dfx, 4)
*1 なお、f ′(x) = 3x2 − 12x + 15 = 3(x − 2)2 + 3 > 0より、xの全範囲で f(x)は単調増加関数ですので、f(x) = 0の解は 1つです。
5
となり、出力は以下の通りとなります。
i diff x f x df x y sol check
1 10.000000000 10.000000000 22025.465795 22026.465795 9.000045400 . .
2 0.999954600 9.000045400 8102.4518154 8103.4518154 8.000168804 . .
3 0.999876596 8.000168804 2980.4612275 2981.4612275 7.000504210 . .
4 0.999664594 7.000504210 1096.1862314 1097.1862314 6.001415632 . .
5 0.999088578 6.001415632 403.00030481 404.00030481 5.003890878 . .
6 0.997524754 5.003890878 147.99174148 148.99174148 4.010602660 . .
7 0.993288219 4.010602660 54.180115366 55.180115366 3.028725130 . .
8 0.981877530 3.028725130 19.670863116 20.670863116 2.077102403 . .
9 0.951622726 2.077102403 6.981308763 7.981308763 1.202395138 . .
10 0.874707265 1.202395138 2.328078591 3.328078591 0.502868811 . .
11 0.699526327 0.502868811 0.653457932 1.653457932 0.107661943 . .
12 0.395206869 0.107661943 0.113671197 1.113671197 0.005593040 . .
13 0.102068903 0.005593040 0.005608710 1.005608710 0.000015612 . .
14 0.005577428 0.000015612 0.000015612 1.000015612 0.000000000 . .
15 0.000015612 0.000000000 0.000000000 1.000000000 0.000000000 . .
16 0.000000000 0.000000000 0.000000000 1.000000000 0.000000000 0.000000000 0.000000000
これより、解は x = 0.0000となります。f(0) = e0 − 1 = 1 − 1 = 0ですので、正しい解になっています。
(v) f(x) = e3x − 2とおくと、f ′(x) = 3e3x となります。これより、Newton-Raphson法による逐次計算は
xm = xm−1 −f(xm−1)f ′(xm−1)
= xm−1 −e3xm−1 − 23e3xm−1
となります。従って、SASプログラムの関数の部分は、
*元の関数;
%macro f(x);
exp(3*&x) - 2
%mend f;
*微分した関数;
%macro df(x);
3*exp(3*&x)
%mend df;
となります。実行プログラムは
6
% exe(10, dfx, 5)
となり、出力は以下の通りとなります。なお、表が大きくなりすぎてしまい、下の方でページ数と重なっている部分があり
ます。申し訳ありません。
7
i diff x f x df x y sol check
1 10.000000000 10.000000000 1.0686475E13 3.2059424E13 9.666666667 . .
2 0.333333333 9.666666667 3.9313343E12 1.1794003E13 9.333333333 . .
3 0.333333333 9.333333333 1.4462571E12 4.3387712E12 9.000000000 . .
4 0.333333333 9.000000000 532048240601 1.5961447E12 8.666666667 . .
5 0.333333333 8.666666667 195729609428 587188828290 8.333333333 . .
6 0.333333333 8.333333333 72004899337 216014698016 8.000000000 . .
7 0.333333333 8.000000000 26489122129 79467366393 7.666666667 . .
8 0.333333333 7.666666667 9744803445.4 29234410342 7.333333333 . .
9 0.333333333 7.333333333 3584912845.3 10754738542 7.000000000 . .
10 0.333333333 7.000000000 1318815733.6 3956447206.9 6.666666667 . .
11 0.333333333 6.666666667 485165194.57 1455495589.7 6.333333336 . .
12 0.333333332 6.333333336 178482300.13 535446906.38 6.000000006 . .
13 0.333333330 6.000000006 65659968.301 196979910.90 5.666666683 . .
14 0.333333323 5.666666683 24154951.918 72464861.753 5.333333377 . .
15 0.333333306 5.333333377 8886109.6845 26658335.053 5.000000119 . .
16 0.333333258 5.000000119 3269016.5364 9807055.6093 4.666666989 . .
17 0.333333129 4.666666989 1202603.4481 3607816.3444 4.333334210 . .
18 0.333332779 4.333334210 442412.55596 1327243.6679 4.000002384 . .
19 0.333331826 4.000002384 162753.95537 488267.86612 3.666673147 . .
20 0.333329237 3.666673147 59873.305674 179625.91702 3.333350948 . .
21 0.333322199 3.333350948 22025.629762 66082.889287 3.000047879 . .
22 0.333303068 3.000047879 8102.2479196 24312.743759 2.666796807 . .
23 0.333251072 2.666796807 2980.1220455 8946.3661364 2.333687028 . .
24 0.333109779 2.333687028 1095.7973972 3293.3921917 2.000960972 . .
25 0.332726057 2.000960972 402.59352252 1213.7805676 1.669275383 . .
26 0.331685589 1.669275383 147.57921936 448.73765809 1.340398996 . .
27 0.328876386 1.340398996 53.767819367 167.30345810 1.019019989 . .
28 0.321379008 1.019019989 19.264945499 63.794836497 0.717037155 . .
29 0.301982834 0.717037155 6.594405469 25.783216408 0.461273663 . .
30 0.255763492 0.461273663 1.990118733 11.970356198 0.295019735 . .
31 0.166253928 0.295019735 0.423127849 7.269383547 0.236812895 . .
32 0.058206841 0.236812895 0.034883733 6.104651199 0.231098607 . .
33 0.005714288 0.231098607 0.000297302 6.000891907 0.231049064 . .
34 0.000049543 0.231049064 0.000000022 6.000000066 0.231049060 . .
35 0.000000004 0.231049060 0.000000022 6.000000066 0.231049060 0.231049060 0.0000000008
これより、解は x = 0.2310となります。
f(x) = 0 ⇐⇒ e3x − 2 = 0⇐⇒ e3x = 2⇐⇒ 3x = log 2
⇐⇒ x =13
log 2
より、この解は 13 log 2の近似値となっています。
(vi) f(x) = e2x − 6とおくと、f ′(x) = 2e2x となります。これより、Newton-Raphson法による逐次計算は
xm = xm−1 −f(xm−1)f ′(xm−1)
= xm−1 −e2xm−1 − 62e2xm−1
となります。従って、SASプログラムの関数の部分は、
*元の関数;
%macro f(x);
exp(2*&x) - 6
%mend f;
*微分した関数;
%macro df(x);
2*exp(2*&x)
%mend df;
となります。実行プログラムは
% exe(10, dfx, 6)
となり、出力は以下の通りとなります。
9
i diff x f x df x y sol check
1 10.000000000 10.000000000 485165189.41 970330390.82 9.500000006 . .
2 0.499999994 9.500000006 178482297.17 356964606.34 9.000000023 . .
3 0.499999983 9.000000023 65659966.157 131319944.31 8.500000069 . .
4 0.499999954 8.500000069 24154950.072 48309912.143 8.000000193 . .
5 0.499999876 8.000000193 8886107.9484 17772227.897 7.500000530 . .
6 0.499999662 7.500000530 3269014.8408 6538041.6816 7.000001448 . .
7 0.499999082 7.000001448 1202601.7674 2405215.5347 6.500003943 . .
8 0.499997505 6.500003943 442410.88069 884833.76138 6.000010724 . .
9 0.499993219 6.000010724 162752.28213 325516.56425 5.500029156 . .
10 0.499981568 5.500029156 59871.633192 119755.26638 5.000079258 . .
11 0.499949898 5.000079258 22023.957624 44059.915249 4.500215436 . .
12 0.499863822 4.500215436 8100.5760772 16213.152154 4.000585506 . .
13 0.499629930 4.000585506 2978.4507708 5968.9015415 3.501590716 . .
14 0.498994790 3.501590716 1094.1275787 2200.2551573 3.004317673 . .
15 0.497273044 3.004317673 400.92762561 813.85525122 2.511689991 . .
16 0.492627682 2.511689991 145.92393717 303.84787435 2.031436715 . .
17 0.480253276 2.031436715 52.141135741 116.28227148 1.583035294 . .
18 0.448401421 1.583035294 17.714118499 47.428236997 1.209542210 . .
19 0.373493084 1.209542210 5.235567546 22.471135093 0.976551419 . .
20 0.232990791 0.976551419 1.050530327 14.101060654 0.902051326 . .
21 0.074500093 0.902051326 0.074518046 12.149036093 0.895917667 . .
22 0.006133659 0.895917667 0.000455205 12.000910410 0.895879736 . .
23 0.000037931 0.895879736 0.000000017 12.000000035 0.895879735 . .
24 0.000000001 0.895879735 0.000000017 12.000000035 0.895879735 0.895879735 0.000000000
これより、解は x = 0.8959となります。なお、
f(x) = 0 ⇐⇒ e2x − 6 = 0⇐⇒ e2x = 6⇐⇒ 2x = log 6
⇐⇒ x =12
log 6
より、この解は 12 log 6の近似値となります。
(vii) f(x) = log x − 1とおくと、f ′(x) = 1x となります。これより、Newton-Raphson法による逐次計算は
xm = xm−1 −f(xm−1)f ′(xm−1)
10
= xm−1 −log (xm−1) − 1
1xm−1
となります。従って、SASプログラムの関数の部分は、
*元の関数;
%macro f(x);
log(&x) - 1
%mend f;
*微分した関数;
%macro df(x);
1 / &x
%mend df;
となります。実行プログラムは
% exe(10, dfx, 7)
となり、出力は以下の通りとなります。
i diff x f x df x y sol check
1 10.000000000 5.000000000 0.609437912 0.200000000 1.952810438 . .
2 3.047189562 1.952810438 -0.330730415 0.512082474 2.598664244 . .
3 0.645853806 2.598664244 -0.045002439 0.384813083 2.715610474 . .
4 0.116946230 2.715610474 -0.000983220 0.368241325 2.718280515 . .
5 0.002670042 2.718280515 -0.000000483 0.367879619 2.718281828 . .
6 0.000001313 2.718281828 -0.000000000 0.367879441 2.718281828 . .
7 0.000000000 2.718281828 -0.000000000 0.367879441 2.718281828 2.718281828 0.000000000
これより、解は x = 2.7183です。なお、
f(x) = 0 ⇐⇒ log x − 1 = 0⇐⇒ log x = 1⇐⇒ x = e
より、この解は eの近似値です。
(viii) f(x) = log x − 2とおくと、f ′(x) = 1x となります。これより、Newton-Raphson法による逐次計算は
xm = xm−1 −f(xm−1)f ′(xm−1)
= xm−1 −log (xm−1) − 2
1xm−1
となります。従って、SASプログラムの関数の部分は、
11
*元の関数;
%macro f(x);
log(&x) - 2
%mend f;
*微分した関数;
%macro df(x);
1 / &x
%mend df;
となります。実行プログラムは
% exe(10, dfx, 8)
となり、出力は以下の通りとなります。
i diff x f x df x y sol check
1 10.000000000 10.000000000 0.302585093 0.100000000 6.974149070 . .
2 3.025850930 6.974149070 -0.057789677 0.143386668 7.377182891 . .
3 0.403033821 7.377182891 -0.001608156 0.135553099 7.389046555 . .
4 0.011863663 7.389046555 -0.000001292 0.135335458 7.389056099 . .
5 0.000009544 7.389056099 -0.000000000 0.135335283 7.389056099 . .
6 0.000000000 7.389056099 -0.000000000 0.135335283 7.389056099 7.389056099 0.000000000
これより、解は x = 7.3891となります。なお、
f(x) = 0 ⇐⇒ log x − 2 = 0⇐⇒ log x = 2⇐⇒ x = e2
より、この解は e2 の近似値です。
(ix) f(λ) = 12λ − 3とおくと、f ′(λ) = − 12
λ2 となります。これより、Newton-Raphson法による逐次計算は、
λm = λm−1 −f(xm−1)f ′(xm−1)
= λm−1 −12
λm−1− 3
− 12λ2
m−1
となります。従って、SASプログラムの関数の部分は、
*元の関数;
%macro f(x);
12 /&x - 3
%mend f;
12
*微分した関数;
%macro df(x);
- 12 /&x**2
%mend df;
となります。実行プログラムは
% exe(10, dfx, 9)
となり、出力は以下の通りとなります。
i diff x f x df x y sol check
1 10.000000000 5.000000000 -0.600000000 -0.480000000 3.750000000 . .
2 1.250000000 3.750000000 0.200000000 -0.853333333 3.984375000 . .
3 0.234375000 3.984375000 0.011764706 -0.755893887 3.999938965 . .
4 0.015563965 3.999938965 0.000045777 -0.750022889 3.999999999 . .
5 0.000061034 3.999999999 0.000000001 -0.750000000 4.000000000 . .
6 0.000000001 4.000000000 0.000000001 -0.750000000 4.000000000 4.000000000 0.000000000
これより、解は λ = 4.000となります。f(4) = 124 − 3 = 0より、確かに解になっています。
(x) f(λ) = 1192λ − 149とおくと、f ′(λ) = −1192
λ2 となります。これより、Newton-Raphson法による逐次計算は、
λm = λm−1 −f(xm−1)f ′(xm−1)
= λm−1 −1192λm−1
− 149
− 1192λ2
m−1
となります。従って、SASプログラムの関数の部分は、
*元の関数;
%macro f(x);
1192 /&x - 149
%mend f;
*微分した関数;
%macro df(x);
-1192 /&x**2
%mend df;
となります。実行プログラムは
% exe(10, dfx, 10)
となり、出力は以下の通りとなります。
13
i diff x f x df x y sol check
1 10.000000000 10.000000000 -29.80000000 -11.92000000 7.500000000 . .
2 2.500000000 7.500000000 9.933333333 -21.19111111 7.968750000 . .
3 0.468750000 7.968750000 0.584313725 -18.77136486 7.999877930 . .
4 0.031127930 7.999877930 0.002273594 -18.62556840 7.999999998 . .
5 0.000122068 7.999999998 0.000000035 -18.62500001 8.000000000 . .
6 0.000000002 8.000000000 0.000000035 -18.62500001 8.000000000 8.000000000 0.000000000
これより、解は x = 8.000となります。f(8) = 11928 − 149 = 0より、確かに解になっています。
問題2:Newton-Raphson法と Fisher’s Scoring法による最尤推定
(1パラメータ)
まず、データが n個の場合のときの尤度関数や対数尤度関数などを導き、その後、データを代入していきます。
問題2-1:Poisson分布
Poisson分布 Po(λ)の確率密度関数は
f(x|λ) =λx
x!exp(−λ)
より、尤度関数は
L(λ) =n∏
i=1
(λxi
xi!exp(−λ)
)
=λ
nP
i=1xi
n∏i=1
xi!exp(−nλ)
となり、対数尤度関数は
l(λ) =
(n∑
i=1
xi
)log λ −
n∑i=1
log xi! − nλ
となります。次に、l(λ)の1階微分を F (λ)とおくと、
F (λ) = l′(λ) =
n∑i=1
xi
λ− n (1)
となります。F (λ)をさらに微分すると、
F ′(λ) = −
n∑i=1
xi
λ2(2)
となります。また、E[x] = λより、Fisher情報量は
I(λ) = E[−F ′(λ)] =
n∑i=1
E[xi]
λ2=
nλ
λ2=
n
λ(3)
14
です。以上より、Newton-Raphson法によるくり返し計算は、(1)、(2)を用いて
λm = λm−1 −F (λm−1)F ′(λm−1)
= λm−1 −
nP
i=1xi
λm−1− n
−n
P
i=1xi
λ2m−1
となります。次に、Fisher’s Scoring法によるくり返し計算は (1)、(3)を用いて
λm = λm−1 +F (λm−1)I(λm−1)
= λm−1 +
nP
i=1xi
λm−1− n
nλm−1
= λm−1 +
n∑i=1
xi − nλm−1
n= λm−1 + x − λm−1
= x
となります。以下、個別の数値を代入していきます。
(i) n = 5,5∑
i=1
xi = 1 + 2 + 3 + 5 + 9 = 20より、(1)、(2)、(3)は、
F (λ) =20λ
− 5, F ′(λ) = −20λ2
, I(λ) =5λ
となります。これより、プログラムの主要部分は以下の通りとなります。
*元の関数;
%macro f(x);
20 /&x -5
%mend f;
*1 階微分;
%macro df(x);
- 20 /&x**2
%mend df;
*Fisher情報量;
%macro I(x);
5 / &x
%mend I;
15
*くり返し計算(Newton-Raphson法);
%macro seqn(x);
f x =% f(&x);
df x =% df(&x);
y = &x - f x / df x;
%mend seqn;
*くり返し計算(Fisher’s Scoring法);
%macro seqf(x);
f x =% f(&x);
I x =% I(&x);
y = &x + f x / I x;
%mend seqf;
*計算実行;
%macro exe2(init, denom, method, no);
data d&no;
length i 8.0 diff x f x &denom y sol check 8;
i =1;*くり返しの初期値;
diff = 10;
x = &init;
&denom =100;
do until(diff < 10**(-8) or &denom = 0 or i> 1000 );
% seq&method(x)
output;
diff = abs(y - x);
x = y;
i = i +1;
end;
sol = y; *Newton-Raphson法による解;
check =% f(y); *元の関数に入れて大体 0になるか確認;
output;
run;
%mend exe2;
これより、Newton-Raphson法のくり返し計算の実行プログラムは以下の通りとなります。
% exe2(3, dfx, n, 1 1 n)
出力は以下の通りです。
16
i diff x f x df x y sol check
1 10.000000000 3.000000000 1.666666667 -2.222222222 3.750000000 . .
2 0.750000000 3.750000000 0.333333333 -1.422222222 3.984375000 . .
3 0.234375000 3.984375000 0.019607843 -1.259823145 3.999938965 . .
4 0.015563965 3.999938965 0.000076295 -1.250038148 3.999999999 . .
5 0.000061034 3.999999999 0.000000001 -1.250000001 4.000000000 . .
6 0.000000001 4.000000000 0.000000001 -1.250000001 4.000000000 4.000000000 0.000000000
これより、Newton-Raphson法による最尤推定値は λ̂ = 4.000となります。
次に、Fisher’s Scoring法のくり返し計算の実行プログラムは以下の通りです。
% exe2(10, Ix, f, 1 1 f)
出力は以下の通りです。
i diff x f x I x y sol check
1 10.000000000 10.000000000 -3.000000000 0.500000000 4.000000000 . .
2 6.000000000 4.000000000 0.000000000 1.250000000 4.000000000 . .
3 0.000000000 4.000000000 0.000000000 1.250000000 4.000000000 4.000000000 0.000000000
となります。これより、Fisher’s Scoring法による最尤推定値は λ̂ = 4.000となります。
最後に手計算で求めます。尤度方程式は F (λ) = l′(λ) = 0ですので
F (λ̂) = 0 ⇐⇒ 20
λ̂− 5 = 0
⇐⇒ λ̂ = 4
となり、SASの出力と一致しています。
(ii) n = 6,6∑
i=1
xi = 100 + 110 + 120 + 140 + 160 + 180 = 810より、(1)、(2)、(3)は、
F (λ) =810λ
− 6, F ′(λ) = −810λ2
, I(λ) =6λ
となります。これより、プログラムの関数の指定の部分は以下の通りとなります。
*元の関数;
%macro f(x);
810 /&x -6
%mend f;
17
*1 階微分;
%macro df(x);
- 810 /&x**2
%mend df;
*Fisher情報量;
%macro I(x);
6 / &x
%mend I;
これより、Newton-Raphson法のくり返し計算のプログラムは以下の通りとなります。
% exe2(3, dfx, n, 1 2 n)
出力は以下の通りです。
i diff x f x df x y sol check
1 10.000000000 3.000000000 264.00000000 -90.00000000 5.933333333 . .
2 2.933333333 5.933333333 130.51685393 -23.00845853 11.605893004 . .
3 5.672559671 11.605893004 63.792130576 -6.013508013 22.214032287 . .
4 10.608139282 22.214032287 30.463438495 -1.641459687 40.772781385 . .
5 18.558749098 40.772781385 13.866194370 -0.487241579 69.231342756 . .
6 28.458561371 69.231342756 5.699903075 -0.168997200 102.95913870 . .
7 33.727795943 102.95913870 1.867198679 -0.076410883 127.39543116 . .
8 24.436292465 127.39543116 0.358155804 -0.049908821 134.57163358 . .
9 7.176202413 134.57163358 0.019099111 -0.044727845 134.99864076 . .
10 0.427007181 134.99864076 0.000060411 -0.044445339 134.99999999 . .
11 0.001359229 134.99999999 0.000000001 -0.044444444 135.00000000 . .
12 0.000000014 135.00000000 0.000000000 -0.044444444 135.00000000 . .
13 0.000000000 135.00000000 0.000000000 -0.044444444 135.00000000 135.00000000 0.000000000
これより、Newton-Raphson法による最尤推定値は λ̂ = 135.0000となります。
次に、Fisher’s Scoring法のくり返し計算のプログラムは以下の通りとなります。
% exe2(10, Ix, f, 1 2 f)
出力は以下の通りです。
18
i diff x f x I x y sol check
1 10.000000000 10.000000000 75.000000000 0.600000000 135.00000000 . .
2 125.00000000 135.00000000 0.000000000 0.044444444 135.00000000 . .
3 0.000000000 135.00000000 0.000000000 0.044444444 135.00000000 135.00000000 0.000000000
となります。これより Fisher’s Scoring法による最尤推定値は λ̂ = 135.0000となります。
最後に、手計算により求めます。尤度方程式は F (λ) = l′(λ) = 0ですので、
F (λ̂) = 0 ⇐⇒ 810
λ̂− 6 = 0
⇐⇒ λ̂ = 135
となり、SASの出力結果と一致しています。
問題2-2:指数分布
指数分布 E(λ)の確率密度関数は
f(x|λ) = λ exp(−λx)
より、尤度関数は
L(λ) =n∏
i=1
{λ exp(−λxi)}
= λn exp
(−λ
n∑i=1
xi
)
となり、対数尤度関数は
l(λ) = n log λ − λn∑
i=1
xi
となります。次に、l(λ)の1階微分を F (λ)とおくと、
F (λ) = l′(λ) =n
λ−
n∑i=1
xi (4)
です。さらに λで微分しますと、
F ′(λ) = − n
λ2(5)
となります。これより、Fisher情報量は
I(λ) = −E[F ′(λ)] =n
λ2(6)
です。以上より、Newton-Raphson法によるくり返し計算は (4)、(5)から
λm = λm−1 −F (λm−1)F ′(λm−1)
= λm−1 −
nλm−1
−n∑
i=1
xi
− nλ2
m−1
19
となります。次に、Fisher’s Scoring法によるくり返し計算は (4)、(6)から
λm = λm−1 +F (λm−1)I(λm−1)
= λm−1 +
nλm−1
−n∑
i=1
xi
nλ2
m−1
となります。以下、個別の数値を代入していきます。
(i) n = 5,5∑
i=1
xi = 2 + 4 + 6 + 10 + 12 = 34より、(4)、(5)、(6)は、
F (λ) =5λ− 34, F ′(λ) = − 5
λ2, I(λ) =
5λ2
となります。これより、プログラムの関数の指定の部分は以下の通りとなります。
*元の関数;
%macro f(x);
5 / &x -34
%mend f;
*1 階微分;
%macro df(x);
- 5 / &x**2
%mend df;
*Fisher情報量;
%macro I(x);
5 / &x**2
%mend I;
これより、Newton-Raphson法のくり返し計算のプログラムは以下の通りとなります。
% exe2(0.001, dfx, n, 2 1 n)
出力は以下のようになります。
20
i diff x f x df x y sol check
1 10.000000000 0.001000000 4966.0000000 -5000000.000 0.001993200 . .
2 0.000993200 0.001993200 2474.5289986 -1258543.547 0.003959385 . .
3 0.001966185 0.003959385 1228.8224958 -318944.1312 0.007812168 . .
4 0.003852783 0.007812168 606.02723554 -81926.97245 0.015209331 . .
5 0.007397164 0.015209331 294.74554984 -21614.72731 0.028845661 . .
6 0.013636330 0.028845661 139.33629397 -6009.094161 0.052033232 . .
7 0.023187570 0.052033232 62.092436516 -1846.751271 0.085655754 . .
8 0.033622523 0.085655754 24.373194469 -681.4859665 0.121420532 . .
9 0.035764778 0.121420532 7.179196775 -339.1452494 0.142589034 . .
10 0.021168502 0.142589034 1.065810143 -245.9222082 0.146922966 . .
11 0.004333932 0.146922966 0.031439256 -231.6277716 0.147058698 . .
12 0.000135732 0.147058698 0.000029018 -231.2003946 0.147058824 . .
13 0.000000126 0.147058824 0.000000000 -231.2000000 0.147058824 . .
14 0.000000000 0.147058824 0.000000000 -231.2000000 0.147058824 0.147058824 -0.000000000
これより、Newton-Raphson法による最尤推定値は λ̂ = 0.1471となります。
次に、Fisher’s Scoring法のくり返し計算のプログラムは以下のようになります。
% exe2(0.001, Ix,f ,2 1 f)
出力は以下の通りです。
21
i diff x f x I x y sol check
1 10.000000000 0.001000000 4966.0000000 5000000.0000 0.001993200 . .
2 0.000993200 0.001993200 2474.5289986 1258543.5474 0.003959385 . .
3 0.001966185 0.003959385 1228.8224958 318944.13119 0.007812168 . .
4 0.003852783 0.007812168 606.02723554 81926.972446 0.015209331 . .
5 0.007397164 0.015209331 294.74554984 21614.727309 0.028845661 . .
6 0.013636330 0.028845661 139.33629397 6009.0941614 0.052033232 . .
7 0.023187570 0.052033232 62.092436516 1846.7512711 0.085655754 . .
8 0.033622523 0.085655754 24.373194469 681.48596651 0.121420532 . .
9 0.035764778 0.121420532 7.179196775 339.14524941 0.142589034 . .
10 0.021168502 0.142589034 1.065810143 245.92220820 0.146922966 . .
11 0.004333932 0.146922966 0.031439256 231.62777157 0.147058698 . .
12 0.000135732 0.147058698 0.000029018 231.20039464 0.147058824 . .
13 0.000000126 0.147058824 0.000000000 231.20000000 0.147058824 . .
14 0.000000000 0.147058824 0.000000000 231.20000000 0.147058824 0.147058824 -0.000000000
これより、Fisher’s Scoring法による最尤推定値は λ̂ = 0.1471となります。
最後に手計算により求めます。尤度方程式は F (λ) = l′(λ) = 0より、
F (λ̂) = 0 ⇐⇒ 5
λ̂− 34 = 0
⇐⇒ λ̂ =534
= 0.1471
となります。
(ii) n = 8,8∑
i=1
xi = 20 + 20 + 21 + 22 + 23 + 25 + 40 + 50 = 221より、(4)、(5)、(6)は、
F (λ) =8λ− 221, F ′(λ) = − 8
λ2, I(λ) =
8λ2
となります。これより、プログラムの関数の指定の部分は以下の通りとなります。
*元の関数;
%macro f(x);
8 / &x - 221
%mend f;
*1 階微分;
%macro df(x);
- 8 / &x**2
%mend df;
22
*Fisher情報量;
%macro I(x);
8 / &x**2
%mend I;
これより、Newton-Raphson法のくり返し計算のプログラムは以下の通りとなります。
% exe2(0.001, dfx, n, 2 2 n)
出力は以下の通りです。
i diff x f x df x y sol check
1 10.000000000 0.001000000 7779.0000000 -8000000.000 0.001972375 . .
2 0.000972375 0.001972375 3835.0238291 -2056416.163 0.003837281 . .
3 0.001864906 0.003837281 1863.8092693 -543303.7112 0.007267792 . .
4 0.003430511 0.007267792 879.74691867 -151455.4724 0.013076410 . .
5 0.005808618 0.013076410 390.78871457 -46785.67891 0.021429152 . .
6 0.008352742 0.021429152 152.32321714 -17421.27806 0.030172668 . .
7 0.008743516 0.030172668 44.140625649 -8787.443921 0.035195815 . .
8 0.005023147 0.035195815 6.299750872 -6458.147093 0.036171289 . .
9 0.000975473 0.036171289 0.169892747 -6114.515182 0.036199074 . .
10 0.000027785 0.036199074 0.000130404 -6105.132205 0.036199095 . .
11 0.000000021 0.036199095 0.000000000 -6105.125000 0.036199095 . .
12 0.000000000 0.036199095 0.000000000 -6105.125000 0.036199095 0.036199095 -0.000000000
これより、Newton-Raphson法の最尤推定値は λ̂ = 0.0362となります。
次に、Fisher’s Scoring法のくり返し計算のプログラムは以下の通りとなります。
% exe2(0.001, Ix, f, 2 2 f)
出力は以下の通りです。
23
i diff x f x I x y sol check
1 10.000000000 0.001000000 7779.0000000 8000000.0000 0.001972375 . .
2 0.000972375 0.001972375 3835.0238291 2056416.1628 0.003837281 . .
3 0.001864906 0.003837281 1863.8092693 543303.71118 0.007267792 . .
4 0.003430511 0.007267792 879.74691867 151455.47237 0.013076410 . .
5 0.005808618 0.013076410 390.78871457 46785.678910 0.021429152 . .
6 0.008352742 0.021429152 152.32321714 17421.278057 0.030172668 . .
7 0.008743516 0.030172668 44.140625649 8787.4439212 0.035195815 . .
8 0.005023147 0.035195815 6.299750872 6458.1470933 0.036171289 . .
9 0.000975473 0.036171289 0.169892747 6114.5151822 0.036199074 . .
10 0.000027785 0.036199074 0.000130404 6105.1322048 0.036199095 . .
11 0.000000021 0.036199095 0.000000000 6105.1250000 0.036199095 . .
12 0.000000000 0.036199095 0.000000000 6105.1250000 0.036199095 0.036199095 -0.000000000
これより、Fisher’s Scoring法による最尤推定値は λ̂ = 0.0362となります。
最後に手計算により求めます。尤度方程式は F (λ) = l′(λ) = 0より、
F (λ̂) = 0 ⇐⇒ 8
λ̂− 221 = 0
⇐⇒ λ̂ =8
221= 0.0362
となり、SASの出力と一致します。
問題2-3:二項分布
二項分布 Bin(n, p)の確率関数は
f(x|n, p) = nCxpx(1 − p)n−x
より、尤度関数は
L(p) = nCxpx(1 − p)n−x
となり、対数尤度関数は
l(p) = log nCx + x log p + (n − x) log (1 − p)
となります。l(p)の 1階微分を F (p)とおくと、
F (p) = l′(p) =x
p− n − x
1 − p=
x(1 − p) − (n − x)pp(1 − p)
=x − xp − np + xp
p(1 − p)
=x − np
p(1 − p)(7)
となります。pでもう1回微分すると
F ′(p) = − x
p2− n − x
(1 − p)2(8)
24
となります。これより、Fisher情報量は
I(p) = −E[F ′(p)] =E[x]p2
+E[n − x](1 − p)2
=np
p2+
n − np
(1 − p)2
=n
p+
n
1 − p
=n(1 − p) + np
p(1 − p)
=n
p(1 − p)(9)
です。これより、Newton-Raphson法によるくり返し計算は
pm = pm−1 −F (pm1)
F ′(pm−1)
= pm−1 −x−npm−1
pm−1(1−pm−1)
− xp2
m−1− n−x
(1−pm−1)2
となります。次に、Fisher’s Scoring法によるくり返し計算は
pm = pm−1 +F (pm−1)I(pm−1)
= pm−1 +x−npm−1
pm−1(1−pm−1)n
pm−1(1−pm−1)
= pm−1 +x − npm−1
n
= pm−1 +x
n− pm−1
=x
n
となります。以下、個別の数値を代入していきます。
(i) n = 10, x = 4より、(7)、(8)、(9)は、
F (p) =4 − 10p
p(1 − p), F ′(p) = − 4
p2− 6
(1 − p)2, I(p) =
10p(1 − p)
となります。これより、プログラムの関数の指定の部分は、以下の通りです。
*元の関数;
%macro f(x);
( 4 - 10*&x) / (&x * (1-&x))
%mend f;
*1 階微分;
%macro df(x);
-4 / &x**2 - 6 / (1-&x)**2
%mend df;
25
*Fisher情報量;
%macro I(x);
10 / (&x * (1-&x))
%mend I;
これより、Newton-Raphson法のくり返し計算のプログラムは以下の通りです。
% exe2(0.001, dfx, n, 3 1 n)
出力は以下の通りです。
i diff x f x df x y sol check
1 10.000000000 0.001000000 3993.9939940 -4000006.012 0.001998497 . .
2 0.000998497 0.001998497 1995.4921176 -1001510.722 0.003990979 . .
3 0.001992482 0.003990979 996.23629869 -251137.4957 0.007957875 . .
4 0.003966896 0.007957875 496.59862441 -63169.53664 0.015819237 . .
5 0.007861362 0.015819237 246.76024879 -15990.32083 0.031251088 . .
6 0.015431851 0.031251088 121.80198673 -4102.108052 0.060943623 . .
7 0.029692535 0.060943623 59.245037568 -1083.773667 0.115609131 . .
8 0.054665508 0.115609131 27.815012670 -306.9498282 0.206226587 . .
9 0.090617456 0.206226587 11.837309010 -103.5752303 0.320513652 . .
10 0.114287064 0.320513652 3.649768161 -51.93280188 0.390792320 . .
11 0.070278668 0.390792320 0.386757576 -42.35862479 0.399922871 . .
12 0.009130551 0.399922871 0.003213924 -41.67202648 0.399999995 . .
13 0.000077124 0.399999995 0.000000207 -41.66666701 0.400000000 . .
14 0.000000005 0.400000000 0.000000207 -41.66666701 0.400000000 0.400000000 0.000000000
これより、Newton-Raphson法による最尤推定値は p̂ = 0.4000となります。次に、Fisher’s Scoring法のくり返し計算のプ
ログラムは以下の通りです。
% exe2(0.001, Ix, f, 3 1 f)
出力は以下の通りです。
i diff x f x I x y sol check
1 10.000000000 0.001000000 3993.9939940 10010.010010 0.400000000 . .
2 0.399000000 0.400000000 -0.000000000 41.666666667 0.400000000 . .
3 0.000000000 0.400000000 -0.000000000 41.666666667 0.400000000 0.400000000 -0.000000000
26
これより、Fisher’s Scoring法による最尤推定値は p̂ = 0.4000となります。
最後に手計算により求めます。尤度方程式は F (p) = l′(p) = 0より、
F (p̂) = 0 ⇐⇒ 4 − 10p̂
p̂(1 − p̂)= 0
⇐⇒ p̂ =410
= 0.4
となり、SASの出力と一致します。
(ii) n = 111, x = 23より、(7)、(8)、(9)は、
F (p) =23 − 111p
p(1 − p), F ′(p) = −23
p2− 88
(1 − p)2, I(p) =
111p(1 − p)
となります。これより、プログラムの関数の指定の部分は以下の通りです。
*元の関数;
%macro f(x);
( 23 - 111*&x) / (&x * (1-&x))
%mend f;
*1 階微分;
%macro df(x);
-23 /&x**2 - 88 / (1-&x)**2
%mend df;
*Fisher情報量;
%macro I(x);
111 / (&x * (1-&x))
%mend I;
これより、Newton-Raphson法のくり返し計算のプログラムは以下のようになります。
% exe2(0.001, dfx,n, 3 2 n)
出力は以下の通りです。
27
i diff x f x df x y sol check
1 10.000000000 0.001000000 22911.911912 -23000088.18 0.001996166 . .
2 0.000996166 0.001996166 11433.910304 -5772195.879 0.003977026 . .
3 0.001980860 0.003977026 5694.8645503 -1454244.637 0.007893055 . .
4 0.003916029 0.007893055 2825.2538978 -369268.8835 0.015543995 . .
5 0.007650940 0.015543995 1390.2816406 -95283.26149 0.030135032 . .
6 0.014591037 0.030135032 672.49702450 -25420.59808 0.056589840 . .
7 0.026454807 0.056589840 313.15476159 -7280.964989 0.099599902 . .
8 0.043010063 0.099599902 133.18959131 -2427.060980 0.154476806 . .
9 0.054876904 0.154476806 44.812095009 -1086.924358 0.195705153 . .
10 0.041228347 0.195705153 8.111120029 -736.5496939 0.206717472 . .
11 0.011012319 0.206717472 0.331496633 -678.0754399 0.207206351 . .
12 0.000488879 0.207206351 0.000578673 -675.7111414 0.207207207 . .
13 0.000000856 0.207207207 0.000000002 -675.7070158 0.207207207 . .
14 0.000000000 0.207207207 0.000000002 -675.7070158 0.207207207 0.207207207 0.000000000
これより、Newton-Raphson法による最尤推定値は p̂ = 0.2072となります。
次に、Fisher’s Scoring法のくり返し計算のプログラムは以下の通りです。
% exe2(0.001, Ix, f, 3 2 f)
出力は以下の通りです。
i diff x f x I x y sol check
1 10.000000000 0.001000000 22911.911912 111111.11111 0.207207207 . .
2 0.206207207 0.207207207 0.000000000 675.70701581 0.207207207 . .
3 0.000000000 0.207207207 0.000000000 675.70701581 0.207207207 0.207207207 0.000000000
これより、Fisher’s Scoring法による最尤推定値は p̂ = 0.2072となります。
最後に手計算により求めます。
F (p̂) = 0 ⇐⇒ 23 − 111p̂
p̂(1 − p̂)= 0
⇐⇒ p̂ =23111
= 0.2072
となり、SASの出力と一致します。
28
問題2-4:分散既知の正規分布
正規分布 N(µ, σ2)の確率密度関数は
f(x|µ, σ2) =1√
2πσ2exp
(− (x − µ)2
2σ2
)となります。これより、しばらくは「問題2-5」までを視野に入れて、平均・分散未知としておきますと、尤度関数は
L(µ, σ2) =n∏
i=1
(1√
2πσ2exp
(− (xi − µ)2
2σ2
))
=1
(√
2πσ2)nexp
−
n∑i=1
(xi − µ)2
2σ2
となり、対数尤度関数は
l(µ, σ2) = −n
2log (2πσ2) −
n∑i=1
(xi − µ)2
2σ2(10)
となります。以下、「問題2-4」に特化します。分散既知・平均未知とした場合の対数尤度関数を l1(µ)とおくと、
l1(µ) = −n
2log (2πσ2) −
n∑i=1
(xi − µ)2
2σ2
となります。l1(µ)の1階微分を F1(µ)とおくと、
F1(µ) = l′1(µ) =2
n∑i=1
(xi − µ)
2σ2=
n∑i=1
xi − nµ
σ2(11)
となります。µでもう1回微分すると
F ′1(µ) = − n
σ2(12)
となります。これより、Fisher情報量は
I1(µ) = −E[F ′1(µ)] =
n
σ2(13)
です。以上より、Newton-Raphson法によるくり返し計算は、(11)、(12)から
µm = µm−1 −F1(µm−1)F ′
1(µm−1)
= µm−1 −
nP
i=1xi−nµm−1
σ2
− nσ2
= µm−1 +
n∑i=1
xi − nµm−1
n
= µm−1 + x − µm−1
= x
29
となります。次に、Fisher’s Scoring法によるくり返し計算は、(11)、(13)から
µm = µm−1 +F1(µm−1)I(µm−1)
= µm−1 +
nP
i=1xi−nµm−1
σ2
nσ2
= µm−1 +
n∑i=1
xi − nµm−1
n
= µm−1 + x − µm−1
= x
となります。以下、個別の数値を代入していきます。
(i) n = 6, σ2 = 2,6∑
i=1
xi = 2 + 3 + 4 + 6 + 8 + 12 = 35より、(11)、(12)、(13)は、
F1(µ) =35 − 6µ
2, F ′
1(µ) = −62
= −3, I(µ) =62
= 3
となります。これより、プログラムの関数指定の部分は以下のようになります。
*元の関数;
%macro f(x);
(35 - 6*&x ) / 2
%mend f;
*1 階微分;
%macro df(x);
-3
%mend df;
*Fisher情報量;
%macro I(x);
3
%mend I;
これより、Newton-Raphson法のくり返し計算のプログラムは以下の通りです。
% exe2(10, dfx, n, 4 1 n)
出力は以下のようになります。
30
i diff x f x df x y sol check
1 10.000000000 10.000000000 -12.50000000 -3.000000000 5.833333333 . .
2 4.166666667 5.833333333 0.000000000 -3.000000000 5.833333333 . .
3 0.000000000 5.833333333 0.000000000 -3.000000000 5.833333333 5.833333333 0.000000000
これより、Newton-Raphson法による最尤推定値は µ̂ = 5.8333となります。
次に、Fisher’s Scoring法のくり返し計算のプログラムは以下のようになります。
% exe2(10, Ix, f, 4 1 f)
出力は以下の通りです。
i diff x f x I x y sol check
1 10.000000000 10.000000000 -12.50000000 3.000000000 5.833333333 . .
2 4.166666667 5.833333333 0.000000000 3.000000000 5.833333333 . .
3 0.000000000 5.833333333 0.000000000 3.000000000 5.833333333 5.833333333 0.000000000
これより、Fisher’s Scoring法による最尤推定値は µ̂ = 5.8333となります。
最後に、手計算により求めます。
F1(µ̂) = 0 ⇐⇒ 35 − 6µ̂
2= 0
⇐⇒ µ̂ =356
= 5.833
となり、SASの出力と一致します。
(ii) n = 5, σ2 = 10,5∑
i=1
xi = 110 + 112 + 123 + 138 + 140 = 623より、(11)、(12)、(13)は、
F1(µ) =623 − 5µ
10, F ′
1(µ) = − 510
= −12, I(µ) =
510
=12
となります。これよりプログラムの関数の指定の部分は以下のようになります。
*元の関数;
%macro f(x);
(623 - 5*&x ) / 10
%mend f;
*1 階微分;
%macro df(x);
- 1 / 2
%mend df;
31
*Fisher情報量;
%macro I(x);
1 / 2
%mend I;
これより、Newton-Raphson法のくり返し計算のプログラムは以下の通りです。
% exe2(0.001, dfx, n, 4 2 n)
出力は以下のようになります。
i diff x f x df x y sol check
1 10.000000000 0.001000000 62.299500000 -0.500000000 124.60000000 . .
2 124.59900000 124.60000000 -0.000000000 -0.500000000 124.60000000 . .
3 0.000000000 124.60000000 -0.000000000 -0.500000000 124.60000000 124.60000000 0.000000000
これより、Newton-Raphson法による最尤推定値は µ̂ = 124.6000となります。
次に、Fisher’s Scoring法のくり返し計算のプログラムは以下の通りです。
% exe2(0.001, Ix, f, 4 2 f)
出力は以下の通りです。
i diff x f x I x y sol check
1 10.000000000 0.001000000 62.299500000 0.500000000 124.60000000 . .
2 124.59900000 124.60000000 -0.000000000 0.500000000 124.60000000 . .
3 0.000000000 124.60000000 -0.000000000 0.500000000 124.60000000 124.60000000 0.000000000
これより、Fisher’s Scoring法による最尤推定値は µ̂ = 124.6000となります。
最後に手計算で求めます。尤度方程式は F1(µ) = l′1(µ) = 0より、
F1(µ̂) = 0 ⇐⇒ 623 − 5µ̂
10= 0
⇐⇒ µ̂ =6235
= 124.6
となり、SASの出力と一致します。
問題2-5:平均既知の正規分布
「問題2-4」と、l(µ, σ2)の算出までは同じです。今度は平均既知・分散未知とした場合の対数尤度関数を l2(σ2)とお
くと、
l2(σ2) = −n
2log (2πσ2) −
n∑i=1
(xi − µ)2
2σ2
32
となります。形は l(µ, σ2)や l1(µ)と全く同じですが、今回は σ2 のみ未知の関数 です。l2(σ2) の1階微分を F2(σ2) とお
くと、
F2(σ2) = l′2(σ2) = − n
2σ2+
n∑i=1
(xi − µ)2
2(σ2)2(14)
となります。σ2 でもう1回微分しますと、
F ′2(σ
2) =n
2(σ2)2−
2n∑
i=1
(xi − µ)2
2(σ2)3
=n
2(σ2)2−
n∑i=1
(xi − µ)2
(σ2)3(15)
となります。これより、Fisher情報量は
I2(σ2) = −E[F ′2(σ
2)]
= − n
2(σ2)2+
n∑i=1
E[(xi − µ)2]
(σ2)3
= − n
2(σ2)2+
nσ2
(σ2)3
= − n
2(σ2)2+
n
(σ2)2
=n
2(σ2)2(16)
です。以上より、Newton-Raphson法によるくり返し計算は (14)、(15)から
σ2m = σ2
m−1 −F2(σ2
m−1)F ′
2(σ2m−1)
= σ2m−1 −
− n2σ2 +
nP
i=1(xi−µ)2
2(σ2)2
n2(σ2)2 −
nP
i=1(xi−µ)2
(σ2)3
となります。次に、Fisher’s Scoring法によるくり返し計算は (14)、(16)から
σ2m = σ2
m−1 +F2(σ2
m−1)I(σ2
m−1)
= σ2m−1 +
− n2σ2 +
nP
i=1(xi−µ)2
2(σ2)2
n2(σ2
m−1)2
となります。以下、個別の数値を代入していきます。
(i) n = 5, µ = 5,5∑
i=1
(xi − µ)2 = (−3)2 + (−1)2 + 02 + 32 + 52 = 44より、(14)、(15)、(16)は、
F2(σ2) = − 52σ2
+44
2(σ2)2= − 5
σ2+
22(σ2)2
, F ′2(σ
2) =5
2(σ2)2− 44
(σ2)3, I2(σ2) =
52(σ2)2
となります。これより、プログラムの関数の指定の部分は以下の通りです。
33
*元の関数;
%macro f(x);
-5 /(2* &x) + 44 / (2*&x**2)
%mend f;
*1 階微分;
%macro df(x);
5 /(2*&x**2) - 44 / &x**3
%mend df;
*Fisher情報量;
%macro I(x);
5 / (2*&x**2)
%mend I;
これより、Newton-Raphson法のくり返し計算のプログラムは以下の通りです。
% exe2(8, dfx,n, 5 1 n)
出力は以下の通りです。
i diff x f x df x y sol check
1 10.000000000 8.000000000 0.031250000 -0.046875000 8.666666667 . .
2 0.666666667 8.666666667 0.004437870 -0.034308147 8.796019900 . .
3 0.129353234 8.796019900 0.000128606 -0.032341522 8.799996401 . .
4 0.003976501 8.799996401 0.000000116 -0.032283111 8.800000000 . .
5 0.000003599 8.800000000 0.000000000 -0.032283058 8.800000000 . .
6 0.000000000 8.800000000 0.000000000 -0.032283058 8.800000000 8.800000000 0.000000000
これより、Newton-Raphson法による最尤推定値は σ̂2 = 8.8000となります。
次に、Fisher’s Scoring法のくり返し計算のプログラムは以下の通りです。
% exe2(8, Ix, f, 5 1 f)
出力は以下の通りです。
i diff x f x I x y sol check
1 10.000000000 8.000000000 0.031250000 0.039062500 8.800000000 . .
2 0.800000000 8.800000000 -0.000000000 0.032283058 8.800000000 . .
3 0.000000000 8.800000000 -0.000000000 0.032283058 8.800000000 8.800000000 -0.000000000
34
これより、Fisher’s Scoring法による最尤推定値は σ̂2 = 8.8000となります。
最後に手計算により求めます。尤度方程式は F2(σ2) = l′2(σ2) = 0より、
F2(σ̂2) = 0 ⇐⇒ − 5
2σ̂2+
44
2(σ̂2)2= 0
⇐⇒ σ̂2 =445
= 8.8
となり、SASの出力と一致します。
(ii) n = 7, µ = 100,7∑
i=1
(xi − µ)2 = (−17)2 + (−8)2 + 42 + 62 + 202 + 802 + 1002 = 17205より、(14)、(15)、(16)は、
F2(σ2) = − 72σ2
+172052(σ2)2
, F ′2(σ
2) =7
2(σ2)2− 17205
(σ2)3, I2(σ2) =
72(σ2)2
となります。これより、プログラムの関数の指定の部分は以下の通りです。
*元の関数;
%macro f(x);
-7 / (2* &x) + 17205 / (2*&x**2)
%mend f;
*1 階微分;
%macro df(x);
7 / (2*&x**2) - 17205 / (&x**3)
%mend df;
*Fisher情報量;
%macro I(x);
7 / (2*&x**2)
%mend I;
これより、Newton-Raphson法のくり返し計算のプログラムは以下の通りです。
% exe2(10, dfx,n, 5 2 n)
出力は以下の通りです。
35
i diff x f x df x y sol check
1 10.000000000 10.000000000 85.675000000 -17.17000000 14.989807804 . .
2 4.989807804 14.989807804 38.051851900 -5.092606709 22.461787102 . .
3 7.471979298 22.461787102 16.894638547 -1.511237602 33.641126817 . .
4 11.179339714 33.641126817 7.497186115 -0.448808140 50.345783993 . .
5 16.704657176 50.345783993 3.324376265 -0.133442589 75.258192331 . .
6 24.912408339 75.258192331 1.472351237 -0.039745959 112.30224079 . .
7 37.044048455 112.30224079 0.650933771 -0.011870052 167.14056590 . .
8 54.838325117 167.14056590 0.286995883 -0.003559472 247.76933732 . .
9 80.628771414 247.76933732 0.126003455 -0.001074116 365.07834525 . .
10 117.30900793 365.07834525 0.054956520 -0.000327327 532.97316927 . .
11 167.89482402 532.97316927 0.023717118 -0.000101321 767.05304865 . .
12 234.07987938 767.05304865 0.010057975 -0.000032174 1079.6687001 . .
13 312.61565142 1079.6687001 0.004138049 -0.000010668 1467.5647486 . .
14 387.89604848 1467.5647486 0.001609300 -0.000003818 1889.0424696 . .
15 421.47772101 1889.0424696 0.000557899 -0.000001571 2244.0578595 . .
16 355.01538998 2244.0578595 0.000148596 -0.000000827 2423.6385711 . .
17 179.58071157 2423.6385711 0.000020389 -0.000000613 2456.9174357 . .
18 33.278864617 2456.9174357 0.000000545 -0.000000580 2457.8564246 . .
19 0.938988847 2457.8564246 0.000000000 -0.000000579 2457.8571429 . .
20 0.000718277 2457.8571429 0.000000000 -0.000000579 2457.8571429 . .
21 0.000000000 2457.8571429 0.000000000 -0.000000579 2457.8571429 2457.8571429 0.000000000
これより、Newton-Raphson法による最尤推定値は σ̂2 = 2457.8571となります。
次に、Fisher’s Scoring法のくり返し計算のプログラムは以下の通りです。
% exe2(10, Ix, f, 5 2 f)
出力は以下の通りです。
i diff x f x I x y sol check
1 10.000000000 10.000000000 85.675000000 0.035000000 2457.8571429 . .
2 2447.8571429 2457.8571429 0.000000000 0.000000579 2457.8571429 . .
3 0.000000000 2457.8571429 0.000000000 0.000000579 2457.8571429 2457.8571429 0.000000000
これより、Fisher’s Scoring法による最尤推定値は σ̂2 = 2457.8571となります。
36
最後に、手計算で求めます。尤度方程式は F2(σ2) = l′2(σ2) = 0より、
F2(σ̂2) = 0 ⇐⇒ 7
2σ̂2+
17205
2(σ̂2
)2 = 0
⇐⇒ λ̂ =17205
7= 2457.8571
となり、SASの出力と一致します。
37