玄関雑学の部屋雑学コーナー統計学入門

9.5 変数の選択

(1) 変数選択法の種類

重回帰分析と同様に判別分析でも、なるべく少ない変数で効率的に群を判別できるように変数を選択する手法が考えられています。 判別分析は重回帰分析において目的変数が分類データになったものに相当するので、変数の選択法も次のようにほとんど同じものがあります。

  1. 変数指定法:医学・薬学等の実質科学的理論や知識によって適当な変数を指定する。
  2. 総当たり法:全ての変数の組み合わせを計算し、最も良いと思われるものを選択する。
  3. 逐次選択法:一定の規則に従って変数を逐次選択していく。

これらのうち最も多用されるのは、重回帰分析と同じく3番の逐次選択法です。 この方法は変数の選択規則によって次のように細分化されます。

  1. 変数増加法(前進的選択法、forward selection method)
    最初に全変数のうち判別に寄与する割合が最大のものを取り込む。 そしてそれ以後は、すでに取り込まれた変数との共有部分を除いて、単独で判別に寄与する割合が最大の変数を取り込んでいく。 これは、その変数を取り込んで判別関数を計算した時、判別効率の増加が最大になることを意味している。 その際、判別効率の増加があらかじめ決めておいた値、すなわち取り込み基準未満になった時に変数の取り込みを終了する。
  2. 変数減少法(後退的選択法、backward selection method)
    最初に全変数を取り込み、以後は取り込まれた変数のうち単独で判別に寄与している割合が最小のものを追い出していく。 これは、その変数を追い出して判別関数を計算した時、判別効率の減少が最小になることを意味している。 この際、判別効率の減少があらかじめ決めておいた値、すなわち追い出し基準以上になった時に変数の追い出しを終了する。
  3. 変数増減法(stepwise forward selection method)
    増加法と減少法を組み合わせた手法。 まず増加法と同様に取り込み基準に従って変数を取り込む。 そして1つ変数を取り込むたびに、すでに取り込んだものの中で減少法と同様の追い出し基準を満足するものがないか調べ、あればそれを追い出してから、さらに変数の取り込みを続ける。 この手法では取り込むべき変数も追い出すべき変数もなくなった時に変数の選択を終了する。
    この手法は判別に寄与する割合が大きい変数を少数選択するという特徴を持ち、逐次変数選択法の中で最も多用されている。
  4. 変数減増法(stepwise backward selection method)
    増加法と減少法を組み合わせた手法。 変数増減法とは逆に、まず変数減少法に従って全ての変数を取り込み、追い出し基準を満足するものを追い出す。 そして1つ変数を追い出すたびに、すでに追い出したものの中で増加法と同様の取り込み基準を満足するものがないか調べ、あればそれを取り込み、さらに変数の追い出しを続ける。 変数増減法と同じく、取り込むべき変数も追い出すべき変数もなくなった時に変数の選択を終了する。
    この手法は判別に寄与する割合が少ない変数を少数除外するという特徴を持ち、逐次変数選択法の中で効率的な変数の組み合わせが得られる可能性が最も高い。

(2) 変数増減法の手順

変数選択法の中で最も多用されるのは重回帰分析と同じく変数増減法です。 そこで、この手法について順を追ってもう少し詳しく説明することにしましょう。 (注1) (→7.3 変数の選択)

1) 最初の変数の取り込み

最初に1変数だけで判別した時に判別確率が最大となる変数つまり単独で判別効率を最大にする変数を探し、それが取り込み基準を満足するなら判別関数に取り込みます。 その変数をx1とすると、この時の状態は図9.5.1のようになります。

図9.5.1 1つの変数を取り込んだ時

取り込み基準は「その変数を取り込むことによる判別効率の増加分が判別誤差の2倍以上あること」にするのが一般的です。 それは重回帰分析と同じように次のように表されます。

F = 判別効率の増加分 判別誤差 ≧ F in = 2 の時、取り込み

Finの値は2と決められているわけではありませんが、重回帰分析と同じく一般に2〜2.5ぐらいが適当だといわれています。

