高次元回帰:監視型主成分
7390個の遺伝子で生存時間を予測したい。でも普通の手法はこの状況では機能しない。 「分散の大きい方向」と「予測に役立つ方向」は全く別物——この洞察から生まれた「監視型主成分(Supervised Principal Components)」を探っていこう。
7390個の遺伝子で生存時間を予測できるか?
2002年、医師たちはリンパ腫(悪性リンパ腫の一種)患者のデータを使って予測モデルを作ろうとしていました。 手元にあるのは240人の患者データ。各患者について、7390個の遺伝子の発現量(その遺伝子がどのくらい活発に働いているか)が測定されています。
問題はすぐに現れます。変数の数(7390)がサンプル数(240)を30倍以上も上回っています。
なぜこれが問題なのでしょうか?変数(説明変数)の数が増えすぎると逆効果が起きます。 例えるなら、10人の顧客から1万個の製品を評価させて「どの製品が売れるか」を予測しようとするようなもの。 評価できる「範囲」が少なすぎて、統計的な推定が不安定になります。
この状況では普通の最小二乗回帰は数学的に解が一意に定まりません。 では主成分回帰(PCR)はどうでしょうか?PCRは「分散の大きい方向」を主成分として抽出し、 それを回帰の説明変数として使います。一見賢い方法に見えます。
しかし落とし穴があります。「分散が大きい」と「生存時間を予測できる」は別の話なのです。

7390個の遺伝子の中には、基本的な細胞機能(エネルギー産生や細胞分裂など)に関わる遺伝子が多数含まれます。 これらはどの患者でも活発に発現するため、患者間で大きなばらつきを示します。 PCRはこの「大きなばらつき」を真っ先に選びますが、これらの遺伝子は生存時間とは無関係なのです。
一方、本当に予後(生存時間)に関わる遺伝子群の発現量変化は、7390次元の全変動の中では 「小さな信号」として埋もれてしまいます。PCRはこの重要な信号を見逃してしまうのです。
解決策:「まず選んで、それから圧縮する」
監視型主成分(Supervised PC)のアイデアは驚くほどシンプルです。
ゴミの中から宝石を探してから、宝石で主成分を作る。
具体的には3つのステップで進みます。

ステップ1:単変量フィルタリング
7390個の遺伝子それぞれについて、生存時間との「1対1の相関の強さ」を計算します。 遺伝子ごとに「この遺伝子だけで生存時間がどの程度予測できるか」を見るのです。 生存時間データにはCoxスコア統計量(生存分析専用の相関指標)を使います。 相関が強い遺伝子だけを選択し、閾値 $\theta$ 以下のものは除外します。
ステップ2:選ばれた特徴量で主成分を作る
選ばれた遺伝子だけからなる縮小データ行列 $\mathbf{X}_\theta$ を作り、 その最初の $m$ 個の主成分を計算します。 この主成分は「応答と関係がある遺伝子群の中での主要な変動方向」を捉えます。
ステップ3:主成分で回帰
求めた主成分(通常は第1主成分のみで十分)を説明変数として回帰モデルを作ります。 閾値 $\theta$ と主成分数 $m$ は クロスバリデーションで最適化します。
リンパ腫データでの驚きの結果
7390個の遺伝子からわずか27個が閾値を超えました。 この27遺伝子の第1主成分で生存時間を予測したところ、テストセット(80人)での予測精度が大幅に向上しました:
| 手法 | p値 | 判定 |
|---|---|---|
| 最も相関の高い1遺伝子 | 0.15 | 有意でない |
| 全遺伝子を使った通常PCR | 0.14 | 有意でない |
| 監視型PC(27遺伝子) | 0.006 | 有意! |
7390個全部使うより、27個に絞る方がはるかに予測精度が高いのです。 これが監視型主成分の力です。
なぜうまく機能するのか — 潜在変数モデルの視点
ここで一歩引いて、「なぜこの2段階の手法がうまく機能するのか」を理解しましょう。
リンパ腫の患者群を考えると、実は大きく2つのタイプが存在することが生物学的に知られています。 「生存予後の良いセルタイプ」と「予後の悪いセルタイプ」です。でも「セルタイプ」は 血液検査や遺伝子発現量からしか間接的に知ることができません。 直接測定できない、隠れた変数(潜在変数)なのです。

