ケモメトリクス入門 ― 乱数だけの表に PCA をかけても、主成分が 49 本「見つかる」【2026年版】
データ解析

ケモメトリクス入門 ― 乱数だけの表に PCA をかけても、主成分が 49 本「見つかる」【2026年版】

主成分分析もクラスタリングも、構造がまったく無いデータに対しても必ず答えを返す。試料 50・変数 200 の純粋な乱数表に PCA をかけると、カイザー基準は 49 本、累積寄与率 80 % 基準は 30 本の主成分を「意味あり」と判定する。正解はゼロ本である。平行分析だけが 0 を返す。共通するのは「乱数データという対照と比べる」という一点で、それを欠いた解析はどんな結果でも出せてしまう。

主成分分析(PCA)は、便利です。何百本もの波長データを 2 次元に落とし、点を打てば、それらしい図になります。

問題は、中身が乱数だけでも、それらしい図になることです。

試料 50 個・変数 200 本の表を、すべて独立な乱数で埋めました。真の構造はゼロです。ここに PCA をかけて 「主成分を何本採るべきか」を 4 つの基準で判定させると、こうなりました。

判定基準 採るべきと判定した主成分の数
カイザー基準(固有値 > 1) 49 本
累積寄与率 80 % 30 本
累積寄与率 95 % 43 本
平行分析 0 本

正解は 0 本です。

同じことがクラスタリングでも起きます。ひとかたまりの乱数データに k-means をかければ、k をいくつに 指定しても必ずその数のクラスタが返ってきます。シルエット値も正の値(0.17 前後)になります。

手法は、答えが無いときにも答えを返します。だから「主成分が得られた」「クラスタに分かれた」ことは、 それだけでは何の証拠にもなりません。

この記事は、PCA とクラスタリングが何を最大化していて、何を最大化していないかを計算で示し、 どうすれば「答えが出た」を検証できるかまでを扱います。

この記事の読み方

本記事の読み進め方を示す図。これから学ぶ方は1〜3節でPCAの仕組みと乱数で主成分が出る理由と対照の取り方を、すでに使っている方は4〜6節でスコアプロットの落とし穴と標準化の選択とクラスタリングの検証を読む。本記事の数値はすべて筆者の計算による人工データのシミュレーションであり実測値ではない
図解:これから学ぶなら 1〜3 節、使っているなら 4〜6 節。
  • これから学ぶ方: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. なぜ乱数からでも主成分が「出る」のか

真の構造がゼロの乱数行列に対して4つの基準が何本の主成分を採るべきと判定するかを示す表。試料20変数10でPC1寄与率21.7パーセント・カイザー4・累積80%が6・累積95%が9・平行分析0。試料50変数200でカイザー49・累積30・累積43・平行分析0。試料100変数200でカイザー68・累積52・累積78・平行分析0。カイザー基準は構造ゼロのデータから最大68本を残す
図解:正解は 0 本。カイザー基準は最大 68 本を残す。

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. 対照と比べる ― 平行分析

平行分析の3段階を示す図。実データと同じ大きさの乱数データを何百回も作り、その固有値の分布を求め、実データの固有値が乱数の95パーセンタイルを超えたぶんだけを意味ありとして採る。偶然でもこのくらいは出るという対照を先に作っておくことで、返ってきた答えが情報になる
図解:対照を先に作る。それで初めて答えが情報になる。

表の中で 平行分析(parallel analysis)だけが、すべての条件で 0 を返しました。

やっていることは単純です。同じ大きさ(同じ n、同じ p)の乱数データを何百回も作り、その固有値の 分布を求める。実データの固有値が、その 95 パーセンタイルを超えたぶんだけ採る。

つまり 「偶然でもこのくらいは出る」という対照を先に作っておくわけです。乱数データに対しては、 実データもまた乱数ですから、当然どの固有値も対照を超えず、答えは 0 になります。

これがこの記事全体を貫く原則です。手法が答えを返すこと自体は情報ではありません。 「構造が無いときに何が返ってくるか」を知って初めて、返ってきた答えが情報になります。

4. スコアプロットで分かれない = 違いが無い、ではない