2) 次の変数の取り込み

次に残りの変数から今取り込んだ変数と共有する情報を取り除いた上で、判別効率の増加が最大の変数を探します。 そしてその変数が取り込み基準を満足するなら判別関数に取り込みます。 その変数をxjとすると、この時の状態は図9.5.2のようになります。

図9.5.2 次の変数を取り込んだ時

3) 変数の追い出し

ここで今までに取り込んだ変数の中から単独で判別に関与している割合が最小のもの、つまりその変数を追い出した時に判別効率の減少が最小になるものを探します。 そしてその変数が追い出し基準を満足しているなら追い出し、満足していないのならそのままにします。 これも重回帰分析と同じように次のように表されます。

F = 判別効率の減少分 判別誤差 < F out = 2 の時、追い出し

この値は各変数が単独で判別に寄与している割合を表し、数学的には分散分析に用いるF値と同じ統計量になります。 Foutの値はFin以下ならどんな値でもかまいませんが、普通はFinと同じ値にします。 もしFout > Finにすると、同じ変数が出たり入ったりを繰り返してしまうので注意が必要です。 またFout = 0にすると変数増加法になり、Fin = Fout = 0にすると全変数を強制的に取り込みます。 これも重回帰分析と同様です。

図9.5.3 変数の追い出し

4) 変数選択の終了

変数を追い出した後、2番に戻ってさらに変数の取り込みを続けます。 そして取り込む変数も追い出す変数もなくなるまで2番と3番の手順を繰り返します。

(3) 変数選択法の注意点

逐次変数選択法によって得られた判別関数は、重回帰分析と同様にできるだけ少ない変数で、できるだけ効率的に群を判別するための簡便で実用的な判別関数です。 そのため例えば医学の臨床現場で、なるべく少ない検査項目で、なるべく正確に群の判別を行いたい時などに用いると実用的で便利です。

しかし医学の研究現場では色々な検査項目が群の判別に単独でどの程度寄与しているか、つまり各検査項目の診断指標としての重要度を調べたい時がよくあります。 そのような時は対象とする全検査項目を変数に入れた判別分析を行うべきであり、逐次変数選択を行うべきではありません。 逐次変数選択を行った場合、選択されなかった変数は群の判別に寄与していないとは限りません。 すでに選択された変数にその変数の情報が含まれているため重ねて選択する必要がないだけで、実際には判別に寄与しているということも十分あり得ます。

そのため選択された変数が単独でどの程度の寄与をしているかは、逐次変数選択の結果からは不正確にしかわかりません。 また選択されなかった変数が判別にどの程度寄与しているかを知るのは不可能です。 したがって色々な検査項目が群の判別に単独でどの程度寄与しているかを調べたい時、またはある検査項目が群の判別に寄与していないことを検証したい時などは逐次変数選択を行ってはいけません。

またこのようにして選択された変数の組み合わせは、単に数字の大きさだけで機械的に選択されたものです。 科学的に最適なものでも、因果関係を考慮したものでもありません。 そのため得られた判別関数について科学的に十分吟味することが大切です。 もし判別関数の内容が科学的に解釈困難なら、特定の変数を強制的に取り込んだり追い出したりして色々な判別関数を計算し、それらをよく検討して最終的な結果を選ぶべきです。 (注2) (注3)

他の多変量解析と同じように、判別分析も大量の計算を必要とするので普通はコンピュータを利用して計算します。 しかしコンピュータのアウトプットをそのまま無条件に採用してはいけません。

とかく世間には「コンピュータは間違いを犯さない」、「コンピュータは何でもできる」などというとんでもない迷信がはびこっていて、

「コンピュータがそう結論したんだ、間違いない!」

と、まるでデルフォイ神殿の御神託のようにコンピュータのアウトプットを鵜飲みにしてしまうミーハーや、

「コンピュータがそう結論したんじゃ、何か文句あっか!!」

と、コンピュータを免罪符代りにして居直る輩がマスコミを始めとして色々なところに生息しています。

