Learn R Programming

MLCM (version 0.0-2)

mlcm: Fit Conjoint Measurement Models by Maximum Likelihood

Description

Generic function mlcm uses different methods to fit the results of a conjoint measurement experiment using glm (Generalized Linear Model). The default method (currently, the only one) permits fitting the data with a choice of 3 different models.

Usage

mlcm(x, ...)

## S3 method for class 'default': mlcm(x, model = "add", whichdim = NULL, lnk = "probit", control = glm.control(maxit = 50000, epsilon = 1e-14), ... )

Arguments

x
a data frame of an odd number of columns (at least 5). The first is logical or a 2-level factor named Resp indicating the response of the observer. The next columns give the indices in pairs along each dimension for each of the two stimuli
model
character indicating which of three conjoint measurement models to fit to the data: add, for additive (default), ind, for independence or full, for including a dependence with the levels of each dimensio
whichdim
integer indicating which dimension of the data set to fit when the independence model is chosen
lnk
character indicating the link function to use with the binomial family. Current default is the probit link.
control
information to control the fit. See glm and glm.control.
...
additional arguments passed to glm.

Value

  • a list of class mlcm with the following components:
  • pscalea vector or matrix giving the perceptual scale value estimates
  • sigmanumeric indicating judgment $\sigma$, currently always set to 1
  • NumDimnumeric indicating number of stimulus dimensions in data set
  • NumLevnumeric indicating the number of levels along both dimensions, currently assumed to be the same
  • modelcharacter indicating which of the 3 models were fit
  • linkcharacter indicating the link used for the binomial family with glm
  • objthe glm object

Details

In a conjoint measurement experiment, observers are presented with pairs of stimuli that vary along 2 or more dimensions. The observer's task is to choose which stimulus of the pair is greater along one of the dimensions. Over a large number of trials, mlcm estimates numbers,

$$\psi_1, ..., \psi_p, \psi'_1, ..., \psi'_q, ...$$,

by maximum likelihood using glm that best predict the observer's judgments.

The function permits the estimation of 3 different models, independent, additive (the default) and full, by specifying the model argument. The independent model fits the data along only 1 dimension, specified by the whichdim argument. The additive model fits all dimensions with each fixed at 0 at the lowest level on each dimension. Thus, if there are $n$ dimensions each with $p_i$ levels, mlcm estimates $\sum p_i - n$ coefficients.

Specifying the full model will fit a saturated model in which an estimate will be made for each combination of the scale values except the lowest (0 on all scales). Currently, this option only allows 2 dimensions to be fit.

References

Luce, R. D., and Tukey, J. W. (1964). Simultaneous conjoint measurement. Journal of Mathematical Psychology, 1, 1--27. Krantz, D. H., Luce, R. D., Suppes, P., and Tversky, A. (1971). Foundations of Measurement, Vol. 1: Additive and Polynomial Representations. New York: Academic Press. Ho, Y. H., Landy. M. S. and Maloney, L. T. (2008). Conjoint measurement of gloss and surface texture. Psychological Science, 19, 196--204.

See Also

glm

Examples

Run this code
# Additive model
bg.add <- mlcm(BumpyGlossy)
plot(bg.add, type = "b")

# Independence model for Bumpiness
bg.ind <- mlcm(BumpyGlossy, model = "ind", whichdim = 2)

anova(bg.ind, bg.add, test = "Chisq")

# Full model
bg.full <- mlcm(BumpyGlossy, model = "full")

anova(bg.add, bg.full, test = "Chisq")

# Compare additive and full model graphically
plot(bg.full, standard.scale = TRUE, type = "b", 
	lty = 2, ylim = c(0, 1.05),
	xlab = "Gloss Level",
	ylab = "Bumpiness Model Estimates")
# additive prediction
bg.pr <- with(bg.add, outer(pscale[, 1], pscale[, 2], "+"))
# predictions are same for arbitrary scaling,
#  so we adjust additive predictions to best fit
#  those from the full model by a scale factor.
cf <- coef(lm(as.vector(bg.full$pscale/bg.full$pscale[5, 5]) ~ 
	as.vector(bg.pr) - 1))
matplot(cf * bg.pr, type = "b", add = TRUE, lty = 1)

Run the code above in your browser using DataLab