newton-raphson法と fisher’s scoring³•とfisher’s scoring法 h22 年度bios...
TRANSCRIPT
Newton-Raphson法とFisher’s Scoring法H22年度 BioS継続勉強会:第10・11回補助資料
土居正明
1 はじめに
本稿では、SASを用いて Newton-Raphson法と Fisher’s Scoring法により最尤推定値を求める方法を述べます。なお、収
束基準と合わせるために SASの出力には小数第 9位まで出しますが、文章中で引用する際は適宜四捨五入して表記します。
また、計算がうまくいかないことがありますが、その原因と対処法のいくつかを補足で述べています。適宜参照してくだ
さい。
2 1変数の Newton-Raphson法と Fisher’s Scoring法
2.1 Newton-Raphson法の基礎
「例題1:1変数の方程式に対する Newton-Raphson法」
f(x) = x3 + 2とするとき、f(x) = 0を満たす解 xを Newton-Raphson法により求めよ。なお、収束基準は 10−8 とせよ。
「解答:例題1」
まず、y = x3 + 2をプロットします。
図 1 y = x3 + 2のグラフ
このとき、x3 + 2 = 0の解は −1.5と −1の間にありそうです。Newton-Raphson法とは、以下のように少しずつこの解
に近づいていき、最終的に(近似)解を得る方法です。
1
[Newton-Raphson法]
(a) 適当な点 x = x0 をとる*1。
(b) x = x0 における y = f(x)の接線 y = f ′(x0)(x − x0) + f(x0)を求める。
(c) (b)の接線と x軸の交点を求め、x座標を x1 とおく。
(d) x = x1 における y = f(x)の接線 y = f ′(x1)(x − x1) + f(x1)を求める。
(e) (d)の接線と x軸の交点を求め、x座標を x2 とおく。
(f) 以下同様に、「x = xk−1 での接線を求める」→「接線と x軸との交点を求め、x座標を xk とする」→「x = xk での
接線を求める」→(以下くり返し)
としていきます。このとき、段々解に近づいていき、最終的には解に収束する場合が多いです*2。そこで、
(z) 段々解に近づいていくので、あまり動かなくなったところが(大体の)解である*3。そこで、あるmに対して xm が
xm−1 と比べてほとんど動いていないときに終わりとし、xm を f(x) = 0の解とする。
という方法です。問題文にある「収束基準」とはこのときの「ほとんど動いていない」と判断するための基準です。つまり、
|xm − xm−1| < 10−8 となったときに、計算を終了し、x = xm を解とします。
図 2 x3 + 2 = 0に対する Newton-Raphson法(x0 = 4を初期値として 3回のくり返しまで)
以下、上の手順 (a)~(e)に従って、計算の手順を少しずつみていきます。
(a) 適当な点 x = x0 をとる。
→ 適当にとればよい。
(b) x = x0 における y = f(x)の接線 y = f ′(x0)(x − x0) + f(x0)を求める。
→ f ′(x)を計算し、接線を求めればよい。
(c) (b)の接線と x軸の交点を求め、x座標を x1 とおく。
→ 接線の式と x軸との交点が x1 なので、0 = f ′(x0)(x1 − x0) + f(x0)となる。これを x1 について解くと
*1 とりあえず勝手な値を設定して構いませんが、初期値によっては答えがきちんと求まらない場合があります。計算がうまくいかない場合、まずは初期値を変えてみてください。
*2 厳密な理論や仮定は省略します。*3 つまり「解にほとんど収束した」という意味です。
2
x1 = x0 −f(x0)f ′(x0)
(1)
で x1 が求まる。
(d) x = x1 における y = f(x)の接線 y = f ′(x1)(x − x1) + f(x1)を求める。
→ (b)と同様に接線を求めます。
(e) (d)の接線と x軸の交点を求め、x座標を x2 とおく。
→ 接線の式と x軸との交点の x座標が x2 なので、0 = f ′(x1)(x2 − x1) + f(x1)となります。これを x2 について
解くと
x2 = x1 −f(x1)f ′(x1)
(2)
で x2 が求まります。
以下同様に考えて、(1)、(2)より、xm−1 が求まっているとき、xm は 0 = f ′(xm−1)(xm − xm−1) + f(xm−1)を満たします
ので、
xm = xm−1 −f(xm−1)f ′(xm−1)
(3)
で求まります。なお、今 f(x) = x3 + 2より、f ′(x) = 3x2 です。これより、(3)は
xm = xm−1 −x3
m−1 + 23x2
m−1
となります。これより、x1, x2, x3, · · · を順に求めていき、
|xm − xm−1| < 10−8
となった最初の xm を解とします。以下、SASのデータステップで計算を実行していきます。
*元の関数;
%macro f(x);
&x**3 + 2
%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;
3
*計算実行マクロ;
*init は初期値;
*denomはくり返し計算の際の分母(Newton-Raphson法なら df x,後で述べる Fisher’s Scoring法なら I x);
%macro exe(init, denom);
data d0;
length i 3.0 diff x f x &denom y sol check 8.0;
i = 1; *くり返し回数の初期値;
diff = 10; *xm と xm−1 の差の初期値(10−8 より大きければいくつでもよい);
&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); *y が xm、xが xm−1;
x = y; *xを xm にして、次のくり返しで y を xm+1 にする;
i = i + 1; *くり返し回数を 1回増やす;
end;
sol = y; *Newton-Raphson法による解;
check =% f(sol); *元の関数に解 solを入れて、大体 0になるか(つまり f(x) = 0の解となるか)確認;
output;
run;
%mend exe;
となります。以下、Newton-Raphson法や後で述べます Fisher’s Scoring法のプログラムにおいて、実行マクロ% exeは 1
変数の問題では常に使用できます。問題ごとに、% f、% df、% seqの部分だけ変更すればよいことになります。
実行プログラムは、初期値を適当に x0 = 4としてみると、
% exe(4, dfx)
です。出力データセット d0は以下のようになります。
4
i diff x f x df x y sol check
1 10.000000000 4.000000000 66.000000000 48.000000000 2.625000000 . .
2 1.375000000 2.625000000 20.087890625 20.671875000 1.653250189 . .
3 0.971749811 1.653250189 6.518723243 8.199708562 0.858255685 . .
4 0.794994504 0.858255685 2.632193558 2.209808461 -0.332885360 . .
5 1.191141044 -0.332885360 1.963112087 0.332437988 -6.238083198 . .
6 5.905197838 -6.238083198 -240.7467857 116.74104594 -4.175854067 . .
7 2.062229131 -4.175854067 -70.81752926 52.313271558 -2.822133927 . .
8 1.353720139 -2.822133927 -20.47671607 23.893319712 -1.965128023 . .
9 0.857005904 -1.965128023 -5.588790200 11.585184442 -1.482719631 . .
10 0.482408392 -1.482719631 -1.259696099 6.595372512 -1.291722671 . .
11 0.190996960 -1.291722671 -0.155300581 5.005642377 -1.260697566 . .
12 0.031025105 -1.260697566 -0.003700207 4.768075059 -1.259921528 . .
13 0.000776038 -1.259921528 -0.000002277 4.762206771 -1.259921050 . .
14 0.000000478 -1.259921050 -0.000000000 4.762203156 -1.259921050 . .
15 0.000000000 -1.259921050 -0.000000000 4.762203156 -1.259921050 -1.259921050 0.000000000
xの列の 1行目が初期値 x0 で、yの列の i 行目が xi となります。これより、x0 = 4.000, x1 = 2.6250, x2 = 1.6533, x3 =
0.8583 · · · となり、解は solの一番下の行より x = −1.2599となります。
2.2 Newton-Raphson法の最尤法への適用(1パラメータ)
では次に、Newton-Raphson法を用いて最尤推定値を求めます。本節ではまず 1パラメータの場合の一般論を述べ、次に
具体例を計算します。
2.2.1 理論
確率密度関数 f(x|θ)を持つ分布に従う n個のデータ x1, · · · , xn が得られたとき、θ の最尤推定値は以下の手順で求めら
れます。
(i) 尤度関数 L(θ|x1, · · · , xn) =n∏
i=1
f(xi|θ)を求める。
(ii) 対数尤度関数 l(θ|x1, · · · , xn) = log L(θ|x1, · · · , xn) =n∑
i=1
log f(xi|θ)を求める。
(iii) 対数尤度関数の微分 dldθ (θ) =
n∑i=1
ddθ log f(xi|θ)を求める。
(iv) Newton-Raphson法で dldθ (θ̂) = 0となる θ̂ を求める。つまり、
F (θ) =dl
dθ(θ)
とおき、F (θ) = 0に Newton-Raphson法を適用する。
(v) y = F (θ)に対して、θ = θm−1 における接線は
y = F ′(θm−1)(θ − θm−1) + F (θm−1)
5
より、θ 軸との交点の θ 座標を θm とおく。これより (3)と同様に
θm = θm−1 −F (θm−1)F ′(θm−1)
(4)
となり、順に θm を |θm − θm−1|が収束基準を満たすまで求める。
2.2.2 具体例
「例題2:Newton-Raphson法による Poisson分布のパラメータの最尤推定」
Poisson分布 Po(λ)に従うデータ x1 = 4, x2 = 3, x3 = 5, x4 = 8が得られたとする。このとき、パラメータ λの最尤推
定値 λ̂を Newton-Raphson法により求めよ。なお、収束基準は 10−8 とせよ。
「解答:例題2」
(一般論)
Fisher’s Scoring法のことまで考慮して、まずデータ数 nの一般の場合を考えます。Poisson分布 Po(λ)の確率密度関数は
f(x|λ) =λx
x!e−λ (5)
です。ここで、尤度関数は
L(λ) =n∏
i=1
f(xi|λ)
=n∏
i=1
(λxi
xi!e−λ
)となりますので、対数尤度関数は
l(λ) =∑
log(
λxi
xi!e−λ
)=
n∑i=1
log λxi −n∑
i=1
log(xi!) +n∑
i=1
log(e−λ)
=n∑
i=1
xi log λ −n∑
i=1
log xi! − nλ
となります。これより、F (λ)を l(λ)の 1階微分とすると、
F (λ) = l′(λ)
=1λ
n∑i=1
xi − n (6)
となります。さらにもう1回微分すると
F ′(λ) = − 1λ2
n∑i=1
xi (7)
となります。 (一般論終わり)
では、今回のデータを用います。n = 4で、4∑
i=1
xi = 4 + 3 + 5 + 8 = 20です。このとき、(6)、(7)は
F (λ) =20λ
− 4
F ′(λ) = −20λ2
6
となります。これより、Newton-Raphson法のくり返し (4)は
λm = λm−1 −F (λm−1)F ′(λm−1)
= λm−1 −20
λm−1− 4
− 20λ2
m−1
(8)
= λm−1 +20λm−1 − 4λ2
m−1
20
= 2λm−1 −15λ2
m−1
となります。これを SASで実行します。なお、くり返しの部分ではなくて、F (λ), F ′(λ)をマクロ化して、(8)を用いてく
り返し計算を行います。なお、実行マクロ% exeは、「例題1」で作ったものを使います。
*元の関数;
%macro f(x);
20 /&x -4
%mend f;
*微分した関数;
%macro df(x);
-20 /&x**2
%mend df;
*接線と x軸との交わりを求める;
%macro seq(x);
f x =% f(&x);
df x =% df(&x);
y= &x - f x / df x ;
%mend seq;
となります。実行は、初期値を λ0 = 7とおくと、
% exe(7, dfx)
となります。出力データセットは
7
i diff x f x df x y sol check
1 10.000000000 7.000000000 -1.142857143 -0.408163265 4.200000000 . .
2 2.800000000 4.200000000 0.761904762 -1.133786848 4.872000000 . .
3 0.672000000 4.872000000 0.105090312 -0.842588323 4.996723200 . .
4 0.124723200 4.996723200 0.002623159 -0.801049608 4.999997853 . .
5 0.003274653 4.999997853 0.000001718 -0.800000687 5.000000000 . .
6 0.000002147 5.000000000 0.000000000 -0.800000000 5.000000000 . .
7 0.000000000 5.000000000 0.000000000 -0.800000000 5.000000000 5.000000000 0.000000000
となります。これより、λの最尤推定値は λ̂ = 5.0000となります。
2.3 Fisher’s Scoring法(1パラメータ)
2.3.1 理論
次に、Newton-Raphson法をもう少し楽に求める方法を考えます。まず、(4)をもう一度書きますと、Newton-Raphson法
のくり返しは
θm = θm−1 −F (θm−1)F ′(θm−1)
(9)
でした。ここで、分母の F ′(θm−1)に注目します。いま、F (θ) =n∑
i=1
ddθ log f(xi|θ)でしたので、
F ′(θ) =n∑
i=1
d2
dθ2log f(xi|θ)
となります。ここで、F ′(θ)を xに関する期待値 E[F ′(θ)]で置き換えてやります。今、Fisher情報量 I(θ)は定義から
I(θ) = −E[F ′(θ)]となりますので、これを用いて (9)を書き直すと
θm = θm−1 +F (θm−1)I(θm−1)
(10)
となります。これを用いてくり返し計算を行うのが Fisher’s Scoring法です。
2.3.2 具体例
では次に、「例題2」と同じデータに対して、Fisher’s Scoring法で最尤推定値を求めていきます。
「例題3:Fisher’s Scoring法による Poisson分布のパラメータの最尤推定」
Poisson分布 Po(λ)に従うデータ x1 = 4, x2 = 3, x3 = 5, x4 = 8が得られたとする。このとき、パラメータ λの最尤推
定値 λ̂を Fisher’s Scoring法により求めよ。なお、収束基準は 10−8 とせよ。
「解答:例題3」
F ′(λ)の計算 (7)までは「例題2」までと同じです。Fisher情報量は
I(λ) = −E[F ′(λ)]
=1λ2
n∑i=1
E[xi]
8
=nλ
λ2
=n
λ(∵ xi ∼ Po(λ)より、E[xi] = λ)
となります。ここに、現在のデータ n = 4を代入すると
I(λ) =4λ
となります。これを (10)に代入すると、
λm = λm−1 +F (λm−1)I(λm−1)
= λm−1 +20
λm−1− 4
4λm−1
= λm−1 +20 − 4λm−1
4
= λm−1 + 5 − λm−1
= 5
となります。これより、繰り返すまでもなく λm = 5となりました。以上より、λ̂ = 5となります。
これをプログラミングすると以下のようになります。実行プログラムと、元の関数 f(x)は使い回し、I(λ)をマクロ化しま
す。
*Fisher情報量;
%macro I(x);
-4 / &x
%mend I;
*接線と x軸との交わりを求める;
%macro seq(x);
f x =% f(&x);
I x =% I(&x);
y = &x - f x / I x ;
%mend seq;
実行プログラムは以下の通りです。
% exe(7, Ix)
です。出力は
i diff x f x I x y sol check
1 10.000000000 7.000000000 -1.142857143 -0.571428571 5.000000000 . .
2 2.000000000 5.000000000 0.000000000 -0.800000000 5.000000000 . .
3 0.000000000 5.000000000 0.000000000 -0.800000000 5.000000000 5.000000000 0.000000000
9
となります。これより、最尤推定値は λ̂ = 5.0000となります。
3 多変数の Newton-Raphson法と Fisher’s Scoring法
3.1 多変数の Newton-Raphson法
多変数の場合も、基本は同じになります。接平面(接空間)を考えて、各成分が 0になるような点を順に求めていきま
す*4。
「例題4:2変数の連立方程式に対する Newton-Raphson法」
連立方程式 {f(x, y) = x2 + y2 − 1
g(x, y) = y − x2
に対して、f(x, y) = 0, g(x, y) = 0 となる 解 (x, y)の1つ を Newton-Raphson法により求めよ*5。収束基準は 10−8 とせ
よ。
「解答:例題4」
基本的には「接線」を「接平面」に置き換えてやるだけです。まず、(x, y) = (x0, y0)における z = f(x, y), z = g(x, y)
の接平面はそれぞれ、
z = f(x0, y0) +∂f
∂x(x0, y0)(x − x0) +
∂f
∂y(x0, y0)(y − y0)
z = g(x0, y0) +∂g
∂x(x0, y0)(x − x0) +
∂g
∂y(x0, y0)(y − y0)
とおけます。これらに対して、1変数と同じように、z = 0を代入して得られる解 (x, y)を (x1, y1)とおきます。このとき、0 = f(x0, y0) + ∂f
∂x (x0, y0)(x1 − x0) + ∂f∂y (x0, y0)(y1 − y0)
0 = g(x0, y0) + ∂g∂x (x0, y0)(x1 − x0) + ∂g
∂y (x0, y0)(y1 − y0)
(0
0
)=
(f(x0, y0)
g(x0, y0)
)+
(∂f∂x (x0, y0) ∂f
∂y (x0, y0)∂g∂x (x0, y0) ∂g
∂y (x0, y0)
) (x1 − x0
y1 − y0
)
となります。これを (x1, y1)に関して解きますと、(x1
y1
)=
(x0
y0
)−
(∂f∂x (x0, y0) ∂f
∂y (x0, y0)∂g∂x (x0, y0) ∂g
∂y (x0, y0)
)−1 (f(x0, y0)
g(x0, y0)
)
となります。以下同様に、(xm−1, ym−1)が得られたとき、(xm, ym)は(xm
ym
)=
(xm−1
ym−1
)−
(∂f∂x (xm−1, ym−1) ∂f
∂y (xm−1, ym−1)∂g∂x (xm−1, ym−1) ∂g
∂y (xm−1, ym−1)
)−1 (f(xm−1, ym−1)
g(xm−1, ym−1)
)(11)
で得られます。これを用いてくり返し計算をすることで解が得られます。なお、今回は収束条件は∥∥∥∥∥(
xm
ym
)−
(xm−1
ym−1
)∥∥∥∥∥ < 10−8 ⇐⇒√
(xm − xm−1)2 + (ym − ym−1)2 < 10−8
*4 中学生レベルの連立方程式を思い出していただくとお分かりかと思いますが、基本的に方程式の解がきちんと求まるのは「文字の個数」=「方程式の個数」の場合です。
*5 解は複数存在しますが、本稿の主題は次節以降の確率分布のパラメータの最尤推定の場合で、基本的な場合は解が1つであることが多いですので「とりあえず1つ求める」ことに重点を置きます。余裕のある方は、初期値を変更して全ての解を求めてください。
10
となります。特にここで、x = (x, y), xm = (xm, ym)とし、
F(x) =
(f(x, y)
g(x, y)
)
とおくと、
∂F∂x
(x) =
(∂f∂x (x, y) ∂f
∂y (x, y)∂g∂x (x, y) ∂g
∂y (x, y)
)
となり、(11)は
xm = xm−1 −(
∂F∂x
(xm−1))−1
F(xm−1) (12)
と表せます。
では、今の場合に適用していきます。まず、
F(x) =
(f(x, y)
g(x, y)
)=
(x2 + y2 − 1
y − x2
)
です。各成分を x, y でそれぞれ微分すると、
∂f
∂x(x, y) = 2x,
∂f
∂y(x, y) = 2y
∂g
∂x(x, y) = −2x,
∂g
∂y(x, y) = 1
となりますので、
∂F∂x
(x) =
(2x 2y
−2x 1
)
です。以上より、(12)は(xm
ym
)=
(xm−1
ym−1
)−
(2xm−1 2ym−1
−2xm−1 1
)−1 (x2
m−1 + y2m−1 − 1
ym−1 − x2m−1
)
となります。これを SASでプログラミングすると、以下のようになります。
*f;
%macro f(x, y);
&x**2 + &y**2 -1
%mend f;
*g;
%macro g(x, y);
&y - &x**2
%mend g;
11
*f x;
%macro fx(x, y);
2*&x
%mend fx;
*f y;
%macro fy(x, y);
2*&y
%mend fy;
*g x;
%macro gx(x, y);
-2*&x
%mend gx;
*g y;
%macro gy(x, y);
1
%mend gy;
*くり返し計算のマクロ;
%macro seq(x1, x2);
x1 = &x1;
x2 = &x2;
f = % f(x1, x2);
g =% g(x1, x2);
fx = % fx(x1, x2);
fy = % fy(x1, x2);
gx =% gx(x1, x2);
gy =% gy(x1, x2);
det = fx*gy - fy*gx;
y1 = x1 - (f*gy - g*fy) / det;
y2 = x2 - (-f*gx + g*fx ) / det;
%mend seq;
12
*実行マクロ;
%macro exe(init1, init2, no);
data d&no;
length i 3.0 diff x1 x2 y1 y2 f g fx fy gx gy det solx soly checkf checkg 8.0;
i = 1;
diff = 10;
x1 = &init1;
x2 = &init2;
do until(diff < 10**(-8) or det = 0 or i> 1000);
% seq(x1, x2)
output;
diff = sqrt((y1 - x1)**2 + (y2 - x2)**2);
x1 = y1;
x2 = y2;
i = i +1;
end;
solx = y1; *Newton-Raphson法による解(x);
soly = y2; *Newton-Raphson法による解(y);
checkf =% f(solx, soly); *元の関数に入れて大体 0になるか確認(f);
checkg =% g(solx, soly); *元の関数に入れて大体 0になるか確認(g);
output;
run;
%mend exe;
実行プログラムは、初期値を (x0, y0) = (1, 1)とおくと、
% exe(1, 1, 1)
となります。出力は以下のようになります。
13
idi
ffy1
y2f
gfx
fygx
gy
110
.000
0000
000.
8333
3333
30.
6666
6666
71.
0000
0000
00.
0000
0000
02.
0000
0000
02.
0000
0000
0-2
.000
0000
001.
0000
0000
0
20.
3726
7799
60.
7880
9523
80.
6190
4761
90.
1388
8888
9-0
.027
7777
781.
6666
6666
71.
3333
3333
3-1
.666
6666
671.
0000
0000
0
30.
0656
8149
60.
7861
5406
60.
6180
3444
80.
0043
1405
9-0
.002
0464
851.
5761
9047
61.
2380
9523
8-1
.576
1904
761.
0000
0000
0
40.
0021
8967
20.
7861
5137
80.
6180
3398
90.
0000
0479
5-0
.000
0037
681.
5723
0813
31.
2360
6889
6-1
.572
3081
331.
0000
0000
0
50.
0000
0272
70.
7861
5137
80.
6180
3398
90.
0000
0000
0-0
.000
0000
001.
5723
0275
61.
2360
6797
7-1
.572
3027
561.
0000
0000
0
60.
0000
0000
00.
7861
5137
80.
6180
3398
90.
0000
0000
0-0
.000
0000
001.
5723
0275
61.
2360
6797
7-1
.572
3027
561.
0000
0000
0
idi
ffx1
x2y1
y2de
tso
lxso
lych
eckf
chec
kg
110
.000
0000
001.
0000
0000
01.
0000
0000
00.
8333
3333
30.
6666
6666
76.
0000
0000
0.
..
.
20.
3726
7799
60.
8333
3333
30.
6666
6666
70.
7880
9523
80.
6190
4761
93.
8888
8888
9.
..
.
30.
0656
8149
60.
7880
9523
80.
6190
4761
90.
7861
5406
60.
6180
3444
83.
5276
6439
9.
..
.
40.
0021
8967
20.
7861
5406
60.
6180
3444
80.
7861
5137
80.
6180
3398
93.
5157
8931
0.
..
.
50.
0000
0272
70.
7861
5137
80.
6180
3398
90.
7861
5137
80.
6180
3398
93.
5157
7584
3.
..
.
60.
0000
0000
00.
7861
5137
80.
6180
3398
90.
7861
5137
80.
6180
3398
93.
5157
7584
30.
7861
5137
80.
6180
3398
9-0
.000
0000
000.
0000
0000
0
これより、解は
x=
0.78
62,
y=
−0.
6180となります
a
aなお、この方程式は他にも実数解があります。残りは
x=
−0.7
862,
y=
0.6
180です。
14
3.2 Newton-Raphson法の最尤推定への適用(複数パラメータ)
では次に、Newton-Raphson法を用いて複数パラメータの最尤推定値を求めます。
3.2.1 理論
θ をパラメータベクトルとする。確率密度関数 f(y|θ)を持つ分布に従う n個のデータ y1, · · · , yn が得られたとき、θ の
最尤推定値は以下のようにして得られます。
(i) 尤度関数 L(θ) =n∏
i=1
f(yi|θ)を求める。
(ii) 対数尤度関数 l(θ) = log L(θ) =n∑
i=1
log f(yi|θ)を求める。
(iii) 対数尤度関数の微分 ∂l∂θ (θ) =
n∑i=1
∂l∂θ (θ)を求める*6。
(iv) Newton-Raphson法で ∂l∂θ (θ̂) = 0を解く。つまり、
F(θ) =∂l
∂θ(θ)
とおき、F(θ) = 0に Newton-Raphson法を適用する。
(v) 式 (12)
θm = θm−1 −(
∂F∂θ
(θm−1))−1
F(θm−1) (13)
を用いて、θ を ‖θm − θm−1‖が収束基準を満たすまで求める。
3.2.2 具体例
「例題5:Newton-Raphson法による Poisson回帰の複数パラメータの最尤推定」
iを被験者番号として、応答変数を yi、共変量を xi とする。ここで、yi ∼ Po(λi)とし、λi = exp(α + βxi)とする。
今、データが以下の通り与えられるとき、パラメータ α, β の最尤推定値を Newton-Raphson法で求めよ。なお、収束基
準は 10−8 とせよ。
i xi yi
1 1 10
2 2 15
3 10 20
「解答:例題5」
(一般論)
まず、θ = (α, β)′ とおきます。Poisson分布 Po(λi)で λi = exp(α + βxi)のときの yi の従う分布の確率密度関数は
f(yi|α, β, xi) =λyi
yi!exp (−λi)
={exp(α + βxi)}yi
yi!exp(− exp(α + βxi))
=exp{yi(α + βxi)}
yi!exp(− exp(α + βxi))
*6 „ の各成分で微分しますので、これはベクトルです。
15
ですので、尤度関数は
L(θ) =n∏
i=1
{exp{yi(α + βxi)}
yi!exp(− exp(α + βxi))
}
=exp
{n∑
i=1
yi(α + βxi)}
n∏i=1
yi!exp
(−
n∑i=1
exp(α + βxi)
)
となります。これより、対数尤度関数は
l(θ) =n∑
i=1
yi(α + βxi) −n∑
i=1
log yi! −n∑
i=1
exp(α + βxi)
= α
(n∑
i=1
yi
)+ β
(n∑
i=1
xiyi
)−
n∑i=1
log yi! −n∑
i=1
exp(α + βxi)
です。これを、α, β で2階まで微分します。まず1階微分は、
∂l
∂α(θ) =
n∑i=1
yi −n∑
i=1
exp(α + βxi)
∂l
∂β(θ) =
n∑i=1
xiyi −n∑
i=1
xi exp(α + βxi)
です。次に2階微分は
∂2l
∂α2(θ) = −
n∑i=1
exp(α + βxi)
∂2l
∂α∂β(θ) = −
n∑i=1
xi exp(α + βxi)
∂2l
∂β2(θ) = −
n∑i=1
x2i exp(α + βxi)
となります。これより、F(θ) =
∂l∂α (θ)
∂l∂β (θ)
とおくと、
F(θ) =
n∑
i=1
yi −n∑
i=1
exp(α + βxi)
n∑i=1
xiyi −n∑
i=1
xi exp(α + βxi)
となり、
∂F∂θ
(θ) =
∂2l∂α2 (θ) ∂2l
∂α∂β (θ)
∂2l∂α∂β (θ) ∂2l
∂β2 (θ)
=
−
n∑i=1
exp(α + βxi) −n∑
i=1
xi exp(α + βxi)
−n∑
i=1
xi exp(α + βxi) −n∑
i=1
x2i exp(α + βxi)
(14)
となります。これを用いて、(12)は
θm = θm−1 −(
∂F∂θ
(θm−1))−1
F(θm−1)
16
となります。成分ごとに詳しく見ますと、
αm
βm
=
αm−1
βm−1
−
−
n∑i=1
exp(αm−1 + βm−1xi) −n∑
i=1
xi exp(αm−1 + βm−1xi)
−n∑
i=1
xi exp(αm−1 + βm−1xi) −n∑
i=1
x2i exp(αm−1 + βm−1xi)
−1
×
n∑
i=1
yi −n∑
i=1
exp(αm−1 + βm−1xi)
n∑i=1
xiyi −n∑
i=1
xi exp(αm−1 + βm−1xi)
(15)
となります。 (一般論終わり)
これに今のデータを用います。3∑
i=1
yi = 10 + 15 + 20 = 45,3∑
i=1
xiyi = 1 · 10 + 2 · 15 + 10 · 20 = 240より、
l(θ) = 45α + 240β −3∑
i=1
log yi! − exp(α + β) − exp(α + 2β) − exp(α + 10β)
∂l
∂α(θ) = 45 − exp(α + β) − exp(α + 2β) − exp(α + 10β)
∂l
∂β(θ) = 240 − exp(α + β) − 2 exp(α + 2β) − 10 exp(α + 10β)
∂2l
∂α2(θ) = − exp(α + β) − exp(α + 2β) − exp(α + 10β)
∂2l
∂α∂β(θ) = − exp(α + β) − 2 exp(α + 2β) − 10 exp(α + 10β)
∂2l
∂β2(θ) = − exp(α + β) − 4 exp(α + 2β) − 100 exp(α + 10β)
となります。これより、
F(θ) =
3∑
i=1
yi −3∑
i=1
exp(α + βxi)
3∑i=1
xiyi −3∑
i=1
xi exp(α + βxi)
=
45 − exp(α + β) − exp(α + 2β) − exp(α + 10β)
240 − exp(α + β) − 2 exp(α + 2β) − 10 exp(α + 10β)
となり、
∂F∂θ
(θ) =
−
3∑i=1
exp(α + βxi) −3∑
i=1
xi exp(α + βxi)
−3∑
i=1
xi exp(α + βxi) −3∑
i=1
x2i exp(α + βxi)
(16)
17
=
− exp(α + β) − exp(α + 2β) − exp(α + 10β) − exp(α + β) − 2 exp(α + 2β) − 10 exp(α + 10β)
− exp(α + β) − 2 exp(α + 2β) − 10 exp(α + 10β) − exp(α + β) − 4 exp(α + 2β) − 100 exp(α + 10β)
となります。(15)より、Newton-Raphson法のくり返し計算は長くなりますので横に倒して書きますと、
18
αm
βm
= α
m−
1
βm
−1
+
exp(
αm
−1
+β
m−
1)+
exp(
αm
−1
+2β
m−
1)+
exp(
αm
−1
+10
βm
−1)
exp(
αm
−1
+β
m−
1)+
2ex
p(α
m−
1+
2βm
−1)+
10ex
p(α
m−
1+
10β
m−
1)
exp(
αm
−1
+β
m−
1)+
2ex
p(α
m−
1+
2βm
−1)+
10ex
p(α
m−
1+
10β
m−
1)
exp(
αm
−1
+β
m−
1)+
4ex
p(α
m−
1+
2βm
−1)+
100
exp(
αm
−1
+10
βm
−1)
−1
×
45
−ex
p(α
m−
1+
βm
−1)−
exp(
αm
−1
+2β
m−
1)−
exp(
αm
−1
+10
βm
−1)
240−
exp(
αm
−1
+β
m−
1)−
2ex
p(α
m−
1+
2βm
−1)−
10ex
p(α
m−
1+
10β
m−
1)
となります。
19
これより、SASプログラムは以下のようになります。
%macro f(alpha, beta, x);
exp(&alpha +&x * &beta )
%mend f;
*l alpha;
%macro f1(alpha, beta);
45 -% f(&alpha,&beta, 1) -% f(&alpha,&beta, 2) -% f(&alpha,&beta, 10)
%mend f1;
*l beta;
%macro f2(alpha, beta);
240 -% f(&alpha,&beta, 1) - 2*% f(&alpha,&beta, 2) - 10*% f(&alpha,&beta, 10)
%mend f2;
*l alphaalpha;
%macro f11(alpha, beta);
-% f(&alpha,&beta, 1) -% f(&alpha,&beta, 2) -% f(&alpha,&beta, 10)
%mend f11;
*l alphabeta;
%macro f12(alpha, beta);
-% f(&alpha,&beta, 1) - 2*% f(&alpha,&beta, 2) - 10*% f(&alpha,&beta, 10)
%mend f12;
*l betabeta;
%macro f22(alpha, beta);
-% f(&alpha,&beta, 1) - 4*% f(&alpha,&beta, 2) - 100*% f(&alpha,&beta, 10)
%mend f22;
20
*Newton-Raphson法のくり返し;
%macro seqn(x1, x2);
x1 = &x1;
x2 = &x2;
f1 =% f1(x1, x2);
f2 =% f2(x1, x2);
f11 =% f11(x1, x2);
f12 =% f12(x1, x2);
f22 =% f22(x1, x2);
det = f11*f22 - f12**2;
y1 = x1 - (f22 * f1 - f12*f2) / det;
y2 = x2 - (- f12*f1 + f11*f2 ) / det;
%mend seqn;
21
*実行マクロ;
*methodは計算方法。n:Newton-Raphson法、f:Fisher’s Scoring法;
%macro exe(init1, init2, method, no);
data d&no;
length i 3.0 diff x1 x2 y1 y2 f1 f2
% if ” &method” = ”n” % then % do;
f11 f12 f22
% end;
% else % if ” &method” = ”f” % then % do;
I11 I12 I22
% end;
det sol1 sol2 check1 check2 8.0;
i = 1;
diff = 10;
x1 = &init1;
x2 = &init2;
do until(diff < 10**(-8) or det = 0 or i> 1000);
% seq&method(x1, x2)
output;
diff = sqrt((y1 - x1)**2 + (y2 - x2)**2);
x1 = y1;
x2 = y2;
i = i +1;
end;
sol1 = y1; *Newton-Raphson法による解;
sol2 = y2;
check1 =% f1(sol1, sol2); *元の関数に入れて大体 0になるか確認;
check2 =% f2(sol1, sol2); *元の関数に入れて大体 0になるか確認;
output;
run;
%mend exe;
実行プログラムは以下の通りです。初期値は (α0, β0) = (0, 0)とします。
% exe(0, 0, n, 5)
出力は以下の通りです。
22
idi
ffy1
y2f1
f2f1
1f1
2f2
2
110
.000
0000
009.
9931
5068
50.
9246
5753
442
.000
0000
0022
7.00
0000
00-3
.000
0000
00-1
3.00
0000
00-1
05.0
0000
00
210
.035
8383
898.
9933
0779
10.
9246
4183
2-2
2702
7456
.5-2
2686
6616
4-2
2702
7501
.5-2
2686
6640
4-2
2683
9431
63
30.
9998
4289
47.
9937
3479
50.
9245
9915
6-8
3518
721.
93-8
3459
5577
.1-8
3518
766.
93-8
3459
5817
.1-8
3449
5708
9
40.
9995
7299
86.
9948
9509
70.
9244
8319
0-3
0724
808.
86-3
0703
0491
.1-3
0724
853.
86-3
0703
0731
.1-3
0699
3890
5
50.
9988
3970
45.
9980
4607
70.
9241
6826
6-1
1303
013.
63-1
1295
0142
.1-1
1303
058.
63-1
1295
0382
.1-1
1293
6816
3
60.
9968
4907
05.
0065
8885
80.
9233
1446
3-4
1581
34.4
59-4
1551
971.
75-4
1581
79.4
59-4
1552
211.
75-4
1547
2082
.9
70.
9914
5758
64.
0296
4576
00.
9210
1006
3-1
5296
80.3
23-1
5286
052.
78-1
5297
25.3
23-1
5286
292.
78-1
5284
4392
.0
80.
9769
4581
63.
0911
2769
60.
9148
6537
8-5
6272
6.14
13-5
6233
61.2
88-5
6277
1.14
13-5
6236
01.2
88-5
6229
064.
04
90.
9385
3818
02.
2499
0170
20.
8989
9751
6-2
0700
3.72
93-2
0686
55.9
94-2
0704
8.72
93-2
0688
95.9
94-2
0686
271.
68
100.
8413
7563
61.
6279
6444
70.
8612
1718
1-7
6141
.167
12-7
6095
3.66
27-7
6186
.167
12-7
6119
3.66
27-7
6108
10.4
04
110.
6230
8370
51.
3775
3652
30.
7863
3055
5-2
8000
.507
14-2
7987
8.49
59-2
8045
.507
14-2
8011
8.49
59-2
8006
20.2
71
120.
2613
8506
51.
4663
0523
00.
6776
4589
6-1
0292
.530
95-1
0290
4.08
90-1
0337
.530
95-1
0314
4.08
90-1
0310
56.7
92
130.
1403
2903
71.
6539
9537
70.
5594
0031
7-3
780.
3665
54-3
7802
.438
44-3
825.
3665
54-3
8042
.438
44-3
8007
8.72
80
140.
2218
3238
81.
8410
0715
80.
4421
2041
7-1
385.
4394
47-1
3854
.047
43-1
430.
4394
47-1
4094
.047
43-1
4060
2.10
07
150.
2207
4415
32.
0195
6942
50.
3280
8873
1-5
04.4
4472
99-5
044.
0999
66-5
49.4
4472
99-5
284.
0999
66-5
2508
.570
75
160.
2118
6719
62.
1829
9165
60.
2217
9116
0-1
80.4
1256
72-1
803.
7907
43-2
25.4
1256
72-2
043.
7907
43-2
0111
.386
95
170.
1949
5127
42.
3168
0196
50.
1331
8439
2-6
1.42
6816
48-6
13.9
7338
95-1
06.4
2681
65-8
53.9
7338
95-8
218.
8285
65
180.
1604
8787
52.
3994
2160
10.
0775
9370
7-1
8.24
9840
22-1
82.2
9230
96-6
3.24
9840
22-4
22.2
9230
96-3
906.
8046
08
190.
0995
8076
42.
4259
1928
40.
0595
4995
3-3
.707
3478
40-3
6.99
2244
36-4
8.70
7347
84-2
76.9
9224
44-2
456.
9110
64
200.
0320
5782
72.
4281
5403
80.
0580
1808
8-0
.270
6112
95-2
.697
5552
73-4
5.27
0611
30-2
42.6
9755
53-2
115.
0192
14
210.
0027
0937
92.
4281
6868
90.
0580
0802
4-0
.001
7561
35-0
.017
4996
31-4
5.00
1756
14-2
40.0
1749
96-2
088.
3116
31
220.
0000
1777
52.
4281
6869
00.
0580
0802
4-0
.000
0000
75-0
.000
0007
49-4
5.00
0000
08-2
40.0
0000
07-2
088.
1372
62
230.
0000
0000
12.
4281
6869
00.
0580
0802
4-0
.000
0000
75-0
.000
0007
49-4
5.00
0000
08-2
40.0
0000
07-2
088.
1372
62
23
idi
ffx1
x2y1
y2de
tso
l1so
l2ch
eck1
chec
k2
110
.000
0000
000.
0000
0000
00.
0000
0000
09.
9931
5068
50.
9246
5753
414
6.00
0000
00.
..
.
210
.035
8383
899.
9931
5068
50.
9246
5753
48.
9933
0779
10.
9246
4183
23.
0316
889E
15.
..
.
30.
9998
4289
48.
9933
0779
10.
9246
4183
27.
9937
3479
50.
9245
9915
64.
1034
824E
14.
..
.
40.
9995
7299
87.
9937
3479
50.
9245
9915
66.
9948
9509
70.
9244
8319
05.
5554
377E
13.
..
.
50.
9988
3970
46.
9948
9509
70.
9244
8319
05.
9980
4607
70.
9241
6826
67.
5257
471E
12.
..
.
60.
9968
4907
05.
9980
4607
70.
9241
6826
65.
0065
8885
80.
9233
1446
31.
0211
794E
12.
..
.
70.
9914
5758
65.
0065
8885
80.
9233
1446
34.
0296
4576
00.
9210
1006
313
9189
8769
08.
..
.
80.
9769
4581
64.
0296
4576
00.
9210
1006
33.
0911
2769
60.
9148
6537
819
2030
9711
5.
..
.
90.
9385
3818
03.
0911
2769
60.
9148
6537
82.
2499
0170
20.
8989
9751
627
3563
1583
.9.
..
.
100.
8413
7563
62.
2499
0170
20.
8989
9751
61.
6279
6444
70.
8612
1718
142
2681
132.
69.
..
.
110.
6230
8370
51.
6279
6444
70.
8612
1718
11.
3775
3652
30.
7863
3055
578
4440
55.0
31.
..
.
120.
2613
8506
51.
3775
3652
30.
7863
3055
51.
4663
0523
00.
6776
4589
619
8783
94.8
53.
..
.
130.
1403
2903
71.
4663
0523
00.
6776
4589
61.
6539
9537
70.
5594
0031
767
1333
1.37
97.
..
.
140.
2218
3238
81.
6539
9537
70.
5594
0031
71.
8410
0715
80.
4421
2041
724
8061
8.30
32.
..
.
150.
2207
4415
31.
8410
0715
80.
4421
2041
72.
0195
6942
50.
3280
8873
192
8845
.018
93.
..
.
160.
2118
6719
62.
0195
6942
50.
3280
8873
12.
1829
9165
60.
2217
9116
035
6278
.764
10.
..
.
170.
1949
5127
42.
1829
9165
60.
2217
9116
02.
3168
0196
50.
1331
8439
214
5433
.209
34.
..
.
180.
1604
8787
52.
3168
0196
50.
1331
8439
22.
3994
2160
10.
0775
9370
768
773.
9725
07.
..
.
190.
0995
8076
42.
3994
2160
10.
0775
9370
72.
4259
1928
40.
0595
4995
342
944.
9183
91.
..
.
200.
0320
5782
72.
4259
1928
40.
0595
4995
32.
4281
5403
80.
0580
1808
836
846.
1093
80.
..
.
210.
0027
0937
92.
4281
5403
80.
0580
1808
82.
4281
6868
90.
0580
0802
436
369.
2906
14.
..
.
220.
0000
1777
52.
4281
6868
90.
0580
0802
42.
4281
6869
00.
0580
0802
436
366.
1765
66.
..
.
230.
0000
0000
12.
4281
6869
00.
0580
0802
42.
4281
6869
00.
0580
0802
436
366.
1765
662.
4281
6869
00.
0580
0802
4-0
.000
0000
00-0
.000
0000
00
これより、最尤推定値は
α̂=
2.42
82,
β̂=
0.05
80となります。
24
3.3 Fisher’s Scoring法(複数パラメータ)
3.3.1 理論
1変数の場合は F ′(θ)を Fisher情報量 I(θ)で置き換えましたが、それと同様に、今回は ∂F∂θ (θ)を Fisher情報行列 I(θ)
で置き換えます。なお、Fisher情報行列の定義は
I(θ) = −E
[∂F∂θ
(θ)]
です。これを用いて (13)を
θm = θm−1 + I(θm−1)−1F(θm−1) (17)
で置き換えてくり返し計算をします。
3.3.2 具体例
「例題6:Fisher’s Scoring法による Poisson回帰の複数パラメータの最尤推定」
iを被験者番号として、応答変数を yi、共変量を xi とする。ここで、yi ∼ Po(λi)とし、λi = exp(α + βxi)とする。
今、データが以下の通り与えられるとき、パラメータ α, β の最尤推定値を Fisher’s Scoring法で求めよ。なお、収束基準
は 10−8 とせよ。
i xi yi
1 1 10
2 2 15
3 10 20
「解答:例題6」
まず、Fisher情報行列の計算は (14)、(16)より、
I(θ) = −E
[∂F∂θ
]= −
E
[∂2l∂α2 (θ)
]E
[∂2l
∂α∂β (θ)]
E[
∂2l∂α∂β (θ)
]E
[∂2l∂β2 (θ)
] =
n∑
i=1
exp(α + βxi)n∑
i=1
xi exp(α + βxi)
n∑i=1
xi exp(α + βxi)n∑
i=1
x2i exp(α + βxi)
=
exp(α + β) + exp(α + 2β) + exp(α + 10β) exp(α + β) + 2 exp(α + 2β) + 10 exp(α + 10β)
exp(α + β) + 2 exp(α + 2β) + 10 exp(α + 10β) exp(α + β) + 4 exp(α + 2β) + 100 exp(α + 10β)
となります。これを (17)に代入してプログラムを作成します。プログラムは、「例題5」のものを少し変更します。まず、
Fisher情報行列は
*I 11;
%macro I11(alpha, beta);
% f(&alpha,&beta, 1) +% f(&alpha,&beta, 2) +% f(&alpha,&beta, 10)
%mend I11;
25
*I 12;
%macro I12(alpha, beta);
% f(&alpha,&beta, 1) + 2*% f(&alpha,&beta, 2) + 10*% f(&alpha,&beta, 10)
%mend I12;
*I 22;
%macro I22(alpha, beta);
% f(&alpha,&beta, 1) + 4*% f(&alpha,&beta, 2) + 100*% f(&alpha,&beta, 10)
%mend I22;
となります。次に、Fisher’s Scoring法によるくり返し計算は以下の通りです。
*Fisher’s Scoring法のくり返し;
%macro seqf(x1, x2);
x1 = &x1;
x2 = &x2;
f1 =% f1(x1, x2);
f2 =% f2(x1, x2);
I11 =% I11(x1, x2);
I12 =% I12(x1, x2);
I22 =% I22(x1, x2);
det = I11*I22 - I12**2;
y1 = x1 + (I22 * f1 - I12*f2) / det;
y2 = x2 + (- I12*f1 + I11*f2 ) / det;
%mend seqf;
実行プログラムは、初期値を (α0, β0) = (0, 0)とすると、
% exe(0, 0, f, 6)
とするだけです。出力は以下の通りです。
26
idi
ffy1
y2f1
f2I1
1I1
2I2
2
110
.000
0000
009.
9931
5068
50.
9246
5753
442
.000
0000
0022
7.00
0000
003.
0000
0000
013
.000
0000
0010
5.00
0000
00
210
.035
8383
898.
9933
0779
10.
9246
4183
2-2
2702
7456
.5-2
2686
6616
422
7027
501.
4922
6866
6403
.722
6839
4316
3
30.
9998
4289
47.
9937
3479
50.
9245
9915
6-8
3518
721.
93-8
3459
5577
.183
5187
66.9
3483
4595
817.
1083
4495
7088
.6
40.
9995
7299
86.
9948
9509
70.
9244
8319
0-3
0724
808.
86-3
0703
0491
.130
7248
53.8
6330
7030
731.
0930
6993
8904
.6
50.
9988
3970
45.
9980
4607
70.
9241
6826
6-1
1303
013.
63-1
1295
0142
.111
3030
58.6
2811
2950
382.
0811
2936
8162
.9
60.
9968
4907
05.
0065
8885
80.
9233
1446
3-4
1581
34.4
59-4
1551
971.
7541
5817
9.45
8541
5522
11.7
5041
5472
082.
90
70.
9914
5758
64.
0296
4576
00.
9210
1006
3-1
5296
80.3
23-1
5286
052.
7815
2972
5.32
3215
2862
92.7
8415
2844
392.
01
80.
9769
4581
63.
0911
2769
60.
9148
6537
8-5
6272
6.14
13-5
6233
61.2
8856
2771
.141
3056
2360
1.28
7956
2290
64.0
37
90.
9385
3818
02.
2499
0170
20.
8989
9751
6-2
0700
3.72
93-2
0686
55.9
9420
7048
.729
3020
6889
5.99
3720
6862
71.6
75
100.
8413
7563
61.
6279
6444
70.
8612
1718
1-7
6141
.167
12-7
6095
3.66
2776
186.
1671
1576
1193
.662
7476
1081
0.40
41
110.
6230
8370
51.
3775
3652
30.
7863
3055
5-2
8000
.507
14-2
7987
8.49
5928
045.
5071
4228
0118
.495
9128
0062
0.27
07
120.
2613
8506
51.
4663
0523
00.
6776
4589
6-1
0292
.530
95-1
0290
4.08
9010
337.
5309
4710
3144
.089
0210
3105
6.79
19
130.
1403
2903
71.
6539
9537
70.
5594
0031
7-3
780.
3665
54-3
7802
.438
4438
25.3
6655
4338
042.
4384
4538
0078
.728
03
140.
2218
3238
81.
8410
0715
80.
4421
2041
7-1
385.
4394
47-1
3854
.047
4314
30.4
3944
7314
094.
0474
2814
0602
.100
70
150.
2207
4415
32.
0195
6942
50.
3280
8873
1-5
04.4
4472
99-5
044.
0999
6654
9.44
4729
9152
84.0
9996
6252
508.
5707
47
160.
2118
6719
62.
1829
9165
60.
2217
9116
0-1
80.4
1256
72-1
803.
7907
4322
5.41
2567
2320
43.7
9074
2620
111.
3869
52
170.
1949
5127
42.
3168
0196
50.
1331
8439
2-6
1.42
6816
48-6
13.9
7338
9510
6.42
6816
4885
3.97
3389
5282
18.8
2856
51
180.
1604
8787
52.
3994
2160
10.
0775
9370
7-1
8.24
9840
22-1
82.2
9230
9663
.249
8402
2042
2.29
2309
5639
06.8
0460
78
190.
0995
8076
42.
4259
1928
40.
0595
4995
3-3
.707
3478
40-3
6.99
2244
3648
.707
3478
4027
6.99
2244
3624
56.9
1106
44
200.
0320
5782
72.
4281
5403
80.
0580
1808
8-0
.270
6112
95-2
.697
5552
7345
.270
6112
9524
2.69
7555
2721
15.0
1921
39
210.
0027
0937
92.
4281
6868
90.
0580
0802
4-0
.001
7561
35-0
.017
4996
3145
.001
7561
3524
0.01
7499
6320
88.3
1163
08
220.
0000
1777
52.
4281
6869
00.
0580
0802
4-0
.000
0000
75-0
.000
0007
4945
.000
0000
7524
0.00
0000
7520
88.1
3726
15
230.
0000
0000
12.
4281
6869
00.
0580
0802
4-0
.000
0000
75-0
.000
0007
4945
.000
0000
7524
0.00
0000
7520
88.1
3726
15
27
idi
ffx1
x2y1
y2de
tso
l1so
l2ch
eck1
chec
k2
110
.000
0000
000.
0000
0000
00.
0000
0000
09.
9931
5068
50.
9246
5753
414
6.00
0000
00.
..
.
210
.035
8383
899.
9931
5068
50.
9246
5753
48.
9933
0779
10.
9246
4183
23.
0316
889E
15.
..
.
30.
9998
4289
48.
9933
0779
10.
9246
4183
27.
9937
3479
50.
9245
9915
64.
1034
824E
14.
..
.
40.
9995
7299
87.
9937
3479
50.
9245
9915
66.
9948
9509
70.
9244
8319
05.
5554
377E
13.
..
.
50.
9988
3970
46.
9948
9509
70.
9244
8319
05.
9980
4607
70.
9241
6826
67.
5257
471E
12.
..
.
60.
9968
4907
05.
9980
4607
70.
9241
6826
65.
0065
8885
80.
9233
1446
31.
0211
794E
12.
..
.
70.
9914
5758
65.
0065
8885
80.
9233
1446
34.
0296
4576
00.
9210
1006
313
9189
8769
08.
..
.
80.
9769
4581
64.
0296
4576
00.
9210
1006
33.
0911
2769
60.
9148
6537
819
2030
9711
5.
..
.
90.
9385
3818
03.
0911
2769
60.
9148
6537
82.
2499
0170
20.
8989
9751
627
3563
1583
.9.
..
.
100.
8413
7563
62.
2499
0170
20.
8989
9751
61.
6279
6444
70.
8612
1718
142
2681
132.
69.
..
.
110.
6230
8370
51.
6279
6444
70.
8612
1718
11.
3775
3652
30.
7863
3055
578
4440
55.0
31.
..
.
120.
2613
8506
51.
3775
3652
30.
7863
3055
51.
4663
0523
00.
6776
4589
619
8783
94.8
53.
..
.
130.
1403
2903
71.
4663
0523
00.
6776
4589
61.
6539
9537
70.
5594
0031
767
1333
1.37
97.
..
.
140.
2218
3238
81.
6539
9537
70.
5594
0031
71.
8410
0715
80.
4421
2041
724
8061
8.30
32.
..
.
150.
2207
4415
31.
8410
0715
80.
4421
2041
72.
0195
6942
50.
3280
8873
192
8845
.018
93.
..
.
160.
2118
6719
62.
0195
6942
50.
3280
8873
12.
1829
9165
60.
2217
9116
035
6278
.764
10.
..
.
170.
1949
5127
42.
1829
9165
60.
2217
9116
02.
3168
0196
50.
1331
8439
214
5433
.209
34.
..
.
180.
1604
8787
52.
3168
0196
50.
1331
8439
22.
3994
2160
10.
0775
9370
768
773.
9725
07.
..
.
190.
0995
8076
42.
3994
2160
10.
0775
9370
72.
4259
1928
40.
0595
4995
342
944.
9183
91.
..
.
200.
0320
5782
72.
4259
1928
40.
0595
4995
32.
4281
5403
80.
0580
1808
836
846.
1093
80.
..
.
210.
0027
0937
92.
4281
5403
80.
0580
1808
82.
4281
6868
90.
0580
0802
436
369.
2906
14.
..
.
220.
0000
1777
52.
4281
6868
90.
0580
0802
42.
4281
6869
00.
0580
0802
436
366.
1765
66.
..
.
230.
0000
0000
12.
4281
6869
00.
0580
0802
42.
4281
6869
00.
0580
0802
436
366.
1765
662.
4281
6869
00.
0580
0802
4-0
.000
0000
00-0
.000
0000
00
これより、最尤推定値は
α̂=
2.48
17,
β̂=
0.05
80となります。
28
【補足】計算がうまくいかない場合
【うまくいかないことの検出】
Newton-Raphson法や Fisher’s Scoring法で計算がうまくいかない場合についていくつか注意を述べておきます。基本的
に、プログラムにミスはつきものですので、それをどのようにきちんと検出するかが重要です。
今回のプログラムでは、くり返し計算をする際に
(a) くり返し数が 1,000回を超えたら中止
(b) 分母が 0になったら中止
の 2つの条件をつけました。つまり、
• くり返し数が 1,000回を超えた
• 分母が 0(かもしくはほとんど 0)になった
場合には、計算がうまくいかなかった可能性が高いです。また、
• f(x)や f ′(x)の値などをデータセットに出力するようにした
のも、計算ミスかどうかを検算をしやすくするためです。それから、
• 収束条件の diff が小さくなっていない場合
にもプログラムのミスの可能性があります。
【うまくいかない原因】
うまくいかない原因は大きく分けて2つで
(i) 初期値の設定が不適切
(ii) プログラム(計算)にミスがある
の 2つです。少しずつ見ていきます。
(i) 初期値の設定が不適切な場合
最も重要なことは、計算プログラムが完全に正しくても、初期値の与え方が妥当でなければ、計算がきちんと終了しない
ことがあるということです。
ですので、とりあえず計算がうまくいかなかったら、まずは初期値をいくつか変えてみてください。
(ii)プログラムにミスがある場合
次に、プログラムミスについてです。初期値を変更して何度か実行してみてもうまくいかない場合、プログラムミスが考
えられます。これには大きく分けて
• 計算ミス• プログラムミス
があります。
29