2026年10月8日にRのhomals、FactoMineRのMCA、MASSの対応分析、NumPyのSVD仕様を再確認した。数量化Ⅲ類・多重対応分析は、カテゴリの頻度と重みを含む指示行列を低次元へ配置する方法で、個体とカテゴリの距離、原点からの遠さ、寄与、cos²は同じ意味ではない。希少カテゴリや欠測を重要度と直結させず、入力表、重み、次元数、座標定義、再現性、実際の調査・売上データを別に確認する。
ブランドや商品と属性を1枚の図に並べたいとき、点が近いというだけで関係の強さを判断していませんか。数量化Ⅲ類では、何を1行にしたか、カテゴリの頻度をどう重みにしたか、どの座標で描いたかが読み方を左右します。
30秒で要点
- 回答者などの個体とカテゴリを配置し、回答パターンの違いを探索する方法です。分類の正解や施策の効果を推定する図ではありません。
- ここでは各設問から1カテゴリを選ぶ完全な指示行列を使い、多重対応分析(MCA)として計算を追います。
- 個体同士、カテゴリ同士、個体とカテゴリをまたぐ距離は同じ意味ではありません。軸の慣性、点の表現の良さ、頻度を確認して解釈します。
用語を図の読み方につなげる
表が収まらない場合は、横にスクロールできます
| 用語 | この記事での意味 |
|---|---|
| 指示行列 | 選んだカテゴリを1、同じ設問の選ばなかったカテゴリを0にした表 |
| 正規化 | 重み付きの中心や広がりを固定し、恣意的な拡大だけで解が変わらないようにする条件 |
| 標準座標・主座標 | 主座標は標準座標に軸ごとの特異値を掛けたもの。両方を同じ座標だと思わない |
| 慣性・寄与率 | この重みと距離で表したばらつきと、そのうち各軸が受け持つ割合 |
| 寄与・cos² | 寄与は軸を構成する重み、cos²はその点を選んだ軸がどれだけ表すか。別の指標 |
旧稿の「スコア行列/負荷行列」は、個体の座標とカテゴリの数量化を区別して読みます。ソフトごとに名称や尺度が異なり、負荷量を常に地図上の座標と同一視できません。
6人の回答を、合計12個の「1」へ変える
以下は著者が作った架空の6人です。商品を選ぶ際の価格帯と特徴を、それぞれ一つだけ選んだ設定にします。実顧客や実ブランドの調査結果ではありません。
表が収まらない場合は、横にスクロールできます
| 人 | 価格帯 | 重視する特徴 | 指示行列:高価格・低価格・機能・軽量 |
|---|---|---|---|
| A | 高価格 | 機能 | 1, 0, 1, 0 |
| B | 高価格 | 機能 | 1, 0, 1, 0 |
| C | 高価格 | 軽量 | 1, 0, 0, 1 |
| D | 低価格 | 機能 | 0, 1, 1, 0 |
| E | 低価格 | 軽量 | 0, 1, 0, 1 |
| F | 低価格 | 軽量 | 0, 1, 0, 1 |
各行の合計は2、各列の合計は3です。全体の合計12で割った表をPとすると、行の重みrは各1/6、列の重みcは各1/4になります。1は選択の記録であり、評価の強さではありません。欠測を0にすると「選ばなかった」と「聞いていない」を混ぜるため、先に欠測の扱いを決めます。
homalsの公式説明では、個体座標の正規化の下で、個体と選択カテゴリの配置を求めます。FactoMineRのMCA説明は、指示行列への対応分析とBurt表への対応分析を区別しています。以下の数値は指示行列方式の未補正の慣性です。補正済み寄与率や別の行重みを使う出力と、そのまま比較しません。地図の「近さ」を読む前に、座標をそろえる
この教材の個体の主座標は、A・Bが(1, 0)、Cが(0, 1)、Dが(0, -1)、E・Fが(-1, 0)です。第1軸だけならCとDはどちらも0に重なりますが、第2軸では区別されます。1軸への縮約で落ちた情報を、似ているという結論へ置き換えてはいけません。
表が収まらない場合は、横にスクロールできます
| カテゴリ | 主座標:第1軸・第2軸 | 標準座標:第1軸・第2軸 |
|---|---|---|
| 高価格 | 0.8165, 0.5774 | 1, 1 |
| 低価格 | -0.8165, -0.5774 | -1, -1 |
| 機能 | 0.8165, -0.5774 | 1, -1 |
| 軽量 | -0.8165, 0.5774 | -1, 1 |
第1軸の慣性は2/3、第2軸は1/3で、合計1です。未補正の割合は約66.7%と33.3%。各カテゴリは同じ頻度なので、この例の第1軸への寄与は各25%です。遠さだけで寄与を決めたのではなく、「重み×座標の二乗÷軸の慣性」で計算しています。
この二つの主座標軸では、同じ種類の点同士の全次元距離に意味があります。例えばAとCの距離の二乗は2で、元の行プロファイルのカイ二乗距離の二乗と一致します。軸を一つにすると距離の二乗は1になり、元の差を全部は表しません。
一方、個体とカテゴリをまたぐ直線距離に、同じ解釈はありません。MASSの対応分析の説明も、行と列をともに主座標で描く図の内積解釈に注意を促しています。「Aに高価格が近いから購買を引き起こす」という読み方もできません。
関係を確かめるには、元のクロス表へ戻ります。この例では高価格を選んだ3人中2人が機能を選択し、全体では6人中3人です。2/3と3/6を比較できても、6人の架空例から市場の差別化余地を証明することはできません。
小さな行列で正規化を再計算する
計算では、各セルから独立の場合の値r×cを引き、√(r×c)で割った行列を特異値分解(SVD)します。SVDは行列を直交する方向とその大きさに分ける計算です。下のコードはNumPy 2.1.3を使う教材で、homalsやFactoMineRを実行した結果ではありません。NumPyの仕様に対応する処理をそのまま示します。
import numpy as np
# 架空6人。各人が価格・特徴からそれぞれ1カテゴリを選択。
# 列: 高価格, 低価格, 機能重視, 軽量重視
Z = np.array([[1,0,1,0], [1,0,1,0], [1,0,0,1],
[0,1,1,0], [0,1,0,1], [0,1,0,1]], dtype=float)
P = Z / Z.sum()
r, c = P.sum(axis=1), P.sum(axis=0)
S = (P - r[:, None] * c) / np.sqrt(r[:, None] * c)
U, s, Vt = np.linalg.svd(S, full_matrices=False)
U, s, V = U[:, :2], s[:2], Vt[:2].T
for axis in range(2): # 符号は任意。高価格の座標を正にそろえる。
if V[0, axis] < 0:
U[:, axis] *= -1
V[:, axis] *= -1
X = U / np.sqrt(r[:, None]) # 個体の標準座標
F = X * s # 個体の主座標
Gamma = V / np.sqrt(c[:, None]) # カテゴリの標準座標
G = Gamma * s # カテゴリの主座標
assert np.allclose(X.T @ (r[:, None] * X), np.eye(2))
assert np.allclose(G, (Z.T @ X) / Z.sum(axis=0)[:, None])
assert np.allclose(F, Z @ Gamma / 2)
assert np.allclose(s**2, [2/3, 1/3])
print('raw inertia:', np.round(s**2, 6))
print('individual principal:', np.round(F, 6))
print('category principal:', np.round(G, 6))
print('category standard:', np.round(Gamma, 6))
個体の標準座標Xは、重みrで測ると各軸の二乗平均が1になります。カテゴリ主座標Gは、そのカテゴリを選んだ人のXの平均です。個体主座標Fは、選んだ二つのカテゴリ標準座標Gammaの平均になります。この対応では尺度が違う座標を組み合わせています。主座標同士の地図で「個体は選択カテゴリの単純な重心」と言い切る説明は避けます。軸の符号は反転しても距離や慣性を変えません。
ブランドと属性へ使う前の判断
ブランド×属性の図を作るなら、まず「誰の何を1行にした表か」を決めます。個人の単一選択回答なら上の指示行列が使えます。ブランド別の回答度数表なら対応分析(CA)、対象間の非類似度が出発点なら多次元尺度構成法(MDS)が候補です。任意の評価点や連続スコアを、カテゴリの1/0と同じ表へ無条件に混ぜません。
表が収まらない場合は、横にスクロールできます
| 確認すること | 判断を誤りやすい場面 | 次に確かめること |
|---|---|---|
| 頻度と設問の構成 | 珍しい回答が遠くにあり「最重要」と命名する | 件数、寄与、cos²、カテゴリを分けた理由 |
| 表示軸と尺度 | 個体が密集しカテゴリが広がる | 主座標か標準座標か、軸の拡大率、残りの慣性 |
| 重みと集計単位 | ブランドの回答数の差を魅力度と読む | 対象者構成、行重み、同一人物の重複 |
| 仮説と施策 | 地図の空白を需要と読む | その属性を求める人の有無、実現可能性、別の調査 |
全セルを同じ定数倍にしても、この計算のPは変わらず配置も変わりません。一部の回答やカテゴリだけを増減すると重みや問いが変わります。見栄えのためのカテゴリ統合や希少値の除去は自動で行わず、根拠と変更前後の差を残します。
三つの練習で、地図の読み過ぎを防ぐ
- 行・列が多く、ラベルが重なる。 寄与やcos²を確認して表示ラベルを絞り、同じ解の個体図とカテゴリ図を分けます。分析対象自体を落として再計算する操作とは区別し、クラスタ分けも補助の仮説として扱います。
- 行だけが密集し、列が広がる。 属性の分散が大きいと即断せず、まず座標の尺度と描画倍率を確認します。この教材でもカテゴリ主座標を標準座標へ変えるだけで見た目が変わります。
- MDS・CAと何が違うか。 同じブランドでも、対象間距離、ブランド×属性の度数、個人×選択カテゴリのどれを持つかを書き分けます。データ構造と正規化を定めてから手法を選ぶことが、この図を使う最初の一歩です。