# popower: Power and Sample Size for Ordinal Response In harrelfe/Hmisc: Harrell Miscellaneous

## Description

`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.

## Usage

 ```1 2 3 4 5 6 7``` ```popower(p, odds.ratio, n, n1, n2, alpha=0.05) ## S3 method for class 'popower' print(x, ...) posamsize(p, odds.ratio, fraction=.5, alpha=0.05, power=0.8) ## S3 method for class 'posamsize' print(x, ...) pomodm(x=NULL, p, odds.ratio=1) ```

## Arguments

 `p` a vector of marginal cell probabilities which must add up to one. The `i`th element specifies the probability that a patient will be in response level `i`, averaged over the two treatment groups. `odds.ratio` the odds ratio to be able to detect. It doesn't matter which group is in the numerator. `n` 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`. `n1` for `popower`, the number of subjects in treatment group 1 `n2` for `popower`, the number of subjects in group 2 `alpha` type I error `x` 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. `fraction` for `posamsize`, the fraction of subjects that will be allocated to group 1 `power` for `posamsize`, the desired power (default is 0.8) `...` unused

## Value

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

## Author(s)

Frank Harrell
Department of Biostatistics
Vanderbilt University School of Medicine
[email protected]

## References

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.

`simRegOrd`, `bpower`, `cpower`
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37``` ```# 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) ```