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

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

Avatar for bob3bob3 bob3bob3
July 13, 2024

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

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

Avatar for bob3bob3

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 = "属性" )