Answer

POMP scores vs standardized mean differences: when is POMP a sound way to combine scales?

Inspired by a question on Cross Validated ·

effect sizenormalization

The short answer

POMP rescales each instrument to 0-100 using its possible minimum and maximum; an SMD divides by the sample's observed SD. POMP is sound when the scales' end points mean the same thing and people use their ranges similarly. The SMD is sound when samples are about equally varied. Each fails where the other holds up, so checking both is a good defence.

The short answer

Yes, POMP can be defensible, but only under a specific assumption, and that assumption is different from the one behind a standardized mean difference (SMD). Neither metric is assumption-free. When studies use different questionnaires for the same outcome, every method of putting them on a common scale has to borrow a yardstick from somewhere. POMP borrows it from the instrument (its possible range). The SMD borrows it from the sample (its observed standard deviation).

POMP, short for percent of maximum possible, was proposed by Cohen, Cohen, Aiken and West in 1999. The transformation is simple: POMP = 100 × (score − lowest possible score) / (highest possible score − lowest possible score). A 4 on a 0-10 pain rating becomes 40; a 20 on a 0-50 questionnaire also becomes 40. A treatment effect is then a difference in POMP points, which reads as "percentage points of the scale's full range".

What each metric quietly assumes

The concern that one scale might have a mean near 3 out of 10 with a wide SD while another sits near 5 out of 10 with a narrow SD is exactly the case where POMP is risky. It is equally a case where the SMD is risky, unless you know that the difference in SDs comes from the instruments rather than from the people studied. A sample SD cannot tell those two explanations apart.

A simulation where each metric fails

The code builds two scenarios with 2,000 people per group. In the first, two studies use the same 0-10 pain scale and the treatment lowers pain by the same 1.5 points, but study A has a varied sample (SD 2) and study B a homogeneous one (SD 1). In the second, the same people complete two instruments that measure the same underlying pain: scale X (0-10) spreads people widely, while scale Y (0-50) uses only a narrow band in the middle of its range.

R

set.seed(2026)
n <- 2000  # per group, large so the pattern is not sampling noise

# POMP: rescale a score to 0-100 using the instrument's possible min and max
pomp <- function(x, lo, hi) 100 * (x - lo) / (hi - lo)
smd  <- function(t, c) {  # Cohen's d with pooled SD
  sp <- sqrt(((length(t) - 1) * var(t) + (length(c) - 1) * var(c)) /
             (length(t) + length(c) - 2))
  (mean(c) - mean(t)) / sp  # positive = treatment lowers pain
}
summ <- function(label, t, c, lo, hi)
  cat(sprintf("%-26s POMP diff = %5.1f   d = %4.2f\n", label,
              mean(pomp(c, lo, hi)) - mean(pomp(t, lo, hi)), smd(t, c)))

# Case 1: same 0-10 scale, same 1.5-point benefit,
# but study A has a varied sample and study B a homogeneous one
cA <- rnorm(n, 6, 2.0); tA <- rnorm(n, 4.5, 2.0)
cB <- rnorm(n, 6, 1.0); tB <- rnorm(n, 4.5, 1.0)
summ("Study A (varied sample)", tA, cA, 0, 10)
summ("Study B (narrow sample)", tB, cB, 0, 10)

# Case 2: same people, same latent benefit, two instruments.
# Scale X spreads people over its 0-10 range; scale Y (0-50)
# bunches everyone into the middle of its range.
lat_c <- rnorm(n, 0, 1); lat_t <- rnorm(n, -0.75, 1)
x_c <- 5 + 2 * lat_c;  x_t <- 5 + 2 * lat_t
y_c <- 25 + 4 * lat_c; y_t <- 25 + 4 * lat_t
summ("Scale X (0-10, wide use)", x_t, x_c, 0, 10)
summ("Scale Y (0-50, narrow use)", y_t, y_c, 0, 50)

Python

import numpy as np

rng = np.random.default_rng(2026)
n = 2000  # per group, large so the pattern is not sampling noise

# POMP: rescale a score to 0-100 using the instrument's possible min and max
def pomp(x, lo, hi):
    return 100 * (x - lo) / (hi - lo)

def smd(t, c):  # Cohen's d with pooled SD
    sp = np.sqrt(((len(t) - 1) * t.var(ddof=1) + (len(c) - 1) * c.var(ddof=1))
                 / (len(t) + len(c) - 2))
    return (c.mean() - t.mean()) / sp  # positive = treatment lowers pain

def summ(label, t, c, lo, hi):
    diff = pomp(c, lo, hi).mean() - pomp(t, lo, hi).mean()
    print(f"{label:<26} POMP diff = {diff:5.1f}   d = {smd(t, c):4.2f}")

# Case 1: same 0-10 scale, same 1.5-point benefit,
# but study A has a varied sample and study B a homogeneous one
cA = rng.normal(6, 2.0, n); tA = rng.normal(4.5, 2.0, n)
cB = rng.normal(6, 1.0, n); tB = rng.normal(4.5, 1.0, n)
summ("Study A (varied sample)", tA, cA, 0, 10)
summ("Study B (narrow sample)", tB, cB, 0, 10)

# Case 2: same people, same latent benefit, two instruments.
# Scale X spreads people over its 0-10 range; scale Y (0-50)
# bunches everyone into the middle of its range.
lat_c = rng.normal(0, 1, n); lat_t = rng.normal(-0.75, 1, n)
x_c = 5 + 2 * lat_c;  x_t = 5 + 2 * lat_t
y_c = 25 + 4 * lat_c; y_t = 25 + 4 * lat_t
summ("Scale X (0-10, wide use)", x_t, x_c, 0, 10)
summ("Scale Y (0-50, narrow use)", y_t, y_c, 0, 50)
Study A (varied sample)    POMP diff =  15.3   d = 0.77
Study B (narrow sample)    POMP diff =  14.8   d = 1.46
Scale X (0-10, wide use)   POMP diff =  14.8   d = 0.74
Scale Y (0-50, narrow use) POMP diff =   5.9   d = 0.74

These figures come from one seeded run of the R code. Python's random numbers differ from R's, so its figures differ slightly, but they show the same pattern.

So when is POMP a reasonable choice?

In practice, a careful meta-analysis can pool on one metric and report the other as a sensitivity analysis. If the conclusions agree, the choice did not matter much. If they disagree, the disagreement itself shows that either the instruments or the samples are not comparable, and that is worth reporting. For background on reading SMDs, see How do you interpret Cohen's d?; the DASS blog has more plain-language guides to effect sizes.

How to report a POMP mean difference in APA style (7th edition)

Define POMP the first time you use it and say what the possible range was for each instrument, then give the difference with its confidence interval. If you also report d, give it with a leading zero, because d can exceed 1. Using scale X from the example, with placeholders for the interval:

"Scores were converted to percent of maximum possible (POMP; Cohen et al., 1999) using each instrument's possible range. The intervention reduced pain by 14.8 POMP points, 95% CI [LL, UL], corresponding to a standardized mean difference of d = 0.74."

In the method section of a meta-analysis, list each instrument with its minimum and maximum possible scores and its direction, and state which metric was pooled and which was used as a sensitivity analysis.

Related tools and guides

More answered questions

Working with your own data?

General answers only go so far. Send us your situation and we'll reply by email within two business days.

Ask your question

Written by AskStats with AI assistance. This is general information, not advice for your specific data or study. When the results matter, check your approach with a qualified statistician.