しかしたとえプログラムが完全で操作が完壁だとしても——実はコンピュータが犯したと称されるエラーのうち、99.9%以上のものが人間であるプログラマーとオペレーターの責任なのです——コンピュータにインプットするデータが不確実なものであれば、やはり不確実な結果しかアウトプットされません。

ゴミを入れればゴミを出し(GIGO)、宝を入れれば、うまくいけば宝を出す馬鹿正直なコンピュータですから、出されたモノがゴミか宝かは、くどいようですがやはり人間がしっかりと判断しなければいけません。 コンピュータは機械的な作業を速く正確に行なうための道具にすぎず、人間の知的作業や感覚的判断を肩代りしてくれる魔法の箱ではないのです。 (注4)


(注1) 変数増減法による判別分析は、掃き出し法を利用して重回帰分析と同じような手順で行います。 (→7.3 変数の選択 (注1))

1) 単純積和行列作成

まず群ごとに単位ベクトルも含めたデータ行列を用意し、その行列と転置行列との積つまり単純積和行列を作ります。

… [n×(p+1)]
… [h×(p+1)]
… [(p+2)×(p+2)]
… [(p+2)×(p+2)]

2) 積和行列に変換

次にこれらの行列を第1行第1列の要素(nまたはh)を軸にして掃き出し、平均値ベクトルと積和行列に変換します。

  

これらの行列を利用して、群別の標準偏差や相関係数などを計算することができます。

3) 共分散行列に変換

次に2群の積和行列部分を足し合わせて(n+h-2)で割り、共分散行列に変換します。 そして第1列を第1要素が1の(p+2)次単位ベクトルに変換し、第1行第2列〜第(p+1)列に2群の平均値ベクトルを平均したベクトル[1 + 2]/2の要素を並べ、第1行第(p+2)列の要素を0にします。 さらに第(p+2)列第2行〜第(p+1)行と第(p+2)行第2列〜第(p+1)列に2群の平均値ベクトルの差ベクトル[1 - 2]の要素を並べ、第(p+2)行第(p+2)列の要素を0にします。 それからその右側に(p+2)次の単位行列を並べ、第1列第1行の要素と第1例第(p+2)行の要素を0にし、第1列第2行〜第(p+1)行の要素を-[1 + 2]/2の要素にし、これを行列1とします。

… [(p+2)×(p+2)]

後の計算のために、1の行と列の番号を1〜(p+2)ではなく0、1、…、p、dと呼ぶことにします。 この行列は重回帰分析で変数増減法に用いた行列1に相当します。 そして計算終了後は第d列第0行の要素ka0dが判別関数の切片a0に、第d列第1行〜第p行の要素ka1dkapdが判別係数ベクトルに、第d列第d行の要素kaddの符号を正にしたものが判別効率すなわちマハラノビスの平方距離D2になります。

変数によって2群の判別が可能かどうかは、判別効率Δ2が0かどうかを検定することによって判断します。 その検定はホッテリングのT2検定を利用して次のように行います。

H0:Δ2 = D2 = 0 に関して

> F(p,n+h-1-p,α)の時、有意水準100α%で有意

また変数x1、…、xqを用いた時の判別効率をDq2とし、これに変数xq+1を追加した時の判別効率をDq+12とすると、判別効率の増加分についての検定は次のようになります。 そしてこの時の検定統計量Fを利用して変数の選択を行なうことができます。

H0:dq+1 = Δq+12 − Δq2 = Dq+12 − Dq2 = 0 に関して
> F(1,n+h-1-(q+1),α)の時、有意水準100α%で有意

4) 取り込み変数の選択

ここから変数の選択に入ります。 今、第k番目(k = 1,…,p、前述の状態はk = 1)まで変数の取り込みが終了しているとします。

変数xjを取り込むことによる判別効率の増加分djは次のようになります。

(j = 1,…,p、すでに取り込まれた変数は除く)

この値が最大のものを選び、次のような基準を満足すればその変数を取り込みます。

≧ Fin = 2〜2.5:取り込み基準

上記の基準を満足せず、次のようになれば変数の選択を終了します。

Fj < Fin → 変数選択終了

5) 変数の取り込み

