Calculating Scale Scores for Psychological Tests

[This article was first published on Jeromy Anglim's Blog: Psychology and Statistics, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

This post discusses how to calculate scale scores for multi-item scales. A lot of psychological research uses multi-item scales (e.g., personality tests, symptoms check lists, surveys, etc.). This post focuses on the issues involved with computing these scale scores.

This post complements a previous post that looked at computing composites within the context of ability tests.

This post assumes that you: (a) know which items combine to form the scale; (b) know which items should be reversed; (c) want to produce a summative scale.

Initial points:
To sum or to mean?
A summative scale is one where the resulting scale score for an individual is the sum of the individual item scores. For example, if you had three items on self-esteem scale, total self esteem would be item1 + item2 + item3. The mean of individual item scores is perfectly correlated with the sum of the item scores. Thus, for correlations and regressions it makes no difference whether you use the mean or sum of items. I prefer to use the mean of item scores because the interpretation of a mean is clearer than a sum (e.g., telling a manager that the mean satisfaction of a particular employee was 1.3 on a 1 (highly dissatisfied) to 5 (highly satisfied) scale with 7 items seems clearer than telling them that the employee’s score was 9 out of 35). However, there are fewer issues with rounding with sum scores, which can sometimes make sum scores easier to work with particularly when working with norm tables. There may also be a convention in the literature about how a scale is scored.

Item Reversal
Scales often have items that are negatively worded (e.g., “I don’t like being around people” is a negatively worded measure of extraversion). Thus, in order to include a negatively worded item it is necessary to reverse it. Reversal is done using this formula
e.g., if you had a five point scale coded 1 to 5, then after reversal 5 should become 1, 4 should become 2, 3 should stay the same and so on.
5 = (5 + 1) – 1
4 = (5 + 1) – 2
3 = (5 + 1) – 3
2 = (5 + 1) – 4
1 = (5 + 1) – 5

Missing data:
Missing data needs to be thought about when computing scales. A participant may be missing data on all items or on just a subset. A decision needs to be made about what to do in both cases.
Options include:
(a) a participant with any missing item gets a missing total
(b) a threshold is set, such that participants with a certain threshold number of items get a total.

What total can you give to a participant with some missing items?
Approaches differ in what values are imputed for the missing data and whether this is done explicitly or implicitly.
Some approaches include:
(a) Imputing the participant’s mean response on items they have .
(b) Imputing the item’s mean of the missing item.
(c) imputing based on a range of other more sophisticated approaches such as the EM algorithm.

The best advice is to avoid obtaining missing data in the first place. Computerised test administration can help in this regard by requiring a response to every item (it ethics allows this).

The example is based on a three item scale with all positively worded items.
If you did want to reverse an item in SPSS it might look like this:

*reversing an item.
COMPUTE item1Reversed = 6 - item1.
see the the bottom of this post for a more complete item reversal example in SPSS.

Implementing in SPSS
*returns the sum.
compute attitudeMasteryApproachTotal = attitude3 + attitude6 + attitude8.
compute attitudeMasteryApproachTotal = SUM(attitude3, attitude6, attitude8). 
compute attitudeMasteryApproachTotal = SUM.3(attitude3, attitude6, attitude8).
compute attitudeMasteryApproachTotal = MEAN.2(attitude3, attitude6, attitude8) * 3.

*returns the mean.
compute attitudeMasteryApproachTotal = (attitude3 + attitude6 + attitude8) / 3.
compute attitudeMasteryApproachTotal = MEAN(attitude3, attitude6, attitude8).
compute attitudeMasteryApproachTotal = MEAN.3(attitude3, attitude6, attitude8).

Each of the above examples can be used to calculate a scale score of items 3, 6 and 8. The SUM function is generally a bad idea as it will return a sum for people with missing data. The functions involving the mean are simple to implement. The 3 after the SUM and MEAN functions specifies that a participant must have data available for at least 3 of the 3 items in order to return a non-missing value. If you have missing data, you may wish to read this tutorial from UCLA.

Implementing in R
check out the score.items function in the psych package in R.
Here’s the above example assuming that the data frame is stored in a variable called “x”:

items <- c("attitude3", "attitude6", "attitude8")
scaleKey <- c(1,1,1)
results <- score.items(keys = scaleKey, items = x[items], 
  totals = FALSE, missing = FALSE, min = 1, 
                max = 7)

results # Print the results (i.e., reliability and more)
results$score # Extract the actual total score

Additional useful features of the function:
  • The function can also handle item reversal internally by specifying -1 in the key. A 0 can be used to represent items that are not used.
  • it can compute multiple scale scores at once on a set of items
  • it can impute the mean or median
  • if the totals argument equals TRUE, the function returns the sum, as opposed to the mean.
  • The additional information on reliability and correlations between scales that is returned by the function is relevant both to characterising the scale and checking that it was formed correctly.

Additional Resources:

And Here's an example of SPSS Syntax for when a large number of items need to be reversed before computing scale scores.

  • The example is a 50 item personality test with five factors and which has many items requiring reversal.
  • The variable xMultiplier stores whether the item should be reversed. Items are consecutive list of 1s and -1s. A 1 indicates that the item should NOT be reversed. A -1 indicates that the item should be reversed.
  • The raw variables for the items are called ipip1 to ipip50
  • The new set of variables are called ipipReversed1 to ipipReversed50. These variables will store the new values for the items after reversal. If the item does not need to be reversed, the item will simply be a copy. This tends to be a more manageable solution than simply creating copies of reversed items
  • The reversed set of items is also suitable for inclusion in a reliability analysis (for more information, see the section of this post on reliability analysis).
To modify this syntax to apply to your own example, the following things would need to be changed:
  • ipip1 to ipip50 would need to be the first and last variable of your data. ipipReversed1 to ipipReversed50 would need to be the names of the new reversed set of items, and the sequence of 1s and -1s would need to indicate whether an item needs to be reversed or not. If you did not have a 5 point Likert scale, the code 6 - x, would need to be changed. The subsequent compute syntax would also need to be changed to represent your scale names and the the items that are in each scale.

DO REPEAT x = ipip1 to ipip50 /
     xReversed = ipipReversed1 to ipipReversed50 /
  xMultiplier = 1 -1 1 -1 1 -1 1 -1 1 -1 
                1 -1 1 -1 1 -1 1 -1 1 -1 
                1 -1 1 -1 1 -1 1 -1 -1 -1 
                1 -1 1 -1 1 -1 1 -1 -1 1 
                1 1 1 -1 1 -1 1 1 -1 1.
compute xReversed = x.
if (xMultiplier = -1) xReversed = 6 - x.

*compute mean scores.
COMPUTE ipipReversedExtraversionMean = mean(ipipReversed1, ipipReversed6, ipipReversed11, ipipReversed16, ipipReversed21, ipipReversed26, ipipReversed31, ipipReversed36, ipipReversed41, ipipReversed46).
COMPUTE ipipReversedEmotionalStabilityMean = mean(ipipReversed4, ipipReversed9, ipipReversed14, ipipReversed19, ipipReversed24, ipipReversed29, ipipReversed34, ipipReversed39, ipipReversed44, ipipReversed49).
COMPUTE ipipReversedAgreeablenessMean = mean(ipipReversed2, ipipReversed7, ipipReversed12, ipipReversed17, ipipReversed22, ipipReversed27, ipipReversed32, ipipReversed37, ipipReversed42, ipipReversed47).
COMPUTE ipipReversedConscientiousnessMean = mean(ipipReversed3, ipipReversed8, ipipReversed13, ipipReversed18, ipipReversed23, ipipReversed28, ipipReversed33, ipipReversed38, ipipReversed43, ipipReversed48).
COMPUTE ipipReversedOpennessMean = mean(ipipReversed5, ipipReversed10, ipipReversed15, ipipReversed20, ipipReversed25, ipipReversed30, ipipReversed35, ipipReversed40, ipipReversed45, ipipReversed50).

To leave a comment for the author, please follow the link and comment on their blog: Jeromy Anglim's Blog: Psychology and Statistics. offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)