27.1 Conjoint Analysis
also known as conjoint measurements, which stems from mathematical psychology and psychometrics
Aims:
Willingness to pay: measure what individual are willing to give up to obtain certain product benefits
Distribution of willing to pay : measure how consumer differ
Advantages:
Improves ability to assess customers’ true wants and needs (especially price)
Dissect “everything is important”
Perception vs. preference
Perception (beliefs about the market) is largely homogeneous across customers
Preference (what product they buy) is heterogeneous across customers.
Conjoint analysis is a tool for preference assessment.
Attributes in conjoint:
Not too many attributes
Attributes should be actionable
Need to choose reasonable range of attributes
within range under consideration
All levels should be feasible
Number of attribute levels
Too many can be confusing
Halo effect of number of attributes (or the order of levels)
Number of profiles equal number of dummy variables with the assumption of independence
If you suspect that there might be interaction effect (violation of independence), you can either
use higher-level attribute
increase the number of profiles
Ranking and Rating conjoint analysis are not different Kalish and Nelson (1991)
Basics:
Use orthogonal array (in experimental design) to test combinations where independent contributions of all factors (attributes) are balanced.
Then rank all the reduced combinations in order
Uses:
New product development
Package design
Pricing and brand alternatives
Descriptions of new products or services
Alternative service design
Also organizations as consumers
Outcome variable can be:
Preference
Likelihood to purchase
best value for the money
Convenience of use
Suitability for a specific job
Psychological images (e.g., ruggedness, distinctiveness, conservativeness)
Can be used in conjunction with
factor analysis: firm-level decision variables (attribute/factor), dimension reduction technique
perceptual mapping: multidimensional scaling
cluster analysis: customer-level variables, segmentation technique
Suggested packages (in order of preference):
AlgDesign
conjoint
faisalconjoint
mlogit
conf.design
prefmod
27.1.1 Full-Profile
##
## Call:
## lm(formula = frml)
##
## Residuals:
## 1 2 3 4 5 6 7 8 9 10
## 1.1345 -1.4897 0.3103 -0.2655 0.3103 0.1931 1.5931 -1.4310 -1.4310 1.1207
## 11 12 13
## 0.3690 1.1931 -1.6069
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.3937 0.5439 6.240 0.00155 **
## factor(x$price)1 -1.5172 0.7944 -1.910 0.11440
## factor(x$price)2 -1.1414 0.6889 -1.657 0.15844
## factor(x$variety)1 -0.4747 0.6889 -0.689 0.52141
## factor(x$variety)2 -0.6747 0.6889 -0.979 0.37234
## factor(x$kind)1 0.6586 0.6889 0.956 0.38293
## factor(x$kind)2 -1.5172 0.7944 -1.910 0.11440
## factor(x$aroma)1 0.6293 0.5093 1.236 0.27150
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.78 on 5 degrees of freedom
## Multiple R-squared: 0.8184, Adjusted R-squared: 0.5642
## F-statistic: 3.22 on 7 and 5 DF, p-value: 0.1082
27.1.4 Hybrid
- Combination of Full-Profile and Adaptive
27.1.8 Application
library(conjoint)
Experiment = expand.grid(weight = c("a","b"),
Price = c("Low","High"),
Warranty = c("2","3"),
Battery = c("10","20"))
partial_design = caFactorialDesign(Experiment,type = "orthogonal",seed = 123)
partial_profile = caEncodedDesign(partial_design)
levels <- c("a","b","Low","High","2","3","10","20")
lev.df <- data.frame(levels)
data = c("")
Example by Martin Muller
# Declaration of features and feature values
feature_names <- c("LENGTH", "ILLUSTRATION", "CLAPS")
feature_values <- list()
feature_values[[1]] <- c("2min", "7min", "20min")
feature_values[[2]] <- c("several images", "one image", "no image")
feature_values[[3]] <- c("+500 claps", "less than 500 claps")
# All concept generation
articles <- expand.grid(LENGTH = feature_values[[1]],
ILLUSTRATION = feature_values[[2]],
CLAPS = feature_values[[3]])
library (conjoint)
maxNumberOfArticles = 8
# Selection of relevant concepts
selectedArticles <- caFactorialDesign(data = articles,
type = 'fractional',
cards = maxNumberOfArticles)
# Checking if selected concepts are relevant for study
corrSelectedArticles <- caEncodedDesign(selectedArticles)
#print(cor(corr_design_mails))
print(cor(corrSelectedArticles))
## LENGTH ILLUSTRATION CLAPS
## LENGTH 1.0000000 0 0.1240347
## ILLUSTRATION 0.0000000 1 0.0000000
## CLAPS 0.1240347 0 1.0000000
# List of rates of each article allowing to compare them
ranking = c(7 / 7, 3 / 7, 3 / 7, 5 / 7, 2 / 7, 6 / 7, 3 / 7, 0 / 7)
# Performing conjoint analysis
Conjoint(ranking, selectedArticles, unlist(feature_values))
##
## Call:
## lm(formula = frml)
##
## Residuals:
## 1 2 3 4 5 6 7 8
## -0,03401 -0,02041 0,07483 0,10884 -0,12925 0,05442 -0,07483 0,02041
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0,44898 0,05651 7,945 0,0155 *
## factor(x$LENGTH)1 0,25850 0,07534 3,431 0,0755 .
## factor(x$LENGTH)2 0,06803 0,07534 0,903 0,4619
## factor(x$ILLUSTRATION)1 0,30612 0,07534 4,063 0,0556 .
## factor(x$ILLUSTRATION)2 -0,18367 0,08835 -2,079 0,1732
## factor(x$CLAPS)1 0,02041 0,05651 0,361 0,7526
## ---
## Signif. codes: 0 '***' 0,001 '**' 0,01 '*' 0,05 '.' 0,1 ' ' 1
##
## Residual standard error: 0,1495 on 2 degrees of freedom
## Multiple R-squared: 0,9389, Adjusted R-squared: 0,7863
## F-statistic: 6,151 on 5 and 2 DF, p-value: 0,1457
## [1] "Part worths (utilities) of levels (model parameters for whole sample):"
## levnms utls
## 1 intercept 0,449
## 2 2min 0,2585
## 3 7min 0,068
## 4 20min -0,3265
## 5 several images 0,3061
## 6 one image -0,1837
## 7 no image -0,1224
## 8 +500 claps 0,0204
## 9 less than 500 claps -0,0204
## [1] "Average importance of factors (attributes):"
## [1] 52,44 43,90 3,66
## [1] Sum of average importance: 100
## [1] "Chart of average factors importance"