kajjを軸にして掃き出し、第j番の変数を取り込みます。

6) 追い出し変数の選択

今までに取り込まれた変数のうち、その変数を追い出すことによる判別効率の減少分は次のようになります。

(l = 1,…,p、すでに取り込まれた変数のみ)

この値が最小のものを選び、次のような基準を満足すればその変数を追い出します。

<Fout
※Fout = 2〜2.5:追い出し基準。 Fout ≦ Finの必要があり、Fout = Finが一般的

上記の基準を満足せず、次のようになればまた4番に戻って変数の取り込みを続けます。

Fl ≧ Fout → 4)へ

7) 変数の追い出し

第l番の変数を追い出すには、右側の逆行列側のk+1all(-1)を軸にして掃き出してkに戻します。

この後でまた4番に戻り、取り込む変数がなくなるまで同様の手順を繰り返します。

8) 各種統計量の計算

最終的に第r番目の変数を取り込んで変数の選択が終了したとすると、次のようにして各種統計量を計算します。


判別係数:aj = rajd (j = 0(切片),1,…,p、取り込まれた変数のみ)
判別関数:z = a0 + a1x1 + … + arxr   z > 0の時、群1と判別  z < 0の時、群2と判別
○判別係数の検定
帰無仮説 H0:αj = 0 (j = 1,…,r)

     φR = n + h - 1 - r
> F(1,φR,α) = t(φR,α)2の時、有意水準100α%で有意
○判別係数の推定
100(1 - α)%信頼区間:αjLU = aj ± t(φR,α)SEaj → 下限:αjL = aj - t(φR,α)SEaj  上限:αjU = aj + t(φR,α)SEaj
マハラノビスの平方距離(判別効率):D2 = -radd
誤判別確率:   判別確率 = 1 - p  f(u):標準正規分布の確率密度関数
ホッテリングのT2
> F(r,φR,α)の時、有意水準100α%で有意
寄与率(相関比の平方):

表9.1.1の例題について実際に計算してみましょう。

1) 単純積和行列の計算

  

2) 積和行列に変換

  

3) 1の用意

4) 取り込み変数の選択

  

したがって、まずx1を選択します。

選択基準を満足しているのでx1を取り込みます。

5) 1a11 = 322.75で掃き出し

6) 追い出し変数の選択

取り込んだ変数が今取り込んだx1だけなので、変数追い出しステップは飛ばします。

7) 取り込み変数の選択

  

よって、x2を取り込みます。

8) 2a22 = 1523.8で掃き出し

9) 追い出し変数の選択

今取り込んだばかりのx2は候補からはずします。

  

このためx1は追い出さず、これで変数の選択を終了します。

10) 各種統計量の計算

変数の選択を終了し、各種統計量を計算します。

判別係数:a0(切片) = -61.1636
a1 = 0.3352  SEa1 = 0.0366  標準判別係数:
F1 = 83.929(p = 0.00000001) > F(1,22,0.05) = 4.301 … 有意水準5%で有意
95%信頼区間:α1LU = 0.3352 ± 2.0739×0.0366 → 下限:α1L = 0.2593 上限:α1U = 0.4111
a2 = -0.0749  SEa2 = 0.0172  標準判別係数:
F1 = 18.947(p = 0.0003) > F(1,22,0.05) = 4.301 … 有意水準5%で有意
95%信頼区間:α2LU = -0.0749 ± 2.0739×0.0172 → 下限:α2L = -0.1106 上限:α2U = -0.0392
判別関数:z = -61.1636 + 0.3352x1(TC) - 0.0749x2(TG)
※z > 0の時、動脈硬化症群と判別  z < 0の時、正常群と判別
マハラノビスの平方距離(判別効率):D2 = 14.6355
誤判別確率:  判別確率 = 0.9721
ホッテリングのT2
> F(2,22,0.05) = 3.443 … 有意水準5%で有意
寄与率:

この場合は全てのデータを選択したので、結果は第4節の全変数を選択した結果と同じになります。

