Signature
b_k = Rbar_1 - Rbar_0
| Inputs | Definition | Unit |
|---|---|---|
Rbar_1 | Average rating of the profiles in which attribute k takes its coded level (dummy equal to 1) | rating points |
Rbar_0 | Average rating of the profiles in which attribute k takes its reference level (dummy equal to 0) | rating points |
b_k | Change in predicted rating when attribute k moves from its reference level to its coded level, the others held fixed | rating points |
|---|
Function
Decomposition of whole-profile ratings into attribute part-worths in conjoint analysis
Maps a respondent's ratings of profiles, each described by levels of several attributes, to a part-worth for each level under an additive model, so that a profile's value is the intercept plus the part-worths of its levels. One level of each attribute is the reference, with a part-worth of zero. Relative importance and trade-offs between attributes follow from the part-worths. The notation follows the Conjoint Analysis article, whose outpatient clinic example is used throughout.
Computational function
Computational function: least-squares part-worths, fit and relative importance from a ratings design
Fits the additive part-worth model to one respondent's ratings by least squares on dummy-coded attributes for any design, balanced or not, and returns the intercept and part-worths, R squared, each attribute's range and its relative importance (HE-FM-CJA-003). The inputs differ from the formula's: a design matrix and a vector of ratings instead of two mean ratings.
Inputs and outputs:
X: Matrix of 0 and 1 dummy codes, one row per profile and one column per non-reference level; required. Unit: none.;y: Ratings of the profiles; required. Unit: rating points.;attr: Attribute name for each column of X; required. Unit: label.;beta: Intercept followed by the part-worths. Unit: rating points.;R2: Share of rating variation explained. Unit: proportion.;range: Largest minus smallest part-worth of each attribute, the reference level counting as 0. Unit: rating points.;RI: Range of each attribute divided by the sum of ranges. Unit: proportion.Assumption: Ratings on an interval scale, an additive model without interactions and at least as many profiles as parameters; with several respondents the model is fitted per respondent or to pooled data with stated weights.
Worked example (Outpatient clinic, article example): Eight profiles coded for a 12-week wait, a local clinic and a nurse lead, rated 6, 3, 8, 4, 5, 2, 6 and 4, give an intercept of 6.00, part-worths of minus 3.00, 1.50 and minus 1.00, R squared of 0.9608 and relative importances of 0.5455, 0.2727 and 0.1818.
X = [[0,0,0], [1,0,0], [0,1,0], [1,1,0], [0,0,1], [1,0,1], [0,1,1], [1,1,1]]; y = [6, 3, 8, 4, 5, 2, 6, 4]; beta = [6, -3, 1.5, -1]; R2 = 0.9608; RI = [0.5455, 0.2727, 0.1818]Worked example (Seven profiles, design unbalanced): Dropping profile 8 gives an intercept of 6.25 and part-worths of minus 3.25, 1.25 and minus 1.25, R squared of 0.9799 and importances of 0.5652, 0.2174 and 0.2174, while the mean differences for location and lead would be 2.00 and minus 0.92 (computed here for illustration).
beta = [6.25, -3.25, 1.25, -1.25]; R2 = 0.9799Excel: With the ratings in Ratings and the dummy codes in an eight-by-three range AttributeCodes,
=LINEST(Ratings,AttributeCodes,TRUE,TRUE)returns the part-worths in reverse column order with the intercept last in the first row, and R squared in the first cell of the third row:=INDEX(LINEST(Ratings,AttributeCodes,TRUE,TRUE),3,1).R:
partworths <- function(X, y, attr) { fit <- lm.fit(cbind(1, as.matrix(X)), y); b <- fit$coefficients; R2 <- 1-sum(fit$residuals^2)/sum((y-mean(y))^2); rng <- tapply(b[-1], factor(attr, levels = unique(attr)), function(v) max(0, v)-min(0, v)); list(beta = b, R2 = R2, range = rng, RI = rng/sum(rng)) }Base R only; withX <- cbind(W = c(0,1,0,1,0,1,0,1), L = c(0,0,1,1,0,0,1,1), N = c(0,0,0,0,1,1,1,1))andy <- c(6,3,8,4,5,2,6,4),partworths(X, y, c("wait", "location", "lead"))returns the first example's values.Python:
def partworths(X, y, attr): Z = np.column_stack([np.ones(len(y)), np.asarray(X, float)]); y = np.asarray(y, float); b = np.linalg.lstsq(Z, y, rcond=None)[0]; r = y-Z@b; R2 = 1-r@r/((y-y.mean())@(y-y.mean())); rng = {k: max(0, *b[1:][np.array(attr) == k])-min(0, *b[1:][np.array(attr) == k]) for k in dict.fromkeys(attr)}; return {"beta": b, "R2": R2, "range": rng, "RI": {k: v/sum(rng.values()) for k, v in rng.items()}}Needsimport numpy as np; returns the same values as the R function, with X as a list of rows.Test (Fitted ratings average to the mean rating): With an intercept, least-squares residuals add to zero, so the fitted ratings average 4.75 in the example. Expected result: TRUE. Excel check, with the fitted ratings in Fitted:
=ABS(AVERAGE(Fitted)-AVERAGE(Ratings))<1E-9Test (Relative importances add to one): The importances of all attributes add to 1. Expected result: TRUE. Excel check, with the importances in Importances:
=ABS(SUM(Importances)-1)<1E-9Common error (More parameters than profiles): Regression needs at least as many profiles as parameters; three two-level attributes need four, and the eight-profile example leaves only four degrees of freedom, so real studies use more profiles per respondent or pool respondents.
Source: Hauser JR, Rao VR. Conjoint analysis, related modeling, and applications. In: Wind Y, Green PE, eds. Marketing Research and Modeling: Progress and Prospects. Boston, MA: Springer; 2004:141-168. doi:10.1007/978-0-387-28692-1_7 (read as the MIT open-access pre-publication version). Section Regression-Based Methods (dummy variables and ordinary least squares for interval ratings; at least as many observations as parameters); Green PE, Srinivasan V. Conjoint analysis in marketing: new developments with implications for research and practice. Journal of Marketing. 1990;54(4):3-19. doi:10.1177/002224299005400402. Table 1 (metric estimation by multiple regression).
beta = (Z'Z)^(-1) Z'y with Z = [1, X]; R2 = 1 - sum(r^2) / sum((y - mean(y))^2); range_k = max(0, beta_k) - min(0, beta_k); RI_k = range_k / sum(range)
Try this function
Implementations
Excel
Part-worth from mean ratings with AVERAGEIF
With the ratings in Ratings and the attribute's 0 and 1 codes in WaitCode, the formula returns the part-worth, held in PartWorthWait; the same formula on LocalCode and NurseCode gives PartWorthLocal and PartWorthNurse, and the intercept, held in Intercept, is the predicted rating of the reference profile, =INDEX(LINEST(Ratings,AttributeCodes),1,4), the last value LINEST returns; it is not that profile's observed rating, which equals it here only by chance. =LINEST(Ratings,AttributeCodes) fits all attributes at once and returns the coefficients in reverse column order, intercept last.
=AVERAGEIF(WaitCode,1,Ratings)-AVERAGEIF(WaitCode,0,Ratings)
Assumptions
Ratings treated as an interval scale in a ratings-based conjoint study
Differences between ratings mean the same anywhere on the scale, which justifies least-squares estimation; with only ordinal judgements a nonmetric method is used instead.
Balanced orthogonal design for the mean-difference part-worth
Levels and pairs of levels appear equally often, as in the eight-profile full factorial or an orthogonal fraction, so the attribute codes are uncorrelated and each mean difference equals the regression coefficient.
Additive part-worths without interactions
The trade-off between two attributes does not depend on the levels of the others (preferential independence); a main-effects design assumes this and cannot estimate interactions.
Worked examples
Waiting time part-worth in the outpatient clinic example
The four 12-week profiles average (3 + 4 + 2 + 4) / 4, or 3.25, and the four 4-week profiles (6 + 8 + 5 + 6) / 4, or 6.25, so the 12-week part-worth is minus 3.00, as in the article.
Rbar_1 = 3.25; Rbar_0 = 6.25; b_k = -3
Local clinic part-worth in the outpatient clinic example
Local profiles average 5.50 and hospital profiles 4.00, so the local part-worth is plus 1.50, as in the article.
Rbar_1 = 5.5; Rbar_0 = 4; b_k = 1.5
Nurse-led clinic part-worth in the outpatient clinic example
Nurse-led profiles average 4.25 and consultant-led profiles 5.25, so the nurse-led part-worth is minus 1.00, as in the article.
Rbar_1 = 4.25; Rbar_0 = 5.25; b_k = -1
Common errors
Using mean differences when profiles are missing
If profile 8 is dropped, the mean difference for a local clinic becomes 2.00 while least squares on the seven profiles gives 1.25 (computed here for illustration); unbalanced designs need the regression.
Comparing part-worths across attributes without their reference levels
A part-worth is relative to its attribute's reference level; the nurse-led value of minus 1.00 says a consultant lead is worth 1.00 more, not that nurse-led care has negative value.
Sources
Part-worths from dummy variables by least squares when ratings are interval
Hauser JR, Rao VR. Conjoint analysis, related modeling, and applications. In: Wind Y, Green PE, eds. Marketing Research and Modeling: Progress and Prospects. Boston, MA: Springer; 2004:141-168. doi:10.1007/978-0-387-28692-1_7 (read as the MIT open-access pre-publication version). Section Regression-Based Methods: if the preference judgement is an approximately interval scale, the part-worths can be represented by dummy variables and ordinary least-squares regression is a natural means to estimate them; if the data are only monotonic a stress criterion replaces least squares; regression requires at least as many observations as parameters. Section Have Mercy on the Respondents: an orthogonal design implicitly assumes preferential independence and does not allow any interactions to be estimated.
Part-worth function model estimated by multiple regression
Green PE, Srinivasan V. Conjoint analysis in marketing: new developments with implications for research and practice. Journal of Marketing. 1990;54(4):3-19. doi:10.1177/002224299005400402. Section Preference Models and Table 1: the part-worth function model (piecewise linear) is the most general of the vector, ideal point and part-worth models and estimates the most parameters; estimation methods include metric methods (multiple regression), nonmetric methods (LINMAP, MONANOVA) and choice-probability methods (logit, probit).
Canonical Identity
Stable URI · Machine-readable · Resolvable · CC BY 4.0