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

Rでコンジョイント分析 2024年版

bob3bob3
July 13, 2024

Rでコンジョイント分析 2024年版

Rでコンジョイント分析 2024年版

bob3bob3

July 13, 2024
Tweet

More Decks by bob3bob3

Other Decks in Business

Transcript

  1. mosaicplot() penguins |> mosaicplot( ~ species + island, data =

    _, color = TRUE, main = "mosaicplot()" )
  2. ggmosaic::geom_mosaic() library(ggplot2) library(ggmosaic) penguins |> ggplot() + geom_mosaic( aes( x

    = product(species, island), fill = species ) ) + labs( x="island", y="species", title = "ggmosaic::geom_mosaic()" ) + coord_equal() + coord_flip()
  3. 商品やサービスを要素に分解とは? • 本格デジカメの構成要素、8属性、各2水準。 ◦ レンズ 〔交換式/固定〕 ◦ ミラーの有無〔一眼レフ/ミラーレス〕 ◦ 本体の色

    〔黒/黄色〕 ◦ センサーサイズ 〔フルサイズ/APS-C〕 ◦ HDR機能 〔有り/無し〕 ◦ 電子水準器 〔有り/無し〕 ◦ 動画撮影 〔有り/無し〕 ◦ WiFi 〔有/無〕 • 弁当[主食/主菜の量/主菜/副菜/価格] • パソコン[OS/CPU/メモリ/ストレージ/メーカー/価格] • 賃貸住宅[駐車場/駅距離/収納/風呂/セキュリティ/間取り/家賃]
  4. そこで直交計画 • 実験計画法の世界で生まれた実験の回 数を少なくするテクニック。
 ◦ 直交表と呼ばれる「どの属性でも全ての要 素が同じ数だけ出現する、すべて異なる組 み合わせの表」を使う。
 ◦ 直交表は各列間の相関係数がゼロにな

    る。
 ◦ L8直交表なら全組み合わせで128通りの実 験が必要なところが8通りの実験で済む (交互作用を考えない場合)。 
 ◦ それでも実験数が減らせない場合、直交性 を妥協して実験数を減らす場合もある。 
 • 面倒臭いからここはRに任せたい。
 詳しくは第22回Tokyo.Rでの @itoyan さん の発表 資料を参照してください。 「Rで実験計画法(後編)」 http://www.slideshare.net/itoyan110/r14261638
  5. アンケートでの質問形式 • 評定型 ◦ 順位付け「1位からn位まで順位を付けてください」 ◦ 評点評価「10点満点で点数を付けてください」 ◦ 分析には回帰分析を使う。 •

    選択型 ◦ 「(2つのプロファイルを呈示して) 1つ選んでください」 ◦ 分析には条件付きロジット分析(多項ロジット)を使う。
  6. conjointパッケージで評定型コンジョイント分析 library(conjoint) # 属性と水準の指定 full_set <- expand.grid( レンズ = c("交換式",

    "固定"), ミラー = c("一眼レフ", "ミラーレス"), 本体の色 = c("黒", "黄色"), センサーサイズ = c("APS-C", "マイクロフォーサーズ "), HDR機能 = c("無し", "有り"), 電子水準器 = c("無し", "有り"), 動画撮影 = c("無し", "有り"), WiFi = c("無し", "有り") ) # 直交計画によるプロファイル生成 design <- caFactorialDesign(full_set, type="orthogonal")
  7. conjointパッケージで評定型コンジョイント分析 • conjoinパッケージに入っているお茶の調査データを分析 ◦ 属性と水準と組み合わせ ▪ price:3水準(low, medium, high) ▪

    variety:3水準(black, green, red) ▪ kind:3水準(bags, granulated, leafy) ▪ aroma:2水準(yes, no) ◦ 100名に13通りの組み合わせを 10点満点で評価させたデータ。
  8. conjointパッケージで評定型コンジョイント分析 # Conjoint(評価のマトリクス , コード化されたプロファイル , 各水準のラベル ) Conjoint(tprefm, tprof,

    tlevn) # [1] "Part worths (utilities) of levels (model parameters for whole sample):" # levnms utls # 1 intercept 3,5534 # 2 low 0,2402 # 3 medium -0,1431 # 4 high -0,0971 # 5 black 0,6149 # 6 green 0,0349 # 7 red -0,6498 # 8 bags 0,1369 # 9 granulated -0,8898 # 10 leafy 0,7529 # 11 yes 0,4108 # 12 no -0,4108 # [1] "Average importance of factors (attributes):" # [1] 24,76 32,22 27,15 15,88 # [1] Sum of average importance: 100,01 # [1] "Chart of average factors importance" 効用値 重要度
  9. cbcToolsパッケージで選択型コンジョイント分析 # remotes::install_github("jhelvy/cbcTools") library(cbcTools) #選択型コンジョイント分析 # 属性と水準の指定 profiles <- cbc_profiles(

    レンズ = c("交換式", "固定"), ミラー = c("一眼レフ", "ミラーレス"), 本体の色 = c("黒", "黄色"), センサーサイズ = c("APS-C", "マイクロフォーサーズ "), HDR機能 = c("無し", "有り"), 電子水準器 = c("無し", "有り"), 動画撮影 = c("無し", "有り"), WiFi = c("無し", "有り") ) #プロファイルの生成 set.seed(123) design <- cbc_design( profiles = profiles, # 調査対象者数 n_resp = 100, # 1問あたりの選択肢数。「どれも選ばない」は除く n_alts = 2, # 調査対象者あたり質問数 n_q = 6, # 「どれも選ばない」を含める no_choice = FALSE, # 実験計画の生成方法 method = "orthogonal" )
  10. cbcToolsパッケージで選択型コンジョイント分析 # 効用値の推定 power <- cbc_power( data = data, pars

    = c( "レンズ", "ミラー", "本体の色", "センサーサイズ", "HDR機能", "電子水準器", "動画撮影", "WiFi" ), outcome = "choice", #回答カラム名 obsID = "obsID", #通し質問ID名 nbreaks = 1, #全体なら1 n_q = 6 #調査対象者1名あたりの質問数 ) # ダミー変数化でdropされた水準の効用値を計算 res <- power |> bind_rows( data.frame( samplesize = rep(100, 8), coef = str_replace_all( power$coef, pattern="1", replacement="2"), est = 0 - power$est, se = power$se ) ) |> mutate( pars = str_remove_all(coef, pattern="1|2") )
  11. cbcToolsパッケージで選択型コンジョイント分析 # 効用値の可視化 library(tidyverse) res |> ggplot(aes( x = est,

    y = coef, group = pars, fill = pars )) + geom_col() + labs( x = "効用値", y = "水準", fill = "属性" )