Rでコンジョイント分析

Rにはコンジョイント分析用のパッケージが無いなー、とずいぶん前から思っていましたがいつの間にやら登録されていたようです。
コンジョイント分析とは何か?についてはアルベルト社の解説が分かりやすいと思います。

install.packages("conjoint") #パッケージのインストール。初回のみ。

library(conjoint) #パッケージの呼び出し。

data(tea) #サンプルデータの呼び出し

# 各プロファイルの表示
# 13プロファイル(4属性(3水準、3水準、3水準、2水準))
print(tprof) # 各プロファイルの表示
#    price variety kind aroma
# 1      3       1    1     1
# 2      1       2    1     1
# 3      2       2    2     1
# 4      2       1    3     1
# 5      3       3    3     1
# 6      2       1    1     2
# 7      3       2    1     2
# 8      2       3    1     2
# 9      3       1    2     2
# 10     1       3    2     2
# 11     1       1    3     2
# 12     2       2    3     2
# 13     3       2    3     2

# 各水準のラベル
print(tlevn)
#        levels
# 1         low
# 2      medium
# 3        high
# 4       black
# 5       green
# 6         red
# 7        bags
# 8  granulated
# 9       leafy
# 10        yes
# 11         no

# 選好マトリクス。数値が大きい方が高評価。
head(tprefm) #100名×13プロファイル
#   profil1 profil2 profil3 profil4 profil5 profil6 profil7 profil8 profil9 profil10 profil11 profil12 profil13
# 1       8       1       1       3       9       2       7       2       2        2        2        3        4
# 2       0      10       3       5       1       4       8       6       2        9        7        5        2
# 3       4      10       3       5       4       1       2       0       0        1        8        9        7
# 4       6       7       4       9       6       3       7       4       8        5        2       10        9
# 5       5       1       7       8       6      10       7      10       6        6        6       10        7
# 6      10       1       1       5       1       0       0       0       0        0        0        1        1

# 分析する。最小二乗法。
# 引数は順に選好マトリクス、プロファイル、水準のラベル
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"


各水準の部分効用値と各属性の寄与率のグラフも同時に出力される。


price


variety


kind


aroma


寄与率


また、結果の分析だけでなくプロファイルの作成もできる。

experiment <- expand.grid(
  price   = c("low", "medium", "high"),
  variety = c("black", "green", "red"),
  kind    = c("bags", "granulated", "leafy"),
  aroma   = c("yes", "no"))
design <- caFactorialDesign(data=experiment, type="orthogonal")
# フルプロファイル法はtype="full"
# 直交計画はtype="orthogonal"
# を指定した計画type="fractional", cards=16
design
#     price variety       kind aroma
# 3    high   black       bags   yes
# 5  medium   green       bags   yes
# 10    low   black granulated   yes
# 17 medium     red granulated   yes
# 22    low   green      leafy   yes
# 27   high     red      leafy   yes
# 34    low     red       bags    no
# 42   high   green granulated    no
# 47 medium   black      leafy    no

# 分析に使うときはこれをさらにコーディングする。
caEncodedDesign(design)
#    price variety kind aroma
# 3      3       1    1     1
# 5      2       2    1     1
# 10     1       1    2     1
# 17     2       3    2     1
# 22     1       2    3     1
# 27     3       3    3     1
# 34     1       3    1     2
# 42     3       2    2     2
# 47     2       1    3     2


ちなみにできたプロファイルの直交性を確認したい時は、プロファイルをコーディングした後、相関係数を見ればよい。

cor(caEncodedDesign(design))
#         price variety kind aroma
# price       1       0    0     0
# variety     0       1    0     0
# kind        0       0    1     0
# aroma       0       0    0     1


他に

  • 回答者ごとの各水準の部分効用値: caPartUtilities(y, x, z)
  • 回答者ごとの各プロファイルの全体効用値: caTotalUtilities(y, x)
  • 上記全体効用値に基づいたクラスタリング(k-means): caSegmentation(y, x, c)
  • コンジョイントシミュレーション手法
    • 最大効用: caMaxUtility(sym, y, x)
    • Bradley-Terry-Luce(BTL): caBTL(sym, y, x)
    • ロジット: caLogit(sym, y, x)

といった関数が実装されています。


評価の無いプロファイルがある場合に対応してないとか、最小二乗法以外の解法が無いとか物足りない点もありますが、けっこう使い勝手が良さそうじゃないですか?これ。


なお、選択型コンジョイント分析(CBC)についてはデータ解析環境Rによる選択型コンジョイント分析入門(PDF注意)を参照されたい。