主成分分析(PCA)は、便利です。何百本もの波長データを 2 次元に落とし、点を打てば、それらしい図になります。
問題は、中身が乱数だけでも、それらしい図になることです。
試料 50 個・変数 200 本の表を、すべて独立な乱数で埋めました。真の構造はゼロです。ここに PCA をかけて 「主成分を何本採るべきか」を 4 つの基準で判定させると、こうなりました。
| 判定基準 | 採るべきと判定した主成分の数 |
|---|---|
| カイザー基準(固有値 > 1) | 49 本 |
| 累積寄与率 80 % | 30 本 |
| 累積寄与率 95 % | 43 本 |
| 平行分析 | 0 本 |
正解は 0 本です。
同じことがクラスタリングでも起きます。ひとかたまりの乱数データに k-means をかければ、k をいくつに 指定しても必ずその数のクラスタが返ってきます。シルエット値も正の値(0.17 前後)になります。
手法は、答えが無いときにも答えを返します。だから「主成分が得られた」「クラスタに分かれた」ことは、 それだけでは何の証拠にもなりません。
この記事は、PCA とクラスタリングが何を最大化していて、何を最大化していないかを計算で示し、 どうすれば「答えが出た」を検証できるかまでを扱います。
この記事の読み方
- これから学ぶ方:1〜3 節を読んでください。PCA が何をする装置か(1 節)、 乱数でも主成分が出る理由(2 節)、そして対照の取り方(3 節)。
- すでに使っている方:4〜6 節が実務の核です。スコアプロットの落とし穴(4 節)、 標準化の選択(5 節)、クラスタリングの検証(6 節)。
- 本記事の数値はすべて筆者の計算です。線形代数と乱数以外に外部から借りたものはありません。 k-means とシルエット値も自前で実装しました。固定シードで再現できます。 モデルと仮定は 2 節に、限界は末尾に書いています。
1. 局方は PCA を「前処理」に置いている
まず、公定書がケモメトリクスをどう位置づけているかを見ます。第十九改正日本薬局方の 一般試験法〈2.26〉ラマンスペクトル測定法には、こうあります。
なお,主成分分析などのケモメトリックスの手法によりラマンスペクトルから得られるスコアなどや 対象物質の特徴的なピーク波数を指標とすることにより,原薬又は製剤の工程管理に利用することもできる. ケモメトリックスは,通例,化学データを数量化し,情報化するための数学的手法及び統計学的手法を指す.
そして〈2.27〉近赤外吸収スペクトル測定法の定性分析の項に、重要な一文があります。
なお,多変量解析法としては波長相関法,残差平方和法,距離平方和法などの波長(又は波数)又は 吸光度などを変数とする直接的な解析法のほか,主成分分析などの前処理をした後に適用される 因子分析法,クラスター分析法,判別分析法及び SIMCA (Soft independent modeling of class analogy) などの多変量解析法もある.
読み飛ばしやすいところですが、構造が明快です。局方は主成分分析を「前処理」の側に置いています。 分類そのものは、そのあとに適用される判別分析や SIMCA が担う。
PCA は分類の道具ではありません。この位置づけが、4 節の落とし穴の答えになります。
2. なぜ乱数からでも主成分が「出る」のか
PCA がしていることは単純です。データの分散がいちばん大きい方向を探し、それを PC1 とする。 次に、それと直交する中で分散が最大の方向を PC2 とする。以下同様です。
ここで効いてくるのが、変数の数 p が試料の数 n に近いと、偶然の相関が必ず生じるという事実です。 200 本の変数を 50 試料で測れば、たまたま似た動きをする変数の組が必ずできます。PCA はそれを 「共通の方向」として拾います。
モデルと仮定
- すべての計算は固定シード(20260907)の乱数で、再現可能です
- PCA は列を中心化(節によっては標準化も)し、特異値分解で求めました
- 「乱数だけのデータ」は、すべての要素が独立な標準正規分布に従う行列です
- k-means は 10 回の初期値からベストな解を採り、シルエット値はユークリッド距離で自前に計算しました
- 実データのノイズ構造、外れ値、欠測、非線形性は考慮していません
乱数だけの表で、4 つの基準を比べる
| 試料数 n | 変数 p | PC1 の寄与率 | カイザー | 累積 80 % | 累積 95 % | 平行分析 |
|---|---|---|---|---|---|---|
| 20 | 10 | 21.7 % | 4 | 6 | 9 | 0 |
| 20 | 50 | 10.9 % | 15 | 11 | 16 | 0 |
| 50 | 100 | 5.3 % | 33 | 25 | 38 | 0 |
| 50 | 200 | 4.4 % | 49 | 30 | 43 | 0 |
| 100 | 200 | 2.7 % | 68 | 52 | 78 | 0 |
| 30 | 1000 | 4.4 % | 29 | 22 | 28 | 0 |
カイザー基準(固有値が 1 を超えるものを採る)は、構造ゼロのデータから最大 68 本の主成分を残します。 累積寄与率の基準も同じで、80 % に達するのに 52 本必要だと答えます。
注目すべきは PC1 の寄与率です。n = 20・p = 10 の乱数表で 21.7 %。実データでこの数字を見たら、 多くの人は「PC1 が 2 割を説明している、意味のある軸だ」と考えるでしょう。乱数でもこの値は出ます。
3. 対照と比べる ― 平行分析
表の中で 平行分析(parallel analysis)だけが、すべての条件で 0 を返しました。
やっていることは単純です。同じ大きさ(同じ n、同じ p)の乱数データを何百回も作り、その固有値の 分布を求める。実データの固有値が、その 95 パーセンタイルを超えたぶんだけ採る。
つまり 「偶然でもこのくらいは出る」という対照を先に作っておくわけです。乱数データに対しては、 実データもまた乱数ですから、当然どの固有値も対照を超えず、答えは 0 になります。
これがこの記事全体を貫く原則です。手法が答えを返すこと自体は情報ではありません。 「構造が無いときに何が返ってくるか」を知って初めて、返ってきた答えが情報になります。
4. スコアプロットで分かれない = 違いが無い、ではない
いちばん実害が出るのがここです。
PCA のスコアプロット(PC1 対 PC2)を描き、2 群が重なっていたので「差はなかった」と結論する。 これは間違いになりうる、というより PCA の設計からして間違いやすい判断です。
計算で示します。変数 200 本、各クラス 30 試料。ここに、
- クラスとは無関係な大きな変動(ベースラインの上下を模したもの)を振幅 10 で
- クラス差を、それと直交する方向に振幅 3 で
- ノイズを振幅 1 で
入れました。クラス差は確かに存在します。
| 主成分 | 寄与率 | クラス分離の |t| | p 値 |
|---|---|---|---|
| PC1 | 30.09 % | 0.22 | 0.83 |
| PC2 | 2.78 % | 5.89 | 2.1×10⁻⁷ |
| PC3 | 2.53 % | 1.05 | 0.30 |
| PC4 | 2.42 % | 0.04 | 0.97 |
| PC5 | 2.38 % | 1.42 | 0.16 |
| PC6 | 2.31 % | 0.96 | 0.34 |
PC1 は全分散の 30 % を占めますが、クラスの分離にはまったく寄与していません(|t| = 0.22)。 拾っているのは、クラスと無関係な大きい変動のほうです。
一方、同じデータをクラス差の方向へ射影すると |t| = 13.2(p = 4.7×10⁻¹⁹)。完全に分かれます。 情報はデータの中にあるのに、PC1・PC2 の平面では見えていません。
さらに、クラス差の方向が主成分の上でどう散らばっているかを調べました。
| 順位 | 主成分 | cos²(その主成分が占める割合) | その主成分の寄与率 |
|---|---|---|---|
| 1 | PC2 | 0.2169 | 2.78 % |
| 2 | PC3 | 0.0419 | 2.53 % |
| 3 | PC13 | 0.0376 | 1.85 % |
| 4 | PC12 | 0.0271 | 1.89 % |
| 5 | PC5 | 0.0207 | 2.38 % |
クラス差の方向の 50 % を捉えるには 20 本、80 % には 61 本の主成分が要ります。 上位 2 本を見ても、クラス差の 22 % しか見ていないことになります。
理由は 1 節に書いたとおりです。PCA が最大化しているのは分散であって、クラスの分離ではありません。 局方が PCA を「前処理」と位置づけ、分類を判別分析や SIMCA に任せているのは、この違いによります。
実務上の言い換え:スコアプロットで分かれたら「大きな変動がクラスと一致していた」という意味であって、 運がよかっただけかもしれません。分かれなかったら「大きな変動はクラスと無関係だった」という意味であって、 クラス差の有無については何も言っていません。
5. 標準化するかどうかで、主成分は入れ替わる
もうひとつ、結果を左右する選択があります。変数を標準化するか(相関行列を使うか)、 中心化だけにするか(共分散行列を使うか)です。
濃度・吸光度・粒子径などスケールの違う変数が混ざった表を模して計算しました。 変数 1・2 のスケールは大きく(1000、500)、変数 6〜8 は小さい(0.01)。 そして 「意味のある構造」は、スケールの小さい変数 6〜8 にだけ入れてあります。
| 前処理 | PC1 の寄与率 | PC1 に最も効く変数 | PC1 と本当の構造の相関 |r| |
|---|---|---|---|
| 中心化のみ(共分散行列) | 83.3 % | 変数 1 | 0.193 |
| 標準化あり(相関行列) | 36.0 % | 変数 6 | 0.956 |
中心化だけだと、PC1 は「スケールの大きい変数 1」を拾い、本当の構造との相関は 0.193 にとどまります。 寄与率は 83.3 % と立派ですが、見ているものが違います。標準化すると PC1 の寄与率は 36.0 % に下がる 代わりに、本当の構造との相関が 0.956 になります。
寄与率の高さは、正しさの指標ではありません。単位の違う変数を並べるときは、標準化を既定にする 理由がここにあります(逆に、同じ単位のスペクトルで強度の大小自体に意味があるなら、 標準化しないほうがよいこともあります)。
前処理がモデルを左右するという話は、近赤外の文脈でも同じです。局方は 「スペクトルの一次若しくは二次微分処理又は正規化などの数学的前処理を行うことは、重要な手順の一つ」と 書いています。この点は 近赤外分光(NIR)とPAT ― その数値を出しているのは、装置ではなくモデルである【2026年版】 で詳しく扱いました。
6. クラスタリングは、構造が無くても必ず答えを返す
k-means は、k を指定すれば必ず k 個のクラスタを返します。「分かれなかった」という返事はありません。
5 次元・90 試料の、ひとかたまりの乱数データ(構造ゼロ)と、3 つの塊があるデータの両方に k-means をかけ、シルエット値を比べました。
| k | 構造ゼロのデータ | 3 つの塊があるデータ |
|---|---|---|
| 2 | 0.176 | 0.693 |
| 3 | 0.167 | 0.733 |
| 4 | 0.176 | 0.558 |
| 5 | 0.170 | 0.458 |
| 6 | 0.179 | 0.174 |
読み取れることが 2 つあります。
第一に、構造ゼロのデータでもシルエット値は正(0.17 前後)です。「正の値が出た」ことは クラスタの存在を意味しません。
第二に、本物のクラスタがあれば値ははっきり違います。k = 3 で 0.733 と、 構造ゼロの 0.167 の 4 倍以上。そして k = 3 で最大になり、正解の 3 を当てています。
つまりシルエット値は使える指標ですが、単独の値ではなく「構造ゼロならどのくらいか」との比較で 読む必要があります。これは 3 節の平行分析とまったく同じ発想です。
k = 6 で本物のデータが 0.174 まで落ち、構造ゼロの 0.179 を下回っていることにも注目してください。 クラスタ数を間違えれば、本物のデータでも「構造なし」と同じ見え方になります。
7. では、どう使えばよいか
- 主成分の数は、カイザー基準や累積寄与率だけで決めない。平行分析か交差検証を併用する。 乱数でも 49 本残る基準に、単独で判断させない。
- PC1 の寄与率が高いことを「意味がある」の根拠にしない。乱数でも 20 % を超えることがある。
- スコアプロットで分かれなかったことを「差がない」と書かない。PCA は分散を最大化しており、 クラス分離を最大化していない。クラスの有無を問うなら、判別分析や SIMCA など教師ありの手法を使う。
- スコアプロットで分かれたときも、何が分けているのかをローディングで確認する。 ベースライン変動や測定日で分かれているだけかもしれない。
- 標準化するかどうかを、変数の単位から決めて記録する。寄与率の高さで選ばない。
- クラスタリングの結果は、必ず対照と比べる。同じ大きさの無構造データで同じ手順を回し、 指標がどのくらいになるかを見る。
- 前処理・主成分数・標準化の選択を、結果と一緒に報告する。これらが変われば結論が変わる。
共通しているのは「対照を作る」という一点です。乱数データを同じ手順に通すだけで、 その手法が「何も無いときに何を返すか」が分かります。これは追加の測定を必要としません。
分析者の視点
- 手法は、答えが無いときにも答えを返す。返ってきたこと自体は情報ではない。
- 乱数だけの表でも、カイザー基準は 49 本の主成分を残す(n = 50、p = 200)。正解は 0 本。
- PC1 の寄与率は乱数でも 21.7 % に達する(n = 20、p = 10)。高さは意味の証拠ではない。
- 平行分析は同じ条件で 0 を返す。対照と比べているからである。
- PCA が最大化しているのは分散であって、クラス分離ではない。局方も PCA を前処理に置いている。
- スコアプロットで分かれないことは、差が無いことを意味しない。寄与率 30 % の PC1 が クラス分離にまったく寄与しない例を計算で示した(|t| = 0.22)。
- クラス差は多数の主成分に散る。上位 2 本では 22 % しか見ていないことがある。
- 標準化の有無で PC1 の指すものが変わる。本当の構造との相関が 0.193 と 0.956 に分かれた。
- k-means は必ずクラスタを返し、シルエット値も正になる。単独の値では判断できない。
- 前処理・主成分数・標準化を報告に書く。書かなければ、他人は結論を再現できない。
まとめ
- 試料 50・変数 200 の純粋な乱数表に PCA をかけると、カイザー基準は 49 本、 累積寄与率 80 % は 30 本、95 % は 43 本の主成分を「採るべき」と判定する。正解は 0 本。 平行分析だけが 0 を返す。
- 乱数でも PC1 の寄与率は 21.7 % に達する(n = 20、p = 10)。寄与率の高さは意味の証拠にならない。
- 日本薬局方は主成分分析を「前処理」に位置づけ、分類は因子分析・クラスター分析・判別分析・SIMCA が 担うと書いている(〈2.27〉)。PCA は分類の道具ではない。
- 寄与率 30.09 % の PC1 が、クラス分離にまったく寄与しない例を計算で示した(|t| = 0.22)。 同じデータをクラス差の方向へ射影すると |t| = 13.2。情報はあるのに、スコアプロットでは見えない。
- クラス差の方向は主成分に散る。50 % を捉えるのに 20 本、80 % には 61 本必要だった。
- 標準化の有無で PC1 が指すものが変わる。本当の構造との相関は、中心化のみで 0.193、 標準化ありで 0.956。寄与率は前者のほうが高い(83.3 % 対 36.0 %)。
- k-means は構造ゼロのデータにも必ずクラスタを返し、シルエット値も 0.17 前後の正の値になる。 本物のクラスタがあれば k = 3 で 0.733 と明確に違うが、単独の値ではなく対照との比較で読む必要がある。
- すべてに共通する対処は「同じ手順に乱数データを通してみる」こと。追加の測定は要らない。
用語集
- ケモメトリクス:化学データを数量化し、情報化するための数学的手法及び統計学的手法(JP19〈2.26〉)。
- 主成分分析(PCA):データの分散が最大になる方向を順に取り出し、変数を少数の軸に圧縮する手法。
- 主成分得点(スコア):各試料を主成分の軸に射影した値。スコアプロットはこれを 2 次元に描いたもの。
- ローディング:各主成分が、もとの変数をどういう重みで組み合わせたものかを表す係数。
- 寄与率:その主成分が全分散のうち何 % を説明しているか。
- カイザー基準:相関行列の固有値が 1 を超える主成分を採る、という経験則。
- 平行分析(parallel analysis):同じ大きさの乱数データの固有値分布と比べ、それを超えた主成分だけを採る方法。
- k-means:試料を k 個のクラスタに分け、各クラスタ内の分散の和を最小にする手法。
- シルエット値:各試料が自分のクラスタにどれだけ馴染んでいるかの指標。−1 から 1。
- SIMCA:クラスごとに PCA モデルを作り、新しい試料がどのクラスに属するかを判定する教師あり手法。
- 判別分析:あらかじめ分かっているクラス分けを最もよく再現する軸を探す教師あり手法。
出典
- 第十九改正日本薬局方 一般試験法〈2.26〉ラマンスペクトル測定法(厚生労働省告示第193号)。 主成分分析などのケモメトリックス手法による工程管理、およびケモメトリックスの定義。 https://www.mhlw.go.jp/content/11120000/001689414.pdf
- 第十九改正日本薬局方 一般試験法〈2.27〉近赤外吸収スペクトル測定法(同上)。 「5.1. 定性分析」における多変量解析法の列挙と、主成分分析を前処理と位置づける記述。 数学的前処理(微分・正規化)の重要性についての記述。
数値計算はすべて筆者による(固定シード 20260907)。k-means とシルエット値も自前に実装した。 モデルと仮定は 2 節に、限界は「未確認・限界」に記載した。
関連記事
- 近赤外分光(NIR)とPAT ― その数値を出しているのは、装置ではなくモデルである【2026年版】
- ラマン分光徹底解説 ― 励起波長は「感度」だけを決めているのではない【2026年版】
- AI・機械学習が変える分析化学 ― スペクトル自動解析の最前線【2026年版】
- 標準物質・検量線・トレーサビリティ ― 相関係数 0.999 を満たした検量線の 95 % で、定量下限が ±20 % を外れていた【2026年版】
- クロマトグラムの積分とピーク処理 ― 同じ不純物が、積分モードしだいで 0.028 % にも 0.104 % にもなる【2026年版】
未確認・限界
- 本記事の数値はすべて人工データによるシミュレーションであり、実測ではない。 自分のデータの予測値として使ってはならない。方向と大きさの感覚を得るためのものである。
- 「乱数だけのデータ」は全要素が独立な標準正規分布とした。実際のスペクトルは隣接波長が強く相関して おり、この意味で本記事の設定は最も単純な場合である。相関のあるノイズでは、偶然の主成分の出方は変わる。
- 平行分析の閾値は乱数データの固有値の 95 パーセンタイルとした。平均値を使う流儀もあり、 その場合はより多くの主成分を残す。
- 交差検証(PRESS など)による主成分数の決定は計算していない。実務ではこれが標準的な選択肢の ひとつだが、本記事では平行分析との比較にとどめた。
- 4 節のクラス差は、大きな変動と直交する方向に置いた人工的な設定である。実データでは 部分的に重なることが多く、その場合はスコアプロットにも一部が現れる。
- k-means は 10 回の初期値からベストを採る実装である。初期値依存性やクラスタ形状の仮定 (球状を仮定する)については扱っていない。階層クラスタリング、DBSCAN などは範囲外。
- PLS 回帰・SIMCA・判別分析といった教師あり手法の実装と検証は扱っていない。 本記事は教師なし手法(PCA・クラスタリング)の解釈に絞った。 PLS による検量モデルは 近赤外分光(NIR)とPAT ― その数値を出しているのは、装置ではなくモデルである【2026年版】 を参照。
- 日本薬局方以外の公定書(USP〈1039〉Chemometrics、Ph. Eur.)は未入手のため、 三極間で記述が一致しているかは確認していない。
制作メモ:日本薬局方の該当条文を原文で確認したうえで執筆。数値計算は線形代数と乱数のみを使い、 k-means とシルエット値も自前に実装した。固定シードで再現可能である。