はじめに
正規線形モデルの(パラメータの個数についての)仮説検定を考えます。仮説検定に使用する統計量は様々考えられますが、今回は逸脱度を用いて作成します。記事の前半では、仮説検定の方法を提示し統計量の標本分布を導出します。後半では、Pythonを用いて、人工的に作成したデータを使って検出力を計算します。
表記や前提
データ数: N
目的変数: \mathbf{Y} = (Y_1, \ldots, Y_N)^T
計画行列: \mathbf{X} = (\mathbf{x}_1, \ldots, \mathbf{x}_N)^T であり、\mathbf{X} の各列は線型独立とします。
標本: (\mathbf{x}_1, y_1), \ldots (\mathbf{x}_N, y_N) を同一母集団からの無作為標本とします。
理論
仮説検定
\mathbf{Y} \sim N(\mathbf{X\beta}, \sigma^2\mathbf{I}) という正規線形モデルに関して、q < p < N として、以下の帰無仮説H_0 と対立仮説H_1 を考えます。
\begin{aligned}
\begin{cases}
H_0: \mathbf{\beta} = \mathbf{\beta}_0 = (\beta_1, \ldots, \beta_q)^T \\
H_1: \mathbf{\beta} = \mathbf{\beta}_1 = (\beta_1, \ldots, \beta_p)^T
\end{cases}
\end{aligned}
H_0 に対応するモデルM_0 とH_1 に対応するモデルM_1 を考えます。M_0 の方が単純なモデルであり、より一般的なモデルであるM_1 の特別な場合となっています。もし、M_0 がM_1 と同じくらいデータに適合するのであれば、節約の観点から単純な方が選択されて、H_0 が採択されます。逆に、M_1 の方が有意にデータに適合するのであれば、H_0 は棄却されます。この後、適合度合いを測る統計量の標本分布を導出します。
対数尤度比統計量
推定されうるパラメータの最大個数を含んだ飽和モデルと、考えたいモデルの尤度比を考えます。飽和モデルの計画行列をN \times N の行列\mathbf{X}_{max} 、パラメータを\mathbf{\beta}_{max} = (\beta_1, \ldots, \beta_N)^T とします。また、\mathbf{\beta}, \mathbf{\beta}_{max} の最尤推定量を\hat{\mathbf{\beta}}, \hat{\mathbf{\beta}}_{max} とします。この時、尤度比は以下になります。
\begin{aligned}
\lambda = \frac{L(\hat{\mathbf{\beta}}_{max}; \mathbf{y})}{L(\hat{\mathbf{\beta}}; \mathbf{y})}
\end{aligned}
この後、尤度比の対数を使用します。
\begin{aligned}
log\lambda = l(\hat{\mathbf{\beta}}_{max}; \mathbf{y}) - l(\hat{\mathbf{\beta}}; \mathbf{y})
\end{aligned}
逸脱度
逸脱度を次のように定義します。
\begin{aligned}
D &= 2log\lambda \\
&= 2[l(\hat{\mathbf{\beta}}_{max}; \mathbf{y}) - l(\hat{\mathbf{\beta}}; \mathbf{y})]
\end{aligned}
正規分布の対数尤度関数は、
\begin{aligned}
l(\mathbf{\beta}; \mathbf{y}) = -\frac{1}{2\sigma^2}(\mathbf{y} - \mathbf{X}\mathbf{\beta})^T(\mathbf{y} - \mathbf{X}\mathbf{\beta}) - \frac{1}{2}Nlog(2\pi \sigma^2)
\end{aligned}
と表されます。飽和モデルでは、\mathbf{X}_{max}\hat{\mathbf{\beta}}_{max} = \mathbf{y} となるので、対数尤度関数の最大値は
\begin{aligned}
l(\hat{\mathbf{\beta}}_{max}; \mathbf{y}) = - \frac{1}{2}Nlog(2\pi \sigma^2)
\end{aligned}
となります。パラメータ数がp < N であるような他のモデルに対して最尤推定量は、
\begin{aligned}
\hat{\mathbf{\beta}} = (\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T\mathbf{Y}
\end{aligned}
であることより、対応する対数尤度関数の最大値は以下になります。
\begin{aligned}
l(\hat{\mathbf{\beta}}; \mathbf{y}) = -\frac{1}{2\sigma^2}(\mathbf{y} - \mathbf{X}\hat{\mathbf{\beta}})^T(\mathbf{y} - \mathbf{X}\hat{\mathbf{\beta}}) - \frac{1}{2}Nlog(2\pi \sigma^2)
\end{aligned}
これより、逸脱度は
\begin{aligned}
D &= 2[l(\hat{\mathbf{\beta}}_{max}; \mathbf{y}) - l(\hat{\mathbf{\beta}}; \mathbf{y})] \\
&= \frac{1}{\sigma^2}(\mathbf{y} - \mathbf{X}\hat{\mathbf{\beta}})^T(\mathbf{y} - \mathbf{X}\hat{\mathbf{\beta}}) \\
&= \frac{1}{\sigma^2}[\mathbf{y} - \mathbf{X}(\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T\mathbf{y}]^T[\mathbf{y} - \mathbf{X}(\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T\mathbf{y}] \\
&= \frac{1}{\sigma^2}[(\mathbf{I} - \mathbf{H})\mathbf{y}]^T[(\mathbf{I} - \mathbf{H})\mathbf{y}] \quad (\mathbf{H} \equiv \mathbf{X}(\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T) \\
&= \frac{1}{\sigma^2}\mathbf{y}^T(\mathbf{I} - \mathbf{H})\mathbf{y} \quad (\because 補足1)
\end{aligned}
となります。
\mathbf{Y} \sim N(\mathbf{X\beta}, \sigma^2\mathbf{I}) のとき、
\begin{aligned}
(\mathbf{I} - \mathbf{H})\mathbf{y} &\sim N((\mathbf{I} - \mathbf{H})\mathbf{X}\mathbf{\beta}, \sigma^2(\mathbf{I} - \mathbf{H})^T(\mathbf{I} - \mathbf{H})) \\
&= N(\mathbf{0}, \sigma^2(\mathbf{I} - \mathbf{H})) \quad (\because (\mathbf{I} - \mathbf{H})\mathbf{X} = \mathbf{0}, 補足1)
\end{aligned}
補足2 と補足3 より、
\begin{aligned}
&[(\mathbf{I} - \mathbf{H})\mathbf{y}]^T(\sigma^2(\mathbf{I} - \mathbf{H}))^-[(\mathbf{I} - \mathbf{H})\mathbf{y}] \sim \chi^2(N-p) \\
\Rightarrow \quad &\frac{1}{\sigma^2}\mathbf{y}^T(\mathbf{I} - \mathbf{H})\mathbf{y} \sim \chi^2(N-p) \\
\Rightarrow \quad &D \sim \chi^2(N-p)
\end{aligned}
!
補足2
n次元の確率変数\mathbf{y} = N(\mathbf{\mu}, \mathbf{V}) について、\mathbf{V} のrankがk \lt n で特異だとします。このとき、\mathbf{V} の一般逆行列を\mathbf{V}^- と表すと、確率変数\mathbf{y}^T\mathbf{V}^-\mathbf{y} は、自由度k 、非心パラメータ\mathbf{\mu}^T\mathbf{V}^-\mathbf{\mu} の非心カイ二乗分布\chi^2(k, \mathbf{\mu}^T\mathbf{V}^-\mathbf{\mu}) に従います。
\mathbf{Y} \sim N(\mu, \sigma^2\mathbf{I}), \mu \ne \mathbf{X\beta} のとき、
\begin{aligned}
(\mathbf{I} - \mathbf{H})\mathbf{y} &= N((\mathbf{I} - \mathbf{H})\mu, \sigma^2(\mathbf{I} - \mathbf{H})) \quad (\because (\mathbf{I} - \mathbf{H})\mathbf{X} = \mathbf{0})
\end{aligned}
補足2 と補足3 より、
\begin{aligned}
&[(\mathbf{I} - \mathbf{H})\mathbf{y}]^T(\sigma^2(\mathbf{I} - \mathbf{H}))^-[(\mathbf{I} - \mathbf{H})\mathbf{y}] \sim \chi^2(N-p, [(\mathbf{I} - \mathbf{H})\mathbf{\mu}]^T(\sigma^2(\mathbf{I} - \mathbf{H}))^-[(\mathbf{I} - \mathbf{H})\mathbf{\mu}]) \\
\Rightarrow \quad &\frac{1}{\sigma^2}\mathbf{y}^T(\mathbf{I} - \mathbf{H})\mathbf{y} \sim \chi^2(N-p, \frac{1}{\sigma^2}\mathbf{\mu}^T(\mathbf{I} - \mathbf{H})\mathbf{\mu}) \\
\Rightarrow \quad &D \sim \chi^2(N-p, \frac{1}{\sigma^2}\mathbf{\mu}^T(\mathbf{I} - \mathbf{H})\mathbf{\mu})
\end{aligned}
適合度合いを図る統計量の標本分布
M_0, M_1 に対応する計画行列を\mathbf{X}_0, \mathbf{X}_1 、最尤推定量を\hat{\mathbf{\beta}_0}, \hat{\mathbf{\beta}_0} 、逸脱度をD_0, D_1 とします。このとき、
\begin{aligned}
D_0 &= \frac{1}{\sigma^2}(\mathbf{y} - \mathbf{X}_0\hat{\mathbf{\beta}_0})^T(\mathbf{y} - \mathbf{X}_0\hat{\mathbf{\beta}_0}) \\
&= \frac{1}{\sigma^2}(\mathbf{y}^T\mathbf{y} - \mathbf{y}^T\mathbf{X}_0\hat{\mathbf{\beta}}_0 - \hat{\mathbf{\beta}}_0^T\mathbf{X}_0^T\mathbf{y} + \hat{\mathbf{\beta}}_0^T\mathbf{X}^T\mathbf{X}_0\hat{\mathbf{\beta}}_0) \\
&= \frac{1}{\sigma^2}(\mathbf{y}^T\mathbf{y} - 2\hat{\mathbf{\beta}}_0^T\mathbf{X}_0^T\mathbf{y} + \hat{\mathbf{\beta}}_0^T\mathbf{X}^T\mathbf{X}_0\hat{\mathbf{\beta}}_0) \\
&= \frac{1}{\sigma^2}(\mathbf{y}^T\mathbf{y} - \hat{\mathbf{\beta}}_0^T\mathbf{X}_0^T\mathbf{y}) \\
D_1 &= \frac{1}{\sigma^2}(\mathbf{y} - \mathbf{X}_1\hat{\mathbf{\beta}_1})^T(\mathbf{y} - \mathbf{X}_1\hat{\mathbf{\beta}_1}) \\
&= \frac{1}{\sigma^2}(\mathbf{y}^T\mathbf{y} - \hat{\mathbf{\beta}}_1^T\mathbf{X}_1^T\mathbf{y})
\end{aligned}
となります。、M_1 はより一般的なモデルであったので、データによく適合すると仮定します。ゆえに、D_1 \sim \chi^2(N - p) となります。一方、D_0 はデータによく適合する場合には、D_0 \sim \chi^2(N - q) となり、このとき補足4 よりD_0 - D_1 \sim \chi^2(p-q) です。適合しない場合には、D_0 \sim \chi^2(N - q, \mu^T(\mathbf{I} - \mathbf{H})\mu )となり、このとき補足4 よりD_0 - D_1 \sim \chi^2(p-q, \mu^T(\mathbf{I} - \mathbf{H})\mu) です。
!
補足4
Cochranの定理より、次の定理が成り立ちます。2つの確率変数X_1^2 \sim \chi^2(m), X_2^2 \sim \chi^2(k), m \gt k を考えます。このとき、X^2 = X_1^2 - X_2^2 \ge 0 ならば、X^2 \sim \chi^2(m - k) が成り立ちます。
M_0 はM_1 の特別な場合であったことから、
\begin{aligned}
& l(\hat{\mathbf{\beta}_1}; \mathbf{y}) - l(\hat{\mathbf{\beta}_0}; \mathbf{y}) \ge 0 \\
\Rightarrow \quad &2[l(\hat{\mathbf{\beta}}_{max}; \mathbf{y}) - l(\hat{\mathbf{\beta}_0}; \mathbf{y})] - 2[l(\hat{\mathbf{\beta}}_{max}; \mathbf{y}) - l(\hat{\mathbf{\beta}_1}; \mathbf{y})] \ge 0 \\
\Rightarrow \quad &D_0 - D_1 \ge 0
\end{aligned}
となります。また、q \lt p よりN-q \gt N-p です。よって、D_0 が(中心)カイ二乗分布に従うときD_0 - D_1 \sim \chi^2(p-q) が成り立ちます。
D_0 が非心カイ二乗分布に従うときも同様の結果が成り立ち、D_0 - D_1 \sim \chi^2(p-q, \mu^T(\mathbf{I} - \mathbf{H})\mu) となります。詳しくは、Rao(1973)の第3章をご覧ください。
以上より
\begin{aligned}
F^* &= \frac{D_0 - D_1}{p - q} / \frac{D_1}{N - p} \\
&= \frac{\hat{\mathbf{\beta}}_1^T\mathbf{X}_1^T\mathbf{y} - \hat{\mathbf{\beta}}_0^T\mathbf{X}_0^T\mathbf{y}}{p-q} / \frac{\mathbf{y}^T\mathbf{y} - \hat{\mathbf{\beta}}_1^T\mathbf{X}_1^T\mathbf{y}}{N-p}
\end{aligned}
は、H_0 が正しい場合には(中心)F分布F(p-q, N-p) に従い、H_0 が正しくない場合には非心F分布F(p-q, N-p, \mu^T(\mathbf{I} - \mathbf{H})\mu) に従います。
棄却域
非心F分布の値は、同じ自由度を持つ(中心)F分布で期待される値より大きくなります。よって、有意水準を\alpha\% とすると、F(p-q, N-p) の上側\alpha\% 点よりF^* が大きくなった時にH_0 を棄却すれば良いです。
Pythonを用いて検出力を考える
import文
from matplotlib import pyplot as plt
import numpy as np
from scipy. stats import f
データ数とパラメータ数
\begin{aligned}
\begin{cases}
H_0: \mathbf{\beta} = \mathbf{\beta}_0 = (\beta_1, \beta_2)^T \\
H_1: \mathbf{\beta} = \mathbf{\beta}_1 = (\beta_1, \beta_2, \beta_3)^T
\end{cases}
\end{aligned}
N = 30
q = 2
p = 3
ND = 100000
モデル
\begin{aligned}
\begin{cases}
M_0: Y_i \underset{i.i.d.}{\sim} N(\mu_i, \sigma^2), \mu_i = \beta_1 + \beta_2x_i \\
M_1: Y_i \underset{i.i.d.}\sim N(\mu_i, \sigma^2), \mu_i = \beta_1 + \beta_2x_i + \beta_3x_i^2
\end{cases}
\end{aligned}
データ
以下のようなデータを作成します。\mu_i がx_i の2次関数になっていることから、H_1 が真です。
\begin{aligned}
\begin{cases}
x_i \underset{i.i.d.}{\sim} U(0, 1) \\
Y_i \underset{i.i.d.}{\sim} N(\mu_i, 0.25), \mu_i = 1 - x_i + 2x_i^2
\end{cases}
\end{aligned}
ここで、U(0, 1) は一様分布です。例えば、以下のようなデータが生成されます。
描画コード np. random. seed( 0 )
es = np. random. normal( 0 , 0.25 , N)
xs = np. random. random( N)
ys = 1 - xs + 2 * xs** 2 + es
xs_line = np. linspace( 0 , 1 , 1000 )
true_ys = 2 * xs_line** 2 - xs_line + 1
plt. scatter( xs, ys)
plt. plot( xs_line, true_ys)
有意水準と棄却域
有意水準は5\% とします。
print ( f"F( { p- q} , { N- p} )の上側5%点: { f( p- q, N- p) . ppf( 0.95 ) } " )
F(1, 27)の上側5%点: 4.210008468359754
この値よりF^* が大きい場合、H_0 を棄却します。
検出力
cnt = 0
F_list = [ ]
f95 = f( p- q, N- p) . ppf( 0.95 )
for i in range ( ND) :
np. random. seed( i)
es = np. random. normal( 0 , 0.25 , N)
xs = np. random. random( N)
ys = 1 - xs + 2 * xs** 2 + es
X0 = np. array( [ np. array( [ 1 , xs[ i] ] ) for i in range ( N) ] )
b0 = np. dot( np. dot( np. linalg. inv( np. dot( X0. T, X0) ) , X0. T) , ys)
X1 = np. array( [ np. array( [ 1 , xs[ i] , xs[ i] ** 2 ] ) for i in range ( N) ] )
b1 = np. dot( np. dot( np. linalg. inv( np. dot( X1. T, X1) ) , X1. T) , ys)
tmp0 = np. dot( ( ys - np. dot( X0, b0) ) . T, ys - np. dot( X0, b0) )
tmp1 = np. dot( ( ys - np. dot( X1, b1) ) . T, ys - np. dot( X1, b1) )
F_star = ( ( tmp0 - tmp1) / ( p- q) ) / ( tmp1 / ( N- p) )
F_list. append( F_star)
cnt += F_star > f95
print ( f"検出力: { 100 * cnt / ND} %" )
!
\begin{aligned}
\hat{F} = \frac{D_0}{N - q} / \frac{D_1}{N - p}
\end{aligned}
検定統計量を上記の\hat{F} とF^* にして、検出力を比べることを考えます。F^* は第一自由度が1、第二自由度が27です。\hat{F} は第一自由度が28、第二自由度が27となります。以下のグラフでは、横軸は\nu です。縦軸はF(n_1, n_2) の上側5\% 点を、F(n_1, n_2, \nu) の累積分布関数の引数にしたものです。
描画コード from matplotlib import pyplot as plt
import numpy as np
from scipy. stats import f, ncf
nus = np. linspace( 0 , 100 , 1000 )
a, b = [ ] , [ ]
for nu in nus:
a. append( ncf( 1 , 27 , nu) . cdf( f( 1 , 27 ) . ppf( 0.95 ) ) )
b. append( ncf( 28 , 27 , nu) . cdf( f( 28 , 27 ) . ppf( 0.95 ) ) )
plt. plot( nus, a, label= 'F*' )
plt. plot( nus, b, label= '$\hat{F}$' )
plt. grid( )
plt. legend( )
これは、F(n_1, n_2, \nu) に従う確率変数が棄却域に入らない確率を表しているので、小さいほどいいです。青い線のF^* はオレンジ色の線の\hat{F} よりも、常に小さいことがグラフから見てとれます。よって、検出力を考えると、検定統計量としてF^* が\hat{F} より優れていることがわかります。
参考文献
[1] Dobson, A. J and Barnett, A. G. (2018). An introduction to generalized linear models,
4th Edition. Chapman and Hall/CRC.
[2] Rao, C. R. (1973). Linear Statistical Inference and Its Applications, 2nd Edition. Wiley,
New York.
Discussion