(注2) 判別分析のような多変量予測モデルについて、基本モデルに特定の項目を追加したモデルの予測能力の増加を評価するための指標として、NRI(Net Reclassification Improvement)IDI(Integrated Discrimination Improvement)という値が提唱されています。

○NRI = [P(up|D=1) - P(down|D=1)] - [P(up|D=0) - P(down|D=0)]
  
  

> t(∞,α)の時、有意水準100α%で有意
D = 1:疾患有(イベント有)  D = 0:疾患無(イベント無)
nD:疾患群の例数   nnonD:非疾患群(正常群)の例数
nup,D:疾患群において疾患予測確率が上昇した例数
ndown,D:疾患群において疾患予測確率が下降した例数
nup,nonD:非疾患群において非疾患予測確率が上昇した例数
ndown,nonD:非疾患群において非疾患予測確率が下降した例数
○IDI = [P(new|D=1) - P(old|D=1)] - [P(new|D=0) - P(old|D=0)]
P(new|D=1) = Pnew,D:疾患群における新モデルの疾患予測確率平均値
P(old|D=1) = Pold,D:疾患群における旧モデルの疾患予測確率平均値
P(new|D=0) = Pnew,nonD:非疾患群における新モデルの非疾患予測確率平均値
P(old|D=0) = Pold,nonD:非疾患群における旧モデルの非疾患予測確率平均値
> t(∞,α)の時、有意水準100α%で有意

NRIは基本モデルに特定の項目を追加することによって正しい予測確率が上昇した被験者の割合と、正しい予測確率が下降した被験者の割合の差に相当するノンパラメトリックな指標です。 そして正しい予測確率が上がった例数と下がった例数を用いて、NRIが0かどうかの検定を行います。 この検定は符号検定に相当しますが、通常は上記のように符号検定の正規近似手法つまり出現率の正規近似検定を用います。

一方、IDIは基本モデルによる正しい予測確率と、基本モデルに特定の項目を追加したモデルによる正しい予測確率の差に相当するパラメトリックな指標です。 そして2つのモデルの正しい予測確率の差を用いて、IDIが0かどうかの検定を行います。 この検定は対応のあるt検定つまり変化量平均値の1標本t検定に相当しますが、通常は上記のようにt分布を正規分布で近似した正規近似検定を用います。

これらは予測確率値を用いた指標ですが、予測確率は特殊な分布をするのでNRIもIDIも正規分布で大雑把に近似しています。 そのため検定と推定の精度が低くなってしまい、統計学的にはあまり好ましくありません。 それよりも変数選択法のように、特定の項目をモデルに追加することによる判別効率の増加分つまりマハラノビスの汎距離の増加分を用いる方が合理的です。 そしてマハラノビスの汎距離の増加分が0かどうかの検定は判別係数が0かどうかの検定になります。

したがってこれらの特殊な指標を用いるよりも、判別確率とマハラノビスの汎距離を用いてモデルの予測能力を評価し、必要に応じて判別係数の検定と推定を用いて各項目の判別への寄与分を評価するというオーソドックスな方法の方が合理的です。

またNRIとIDIをロジスティック回帰分析や生存時間解析で用いることがあります。 しかし上記の計算式からわかるように、これらの指標は疾患(イベント有)群と正常(イベント無)群を定数と考えた後ろ向き研究用の指標です。 そのためこれらの指標を前向き研究用の手法であるロジスティック回帰分析や生存時間解析で用いるのは非合理です。

(注3) 判別分析と重回帰分析の関係は次のようになります。 判別分析のデータに対して変数を説明変数にし、群をダミー変数にしたものを目的変数にして次のような重回帰モデルをあてはめます。

重回帰モデル:=Xβ + ε
     
:群1に属すn例は「1」、群2に属すh例は「0」のダミー変数
群1におけるの平均:my1 = 1   群2におけるの平均:my2 = 0   総例数:N = n + h
の総平均:      
xjの総平均:   群1と群2におけるxjの平均の差:dj = mx1j - mx2j
  
図9.5.4 判別分析の重回帰モデル

