Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Tokyo.R コレスポンデンス分析の正しい使い方

bob3bob3
March 19, 2022

Tokyo.R コレスポンデンス分析の正しい使い方

マーケティングリサーチ(市場調査)の領域でよく使われるコレスポンデンス分析の正しい使い方の解説です。
クロス集計表の探索的分析に使います。
R言語による分析事例です。
Tokyo.Rでの発表資料です。

bob3bob3

March 19, 2022
Tweet

More Decks by bob3bob3

Other Decks in Science

Transcript

  1. コレスポンデンス分析の
    正しい使い方
    Tokyo.R #97
    2022/03/19
    @bob3bob3

    View Slide

  2. 今回の発表は以下のブログ記事をもとにしています。
    ● なので、詳しくはこれらの記事を参照してください。
    ○ コレスポンデンス分析の同時布置図は本当に使えないのか?
    ○ コレスポンデンス分析の同時布置図は本当に使えないのか?(の続き )
    ○ コレスポンデンス分析の同時布置図は本当に使えないのか?(点と点の距離の話)
    ○ 複数回答(multiple answer, MA)の集計表をコレスポンデンス分析にかけて大丈夫?

    View Slide

  3. コレスポンデンス分析とは?
    ● クロス集計表における項目間の相対的な関係を、視覚的に分かりやすく把握する
    ための手法。
    ● 通称「コレポン」。
    ● 「対応分析」とも呼ばれる。
    ● ブランドのイメージを調査するアンケートの分析などによく使われる。
    ● 項目数が多く、数表では全体の把握が難しい場合に特に有効。
    ● RではMASS::corresp()、ca::ca()、FactoMineR::CA()などで実行可能。

    View Slide

  4. こんなかんじ
    この図をコレスポンデンス分析の 同時布置図と呼
    びます。行と列の情報を同時に置くという意味。
    ノルウェイの犯罪統計( 1984)
    『対応分析入門』より引用
    強盗 詐欺 破壊
    オスロ 395 2456 1758
    中部地域 147 153 916
    北部地域 694 327 1347

    View Slide

  5. どう解釈する?
    ● マクロミル社の解説
    ○ 「関連の強いカテゴリは近くに、弱いカテゴリ
    は遠くにプロットされるが、これはあくまでカテ
    ゴリ間の相対的な関係で、絶対的なボリュー
    ムを表わすものではない。」
    ● クロスマーケティング社の解説
    ○ 「各項目の近くに位置するもの同士に類似性
    があるという読み取りができます。」
    ● なるほど、なるほど……

    View Slide

  6. コレポンをめぐる議論
    ● マーケティングリサーチで使われるコレスポ
    ンデンス分析について調べてみた
    ○ 「コレスポンデンス分析は、それぞれ行得点・
    列得点を算出しているだけで、それらを重ね
    合わせたに過ぎません。 つまり列要素と行要
    素との距離は、数理的に定義されず「近い」
    「似ている」のように解釈できないのです。」
    ○ 「コレスポンデンス分析は行・列をごっちゃにし
    て分析しない。」

    View Slide

  7. コレポンをめぐる議論

    View Slide

  8. どうすりゃいいの???
    ● 結論から言うと、正しく使えば大丈夫。
    ● コレポンの正しい使い方とは???
    ○ コレポンの同時布置図において集計表の行と列の関係は、 原点からの方向の近さ (角度の大きさ)
    で解釈するよ。
    ○ コレポンの同時布置図が表現しようとしているのは割合の残差 であり、残差の大きさは原点から引
    いた各点がなす角度の大きさ として表現されるよ。
    ○ 原点から各点へ矢印を引く と解釈しやすいよ。
    ○ 残差の大きさが角度の大きさとして表される描画方法を使わないとダメ だよ。
    ○ 縦横のスケールは合わせないとダメ だよ。
    ○ コレポンは実数の大きさには関心がないよ。実数の大きさはモザイクプロットなどで確認してね。
    ○ 縦横の軸の意味を解釈しようとするのはダメだよ。
    ○ 点と点の距離で関係の強さを解釈しようとするのはダメだよ。

    View Slide

  9. サンプルデータ
    ● Correspondence Analysis: What is it, and
    how can I use it to measure my Brand? よ
    り引用。
    Tasty Aesthetic Economic
    Butterbeer 5 7 2
    Squishee 18 46 20
    Slurm 19 29 39
    Fizzy Lifting Drink 12 40 49
    Brawndo 3 7 16
    dat <- 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")))

    View Slide

  10. とりあえずコレポン 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

    View Slide

  11. 残差
    ● コレポンで知りたいのはクロス集計表の項目
    間の関係。
    ● 表頭と表側の項目間の関係は 残差として現
    れる。
    ● 残差とは実測値と期待値の差 。
    ● 期待値とは行と列の各項目間に関係がない
    と仮定した場合の各セルの値。 行周辺確率
    分布と行周辺確率分布をかけ合わせた値。
    ● 残差の絶対値が大きいと、行と列の項目間
    に何らかの関係がありそう、ということになり
    ます。
    ● ここではそれらを割合をベースに計算しま
    す。
    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

    View Slide

  12. 指標化残差
    ● 生の残差は各カテゴリの度数に左右される
    ため、期待値で割って正規化します。
    ● これを指標化残差(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

    View Slide

  13. コレポンにおける指標化残差の表現
    ● コレポンの同時布置図において、行の点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

    View Slide

  14. 指標化残差を同時布置図で正しく表す条件
    ● 同時布置図を描くには ca::plot.ca()
    や factoextra::fviz_ca() を使います
    が、デフォルトでは指標化残差を角度
    で正しく表現することができません。
    ● mapオプションで"colprincipal"
    か"rowprincipal"か"symbiplot"を
    指定する必要があります。
    ○ "symbiplot"がおすすめ。
    ● なおかつ原点からの矢印を引きけば
    視覚的に正しく解釈しやすくなります。

    View Slide

  15. まとめ
    ● コレスポンデンス分析は正しく使えばクロス集計表の探索的分析に有効なので、恐
    れず正しく使いましょう。
    ○ 正しくないコレスポンデンス分析が蔓延しているのも事実なので、解釈に気を付けましょう。
    ○ 原点から各点へ矢印を引いて、方向(角度)の近さで解釈すれば大きく間違えることはないと思いま
    す。
    ○ また、別途モザイクプロットなどを併用して値の大きさも確認しましょう。

    View Slide