Power and Sample Size for Ordinal Response

popower computes the power for a two-tailed two sample comparison of ordinal outcomes under the proportional odds ordinal logistic model. The power is the same as that of the Wilcoxon test but with ties handled properly. posamsize computes the total sample size needed to achieve a given power. Both functions compute the efficiency of the design compared with a design in which the response variable is continuous. print methods exist for both functions. Any of the input arguments may be vectors, in which case a vector of powers or sample sizes is returned. These functions use the methods of Whitehead (1993).

pomodm is a function that assists in translating odds ratios to differences in mean or median on the original scale.

htest, category
popower(p, odds.ratio, n, n1, n2, alpha=0.05)
# S3 method for popower
print(x, …)
posamsize(p, odds.ratio, fraction=.5, alpha=0.05, power=0.8)
# S3 method for posamsize
print(x, …)
pomodm(x=NULL, p, odds.ratio=1)

a vector of marginal cell probabilities which must add up to one. The ith element specifies the probability that a patient will be in response level i, averaged over the two treatment groups.


the odds ratio to be able to detect. It doesn't matter which group is in the numerator.


total sample size for popower. You must specify either n or n1 and n2. If you specify n, n1 and n2 are set to n/2.


for popower, the number of subjects in treatment group 1


for popower, the number of subjects in group 2


type I error


an object created by popower or posamsize, or a vector of data values given to pomodm that corresponds to the vector p of probabilities. If x is omitted for pomodm, the odds.ratio will be applied and the new vector of individual probabilities will be returned. Otherwise if x is given to pomodm, a 2-vector with the mean and median x after applying the odds ratio is returned.


for posamsize, the fraction of subjects that will be allocated to group 1


for posamsize, the desired power (default is 0.8)



a list containing power and eff (relative efficiency) for popower, or containing n and eff for posamsize.


Whitehead J (1993): Sample size calculations for ordered categorical data. Stat in Med 12:2257--2271.

Julious SA, Campbell MJ (1996): Letter to the Editor. Stat in Med 15: 1065--1066. Shows accuracy of formula for binary response case.

See Also

simRegOrd, bpower, cpower

  • popower
  • posamsize
  • print.popower
  • print.posamsize
  • pomodm
# For a study of back pain (none, mild, moderate, severe) here are the
# expected proportions (averaged over 2 treatments) that will be in
# each of the 4 categories:

p <- c(.1,.2,.4,.3)
popower(p, 1.2, 1000)   # OR=1.2, total n=1000
posamsize(p, 1.2)
popower(p, 1.2, 3148)
# If p was the vector of probabilities for group 1, here's how to
# compute the average over the two groups:
# p2   <- pomodm(p=p, odds.ratio=1.2)
# pavg <- (p + p2) / 2

# Compare power to test for proportions for binary case,
# proportion of events in control group of 0.1
p <- 0.1; or <- 0.85; n <- 4000
popower(c(1 - p, p), or, n)    # 0.338
bpower(p, odds.ratio=or, n=n)  # 0.320
# Add more categories, starting with 0.1 in middle
p <- c(.8, .1, .1)
popower(p, or, n)   # 0.543
p <- c(.7, .1, .1, .1)
popower(p, or, n)   # 0.67
# Continuous scale with final level have prob. 0.1
p <- c(rep(1 / n, 0.9 * n), 0.1)
popower(p, or, n)   # 0.843

# Compute the mean and median x after shifting the probability
# distribution by an odds ratio under the proportional odds model
x <- 1 : 5
p <- c(.05, .2, .2, .3, .25)
# For comparison make up a sample that looks like this
X <- rep(1 : 5, 20 * p)
c(mean=mean(X), median=median(X))
pomodm(x, p, odds.ratio=1)  # still have to figure out the right median
pomodm(x, p, odds.ratio=0.5)
# }
Documentation reproduced from package Hmisc, version 4.3-1, License: GPL (>= 2)

Community examples

Looks like there are no examples yet.