これを数学的に表現すると:
生存時間 Y は潜在変数 U(セルタイプ)に依存します:
(β₀は切片、β₁はセルタイプが生存時間に与える影響の大きさ、εは測定ノイズ)
そして測定される遺伝子発現量 $X_j$(j番目の遺伝子)の一部も、 この潜在変数 U を反映しています:
(α₁ⱼはj番目の遺伝子がセルタイプをどの程度反映しているか、ϵⱼは各遺伝子の測定ノイズ)
つまり、すべての「相関」は潜在変数 U を通じて生まれています。Y と Xⱼ が相関しているのは、両者とも U の影響を受けているからです。
ここで重要な洞察があります。個々の遺伝子 $X_j$ は U を反映してはいますが、 ノイズ $\epsilon_j$ も含んでいます。しかし、同じ U を反映した遺伝子を 多数集めて「平均的な方向」(= 主成分)を求めると、各遺伝子のノイズが打ち消し合い、 U がクリーンに浮かび上がります。
監視型主成分の第1主成分 $u_1$ はまさに、 この潜在変数 U の推定値になっているのです。 多数の「ノイズ混じりの測定値」を平均することで、真のシグナルが浮かび上がる—— これが監視型主成分の本質的なメカニズムです。
部分最小二乗法(PLS)との比較
監視型主成分と似た手法に、部分最小二乗法(PLS: Partial Least Squares)があります。PLSもまた、応答変数 Y と関係のある方向を探す手法です。
PLSの第1変量 z は次のように求まります:
(⟨y, xⱼ⟩は y と xⱼ の内積、つまり相関の大きさ)
各遺伝子について「生存時間との内積(相関の強さ)」を重みとして、遺伝子発現量を重み付き合算するのです。
これに対し、監視型PCの方向 u は「選ばれた遺伝子群の中で、互いに一致した変動方向」を求めます。 多くのノイジーな遺伝子が「同じ方向を向いている」部分を抽出するイメージです。

サンプル数が十分に大きければ(N → ∞)、両者は同じ解に収束します。
しかし有限のサンプルでは:
- PLSの z は各遺伝子の「yとの内積」に含まれるノイズの影響を受ける
- 監視型PCの u は多数の遺伝子の「共通の変動」を見るので、ノイズが打ち消されやすい
特に、ノイズだらけの遺伝子(本当は潜在変数と無関係なのに偶然相関しているもの)が多数混じっているとき、 PLSはそのノイズに引きずられてしまいます。監視型PCは最初のフィルタリングでそういった遺伝子を除去するため、 この問題に強いのです。
シミュレーション実験(5000遺伝子、100サンプル、真に関係するのは最初の250遺伝子のみ)では、 監視型PCがPLSやLassoより一貫して低いテストエラーを達成しました。
3手法の性能比較
高次元回帰の主要な3つのアプローチを比較しましょう。

Lasso(L1正則化回帰)
7390個の遺伝子に回帰係数を割り当て、関係のない遺伝子の係数をゼロに縮小する手法です。 シンプルで強力ですが、Lassoはノイズ遺伝子が非常に多い場合(今回のように7000個以上がノイズの場合)、 一部のノイズ遺伝子が偶然 y と相関してしまい、誤って選ばれることがあります。 少数の特徴量を選んだとき(〜50個)はそれなりの性能ですが、過学習が起きやすく不安定です。
閾値付きPLS
PLSにフィルタリングを組み合わせた手法です。 PLSに単変量相関による事前選択を加えたものですが、フィルタリング後もPLSの 「ノイズに引きずられやすい」性質は残ります。広い範囲の特徴量数でテストエラーが上昇し、 最適な特徴量数の選択が難しいという課題があります。
監視型PC(本章の主役)
フィルタリングしてから主成分を取る手法です。選ばれた遺伝子が「共通に持つ方向」を抽出するため、 ノイズに対して最も堅牢です。〜50個近辺で最低のテストエラーを安定して達成します。
この結果から重要なことが分かります:フィルタリング(ノイズ除去)のステップが特に重要なのです。 単に「関係がありそうな変数を重み付けする」より、 「関係のない変数を最初に除外する」方が、高次元データでは効果的です。
まとめ — 高次元データを生き抜く知恵
監視型主成分の哲学を一言で言えば:
まず関係のある変数だけを見つけ、次にその変数群の本質(主成分)を抽出する

なぜこの順序が大事なのか?
主成分は「ノイズも含めた全変動の中の主要方向」を求めます。もしノイズだらけの変数(生存時間と無関係な遺伝子)を 全部含めると、主成分はそのノイズに支配されてしまいます。先に関係のある変数だけに絞ることで、主成分は「本物のシグナルの主要方向」を正しく捉えられるようになるのです。
実用的な利点
- 解釈可能性:27個の遺伝子シグネチャは「なぜこの患者は予後が良いのか」の生物学的な手がかりを与える
- スパース性:全7390遺伝子より少ない数で同等以上の性能
- 汎用性:生存時間分析に限らず、通常の回帰や分類にも同じアプローチが使える
次章(18.7)では、同じく高次元問題における「特徴量の評価」と「多重検定問題」を扱います。 高次元では、偶然のみで「有意」に見える変数が大量に発生する問題(False Discovery Rate)について考えます。