Baron (1996) writes:
Scores on a multi-scale measure are ipsative when raw scale scores sum to a constant for any individual.
An ipsative score can be thought of as the normative equivalent controlled for overall total score across scales.
Meade (2004) describes perhaps the most common form of ipsatisation based on normative scores as "deviational ipsative" (Radcliffe, 1963):
normative data (e.g., Likert scales) can be made to be ipsative by simply subtracting the grand mean of each individual’s scale scores (averaged across all scales) from each of his or her individual scale scores (i.e., ipsatized data, Cattell, 1944; additive ipsative data (AID), Chan & Bentler, 1993);
But it seems that there are range of other ways to create ipsative scores (i.e., that satisfy the formal requirement).
- The above substraction method can also involve dividing by the within-person population standard deviation.
- Save the residuals of a regression model predicting each scale from the mean of all scales
I ran quick comparison on some personality data and it seemed like the residual regression and the deviation approach achieved very similar results (see R code at the bottom of post. Thus, it makes sense that the simpler to calculate deviation approach is often applied.
References
- Radcliffe, J. A. (1963). Some properties of ipsative score matrices and their relevance for some current interest tests. Australian Journal of Psychology, 15(1), 1-11.
- Meade, A.W. (2004). Psychometric problems and issues involved with creating and using ipsative measures for selection. Journal of Occupational and Organizational Psychology (2004), 77, 531–552.
- Baron, H. (1996). Strengths and limitations of ipsative measurement. Journal of Occupational and Organizational Psychology, 69(1), 49-56.
R code
> # load some personality data
> library(psych)
> data(bfi)
> scales <- c("a1", "a2", "a3")
> names(bfi) <- tolower(names(bfi))
> bfi <- bfi[,scales]
> bfi <- na.omit(bfi)
> head(bfi)
a1 a2 a3
61617 2 4 3
61618 2 4 5
61620 5 4 5
61621 4 4 6
61622 2 3 3
61623 6 6 5
> # calculate overall mean
> bfi$omean <- apply(bfi[,scales], 1, mean)
> # calculate ipsative scores based regression residuals
> bfi$res_a1 <- resid(lm(a1 ~ omean, bfi))
> bfi$res_a2 <- resid(lm(a2 ~ omean, bfi))
> bfi$res_a3 <- resid(lm(a3 ~ omean,bfi))
> # calculate devaiation ipsative scores
> bfi$dev_a1 <- bfi$a1 - bfi$omean
> bfi$dev_a2 <- bfi$a2 - bfi$omean
> bfi$dev_a3 <- bfi$a3 - bfi$omean
> # check that both satisfy ipsatisation requirement
> all(round(apply(bfi[,paste0("res_", scales)], 1, sum), 6) == 0)
[1] TRUE
> all(round(apply(bfi[,paste0("dev_", scales)], 1, sum), 6) == 0)
[1] TRUE
> # Examine similarities between approaches (see diagonal)
> round(cor(bfi[paste0("res_", scales)], bfi[paste0("dev_", scales)]), 3)
dev_a1 dev_a2 dev_a3
res_a1 0.981 -0.729 -0.711
res_a2 -0.716 0.999 0.065
res_a3 -0.718 0.067 0.971