全体の積和をST(重回帰分析における積和に相当)、群1と群2の積和をプールした群内積和をSW(判別分析における群1と群2の合計積和に相当)、群1と群2の群間積和をSBと表すと次のようになります。



(t:k = 1(群1)の時はn、k = 2(群2)の時はh)

重回帰分析における正規方程式を行列[']の第0行第0列の要素Nで掃き出し、切片b0に関係した第0行と第0列を削除すると次のようになります。

正規方程式:'Xb='
  

一方、判別関数から次のようになります。

= -1[1 - 2]
Va = 1 - 2

したがって判別分析の各種統計量と重回帰分析の各種統計量の間には、次のような関係が成り立ちます。

  
  
  

  

また次のようにホッテリングのT2検定は回帰の検定に一致し、変数選択に用いるF値は同じものになります。 そのため変数選択手順はどちらも全く同一になります。


重回帰分析において、説明変数が名義尺度(分類データ)ばかりの時は数量化I類と呼ばれる手法がありました。 それと同様に判別分析において、説明変数が名義尺度ばかりの時は数量化II類と呼ばれる手法があります。 この手法はダミー変数を利用した判別分析と等価になり、結局のところ重回帰分析において説明変数と目的変数の両方が名義尺度になったものに相当します。 (→7.3 変数の選択 (注1))

(注4) いわく「第五世代コンピュータ」、いわく「AI(人工知能)」などというもっともらしい言葉が巷に氾濫し、近い将来に人間以上の知能を持つコンピュータが出現しそうなことが盛んに喧伝された時代が、かつてありました。 しかしそれは常に甘い言葉でユーザーを釣らんと画策するコンピュータメーカーによるけしからん陰謀と、砂粒のごとく小さなことを山のごとく巨大なこととして報道し、火もない所に山火事を起こそうとするマスコミの馬鹿げたカラ騒ぎ以外の何者でもなかったことは、その後の歴史が証明しています。

その時代においても現在においても、「AI」と称されているものは全て人間の知的活動の上っ面だけをマネた「似非人工知能」にすぎません。 色々な質問に答える「生成AI(Generative AI)」も、いかにも考えているように見えますが、実は質問に応じてインターネット上でよく引用される情報を収集し、それをまとめて出力しているだけであり、理論的に体系化して回答しているわけではありません。 そのため世間の多くの人が誤解している情報をまとめた時はバカ正直に間違った回答を返しますし、インターネット上に情報がない時はハルシネーション(幻覚)を起こして、自信満々にトンチンカンな回答を返してしまいます

人間の脳の働きのは高度に発達した現代科学をもってしてもおいそれと解明できるようなシロモノではなく、非理論的な感覚的活動はおろか、多少は理論的なはずの知的活動のしくみさえ全くわかっていないのが現状です。 人間はなぜ青い空を美しいと思い、緑の森を清々しく感じ、赤い夕日に涙するのか、なぜ音楽が好きで、絵に心惹かれ、小説に感動するのか……これらの感覚的活動は理屈では全く説明のつかない不可思議な現象です。

「まったりとして、しかもしつこくない素晴らしい味ね!」

などとグルメっぽく美味しんぼごっこをしてみても、

「魂の奥底に潜む欲望を赤裸々に描写して間然する所のない、素晴らしい作品だ!」

などと評論家を気取ってみても、実は単に言葉を変えているだけで、何ら「素晴らしい」の説明にはなっていないのです。

そしてまた人間は、わずかなデータからどのようにしてその背後にある根本原理を洞察するのか、色々の情報からどのようにして適確な判断を下すのか、必要な情報をどのようにして記憶し、またどのようにして呼び起こすのか、勘とは何か、インスピレーションとは何か、想像力とは何か、イマジネーションとは何か……これらの知的活動も、実際にはほとんど説明のつかない正体不明の現象です。

こういった人間の脳独特の働きが解明されるまでは、それをシミュレートする人工知能などできるはずがありません。 それ故、真剣に人工知能に取り組んでいるコンピュータ研究者にとっても、「本物の人工知能」というものは残念ながらまだまだ「夢のまた夢」もしくは「見果てぬ夢」なのです。