マーケティングリサーチ(市場調査)の領域でよく使われるコレスポンデンス分析の正しい使い方の解説です。 クロス集計表の探索的分析に使います。 R言語による分析事例です。 Tokyo.Rでの発表資料です。
コレスポンデンス分析の正しい使い方Tokyo.R #972022/03/19@bob3bob3
View Slide
今回の発表は以下のブログ記事をもとにしています。● なので、詳しくはこれらの記事を参照してください。○ コレスポンデンス分析の同時布置図は本当に使えないのか?○ コレスポンデンス分析の同時布置図は本当に使えないのか?(の続き )○ コレスポンデンス分析の同時布置図は本当に使えないのか?(点と点の距離の話)○ 複数回答(multiple answer, MA)の集計表をコレスポンデンス分析にかけて大丈夫?
コレスポンデンス分析とは?● クロス集計表における項目間の相対的な関係を、視覚的に分かりやすく把握するための手法。● 通称「コレポン」。● 「対応分析」とも呼ばれる。● ブランドのイメージを調査するアンケートの分析などによく使われる。● 項目数が多く、数表では全体の把握が難しい場合に特に有効。● RではMASS::corresp()、ca::ca()、FactoMineR::CA()などで実行可能。
こんなかんじこの図をコレスポンデンス分析の 同時布置図と呼びます。行と列の情報を同時に置くという意味。ノルウェイの犯罪統計( 1984)『対応分析入門』より引用強盗 詐欺 破壊オスロ 395 2456 1758中部地域 147 153 916北部地域 694 327 1347
どう解釈する?● マクロミル社の解説○ 「関連の強いカテゴリは近くに、弱いカテゴリは遠くにプロットされるが、これはあくまでカテゴリ間の相対的な関係で、絶対的なボリュームを表わすものではない。」● クロスマーケティング社の解説○ 「各項目の近くに位置するもの同士に類似性があるという読み取りができます。」● なるほど、なるほど……
コレポンをめぐる議論● マーケティングリサーチで使われるコレスポンデンス分析について調べてみた○ 「コレスポンデンス分析は、それぞれ行得点・列得点を算出しているだけで、それらを重ね合わせたに過ぎません。 つまり列要素と行要素との距離は、数理的に定義されず「近い」「似ている」のように解釈できないのです。」○ 「コレスポンデンス分析は行・列をごっちゃにして分析しない。」
コレポンをめぐる議論
どうすりゃいいの???● 結論から言うと、正しく使えば大丈夫。● コレポンの正しい使い方とは???○ コレポンの同時布置図において集計表の行と列の関係は、 原点からの方向の近さ (角度の大きさ)で解釈するよ。○ コレポンの同時布置図が表現しようとしているのは割合の残差 であり、残差の大きさは原点から引いた各点がなす角度の大きさ として表現されるよ。○ 原点から各点へ矢印を引く と解釈しやすいよ。○ 残差の大きさが角度の大きさとして表される描画方法を使わないとダメ だよ。○ 縦横のスケールは合わせないとダメ だよ。○ コレポンは実数の大きさには関心がないよ。実数の大きさはモザイクプロットなどで確認してね。○ 縦横の軸の意味を解釈しようとするのはダメだよ。○ 点と点の距離で関係の強さを解釈しようとするのはダメだよ。
サンプルデータ● Correspondence Analysis: What is it, andhow can I use it to measure my Brand? より引用。Tasty Aesthetic EconomicButterbeer 5 7 2Squishee 18 46 20Slurm 19 29 39Fizzy Lifting Drink 12 40 49Brawndo 3 7 16dat <- c(5, 18, 19, 12, 3, 7, 46, 29,40, 7, 2, 20, 39, 49, 16) |>matrix(nrow = 5,dimnames = list(Brands = c("Butterbeer", "Squishee","Slurm","Fizzy Lifting Drink","Brawndo"),Attributes = c("Tasty", "Aesthetic","Economic")))
とりあえずコレポン library(ca)res.ca_ca <- ca(dat)res.biplot_symbiplot <- plot(res.ca_ca, map = "symbiplot",arrows = c(TRUE, TRUE),xlim = c(-1.1, 0.9),ylim = c(-1.1, 0.9),main = "ca - Biplot - symbiplot")res.biplot_symbiplot## $rows## Dim1 Dim2## Butterbeer -1.0665778 -0.67407378## Squishee -0.6468361 0.23054640## Slurm 0.1563567 -0.42910993## Fizzy Lifting Drink 0.3359331 0.28929206## Brawndo 0.8359247 -0.06979996#### $cols## Dim1 Dim2## Tasty -0.4937814 -0.63528783## Aesthetic -0.3915076 0.30897357## Economic 0.6242065 -0.02893797
残差● コレポンで知りたいのはクロス集計表の項目間の関係。● 表頭と表側の項目間の関係は 残差として現れる。● 残差とは実測値と期待値の差 。● 期待値とは行と列の各項目間に関係がないと仮定した場合の各セルの値。 行周辺確率分布と行周辺確率分布をかけ合わせた値。● 残差の絶対値が大きいと、行と列の項目間に何らかの関係がありそう、ということになります。● ここではそれらを割合をベースに計算します。n <- sum(dat) # 総度数P <- dat / n # 同時確率分布row_masses_pi <- rowSums(P) # 行周辺確率分布col_masses_pj <- colSums(P) # 行周辺確率分布E <- row_masses_pi %o% col_masses_pj # 期待割合E(Expected proportions)R <- P - E # 残差R(Residuals)R## Attributes## Brands Tasty Aesthetic Economic## Butterbeer 0.007827909 0.003883136 -0.01171105## Squishee 0.008505917 0.036119329 -0.04462525## Slurm 0.009954389 -0.022343442 0.01238905## Fizzy Lifting Drink -0.020679241 -0.005639793 0.02631903## Brawndo -0.005608974 -0.012019231 0.01762821
指標化残差● 生の残差は各カテゴリの度数に左右されるため、期待値で割って正規化します。● これを指標化残差(Indexed residuals)と呼びます。● 指標化残差が0.955であれば、観測値は期待値より95.5pt高いということを意味します 。● この指標化残差を可視化するのがコレポンの同時布置図のねらい です。I <- R / E # 指標化残差 I(Indexed residuals)I## Attributes## Brands Tasty Aesthetic Economic## Butterbeer 0.9548872 0.20930233 -0.6462585## Squishee 0.1729323 0.32447398 -0.4104308## Slurm 0.1954023 -0.19379845 0.1100164## Fizzy Lifting Drink -0.3496613 -0.04213677 0.2013201## Brawndo -0.3684211 -0.34883721 0.5238095
コレポンにおける指標化残差の表現● コレポンの同時布置図において、行の点Aの座標を(x1, y1)、列の点Bの座標を(x2, y2)とすると、x1 *x2 + y1 * y2が指標化残差と一致します。○ これは二つのベクトルの内積(スカラー積)を意味します。● 例えばtastyとButterbeerの指標化残差は0.955。● 先に描いたコレポンの同時布置図でのそれぞれの座標は、tastyが(-0.494, -0.635)、Butterbeerが(-1.067, -0.674)。● 上記の計算をすると0.955で指標化残差と一致します。● つまり、コレポンの同時布置図上でtastyとButterbeerの内積が指標化残差を表現できていることが分かります。● 内積によって、2つのベクトルがなす角度も定まるので、 同時布置図上でtastyとButterbeerのベクトルがなす角度(原点からの方向)が標準化残差を表している。といえます。res.biplot_symbiplot$rows[1, 1] *res.biplot_symbiplot$cols[1, 1] +res.biplot_symbiplot$rows[1, 2] *res.biplot_symbiplot$cols[1, 2]## [1] 0.9548872
指標化残差を同時布置図で正しく表す条件● 同時布置図を描くには ca::plot.ca()や factoextra::fviz_ca() を使いますが、デフォルトでは指標化残差を角度で正しく表現することができません。● mapオプションで"colprincipal"か"rowprincipal"か"symbiplot"を指定する必要があります。○ "symbiplot"がおすすめ。● なおかつ原点からの矢印を引きけば視覚的に正しく解釈しやすくなります。
まとめ● コレスポンデンス分析は正しく使えばクロス集計表の探索的分析に有効なので、恐れず正しく使いましょう。○ 正しくないコレスポンデンス分析が蔓延しているのも事実なので、解釈に気を付けましょう。○ 原点から各点へ矢印を引いて、方向(角度)の近さで解釈すれば大きく間違えることはないと思います。○ また、別途モザイクプロットなどを併用して値の大きさも確認しましょう。