主成分ごとのクラス分離能を示す表。PC1は寄与率30.09パーセントなのにクラス分離のtの絶対値は0.22でp値0.83。PC2は寄与率2.78パーセントでtが5.89。同じデータをクラス差の方向へ射影するとtの絶対値は13.2になる。クラス差の方向のcos二乗はPC2が0.2169、PC3が0.0419、PC13が0.0376、PC12が0.0271、PC5が0.0207で、50パーセントを捉えるのに20本、80パーセントに61本の主成分が要る
図解:寄与率 30 % の PC1 が、クラス分離に寄与していない。

いちばん実害が出るのがここです。

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. 標準化するかどうかで、主成分は入れ替わる

標準化の有無で主成分が入れ替わることを示す表。中心化のみの共分散行列ではPC1の寄与率83.3パーセントで最も効く変数は変数1、本当の構造との相関は0.193。標準化ありの相関行列ではPC1の寄与率36.0パーセントで最も効く変数は変数6、本当の構造との相関は0.956。寄与率の高さは正しさの指標ではない
図解:寄与率が高いほうが、本当の構造を見落としている。

もうひとつ、結果を左右する選択があります。変数を標準化するか(相関行列を使うか)、 中心化だけにするか(共分散行列を使うか)です。

濃度・吸光度・粒子径などスケールの違う変数が混ざった表を模して計算しました。 変数 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のシルエット値を構造ゼロのデータと3つの塊があるデータで比べた表。構造ゼロはkが2から6で0.176、0.167、0.176、0.170、0.179。3つの塊があるデータは0.693、0.733、0.558、0.458、0.174。構造ゼロでもシルエット値は正の値になるので、正の値が出たことはクラスタがあることを意味しない。本物のデータでもk=6では値が落ち構造ゼロを下回る
図解:構造ゼロでもシルエット値は 0.17 前後の正の値になる。

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. では、どう使えばよいか

ケモメトリクスを使うときの7つの指針。主成分の数はカイザー基準や累積寄与率だけで決めず平行分析等を併用する、PC1の寄与率が高いことを意味があるの根拠にしない、スコアプロットで分かれなかったことを差がないと書かない、分かれたときも何が分けているかをローディングで確認する、標準化するかどうかを変数の単位から決めて記録する、クラスタリングの結果は必ず対照と比べる、前処理と主成分数と標準化の選択を結果と一緒に報告する
図解:7 つの指針 ― 共通するのは「対照を作る」こと。
  1. 主成分の数は、カイザー基準や累積寄与率だけで決めない。平行分析か交差検証を併用する。 乱数でも 49 本残る基準に、単独で判断させない。
  2. PC1 の寄与率が高いことを「意味がある」の根拠にしない。乱数でも 20 % を超えることがある。
  3. スコアプロットで分かれなかったことを「差がない」と書かない。PCA は分散を最大化しており、 クラス分離を最大化していない。クラスの有無を問うなら、判別分析や SIMCA など教師ありの手法を使う。
  4. スコアプロットで分かれたときも、何が分けているのかをローディングで確認する。 ベースライン変動や測定日で分かれているだけかもしれない。
  5. 標準化するかどうかを、変数の単位から決めて記録する。寄与率の高さで選ばない。
  6. クラスタリングの結果は、必ず対照と比べる。同じ大きさの無構造データで同じ手順を回し、 指標がどのくらいになるかを見る。
  7. 前処理・主成分数・標準化の選択を、結果と一緒に報告する。これらが変われば結論が変わる。

共通しているのは「対照を作る」という一点です。乱数データを同じ手順に通すだけで、 その手法が「何も無いときに何を返すか」が分かります。これは追加の測定を必要としません。

分析者の視点

分析者が持つべき視点を示す図。手法は答えが無いときにも答えを返す。乱数でもカイザー基準は49本、PC1寄与率は21.7パーセントに達する。平行分析は同じ条件で正解の0本を返す。PCAが最大化するのは分散でありクラス分離ではない。PC1寄与率30パーセントでも分離への寄与はtの絶対値0.22。クラス差は多数の主成分に散る。標準化の有無で相関が0.193と0.956に変わる。k-meansは構造ゼロでも正のシルエット値を返す。前処理と主成分数と標準化を書かねば再現できない
図解:手法は、答えが無いときにも答えを返す。
  1. 手法は、答えが無いときにも答えを返す。返ってきたこと自体は情報ではない。
  2. 乱数だけの表でも、カイザー基準は 49 本の主成分を残す(n = 50、p = 200)。正解は 0 本。
  3. PC1 の寄与率は乱数でも 21.7 % に達する(n = 20、p = 10)。高さは意味の証拠ではない。
  4. 平行分析は同じ条件で 0 を返す。対照と比べているからである。
  5. PCA が最大化しているのは分散であって、クラス分離ではない。局方も PCA を前処理に置いている。
  6. スコアプロットで分かれないことは、差が無いことを意味しない。寄与率 30 % の PC1 が クラス分離にまったく寄与しない例を計算で示した(|t| = 0.22)。
  7. クラス差は多数の主成分に散る。上位 2 本では 22 % しか見ていないことがある。
  8. 標準化の有無で PC1 の指すものが変わる。本当の構造との相関が 0.193 と 0.956 に分かれた。
  9. k-means は必ずクラスタを返し、シルエット値も正になる。単独の値では判断できない。
  10. 前処理・主成分数・標準化を報告に書く。書かなければ、他人は結論を再現できない。

まとめ

  • 試料 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 モデルを作り、新しい試料がどのクラスに属するかを判定する教師あり手法。
  • 判別分析:あらかじめ分かっているクラス分けを最もよく再現する軸を探す教師あり手法。

出典

  1. 第十九改正日本薬局方 一般試験法〈2.26〉ラマンスペクトル測定法(厚生労働省告示第193号)。 主成分分析などのケモメトリックス手法による工程管理、およびケモメトリックスの定義。 https://www.mhlw.go.jp/content/11120000/001689414.pdf
  2. 第十九改正日本薬局方 一般試験法〈2.27〉近赤外吸収スペクトル測定法(同上)。 「5.1. 定性分析」における多変量解析法の列挙と、主成分分析を前処理と位置づける記述。 数学的前処理(微分・正規化)の重要性についての記述。

数値計算はすべて筆者による(固定シード 20260907)。k-means とシルエット値も自前に実装した。 モデルと仮定は 2 節に、限界は「未確認・限界」に記載した。

関連記事

未確認・限界

本記事の限界を示す図。数値はすべて人工データのシミュレーションであり実測ではない。乱数だけのデータは全要素が独立な標準正規分布とした単純な設定で、相関のあるノイズでは主成分の出方が変わる。平行分析の閾値は95パーセンタイルを使用し交差検証による決定は未計算。4節のクラス差設定は人工的で実データでは部分的に重なる場合がある。k-meansは10回の初期値からベストを採る実装で階層クラスタリングやDBSCANは範囲外。教師あり手法の実装と検証は範囲外
図解:計算はモデルである。自分のデータの予測値にしない。
  • 本記事の数値はすべて人工データによるシミュレーションであり、実測ではない。 自分のデータの予測値として使ってはならない。方向と大きさの感覚を得るためのものである。
  • 「乱数だけのデータ」は全要素が独立な標準正規分布とした。実際のスペクトルは隣接波長が強く相関して おり、この意味で本記事の設定は最も単純な場合である。相関のあるノイズでは、偶然の主成分の出方は変わる。
  • 平行分析の閾値は乱数データの固有値の 95 パーセンタイルとした。平均値を使う流儀もあり、 その場合はより多くの主成分を残す。
  • 交差検証(PRESS など)による主成分数の決定は計算していない。実務ではこれが標準的な選択肢の ひとつだが、本記事では平行分析との比較にとどめた。
  • 4 節のクラス差は、大きな変動と直交する方向に置いた人工的な設定である。実データでは 部分的に重なることが多く、その場合はスコアプロットにも一部が現れる。
  • k-means は 10 回の初期値からベストを採る実装である。初期値依存性やクラスタ形状の仮定 (球状を仮定する)については扱っていない。階層クラスタリング、DBSCAN などは範囲外。
  • PLS 回帰・SIMCA・判別分析といった教師あり手法の実装と検証は扱っていない。 本記事は教師なし手法(PCA・クラスタリング)の解釈に絞った。 PLS による検量モデルは 近赤外分光(NIR)とPAT ― その数値を出しているのは、装置ではなくモデルである【2026年版】 を参照。
  • 日本薬局方以外の公定書(USP〈1039〉Chemometrics、Ph. Eur.)は未入手のため、 三極間で記述が一致しているかは確認していない。

制作メモ:日本薬局方の該当条文を原文で確認したうえで執筆。数値計算は線形代数と乱数のみを使い、 k-means とシルエット値も自前に実装した。固定シードで再現可能である。