
Breslow-Day Test for Comparing Odds Ratios Across Strata
Source:R/breslowDayTest.R
breslowDayTest.RdA test for homogeneity of odds ratios across several 2x2 contingency tables (strata), commonly used to verify whether a confounding effect is constant across subgroups, as required by the Mantel-Haenszel method.
Arguments
- x
a \(2 \times 2 \times k\) table.
- OR
the odds ratio to be tested against. If left undefined (default) the Mantel-Haenszel estimate will be used.
- correct
logical, if
TRUEthe Breslow-Day test with Tarone's adjustment is computed, which subtracts an adjustment factor to make the resulting statistic asymptotically chi-squared.
Value
A list with class "htest" containing the following
components:
statisticthe value of the chi-squared test statistic.
parameterthe degrees of freedom of the approximate chi-squared distribution of the test statistic (\(k-1\)).
p.valuethe p-value of the test.
methoda character string indicating the test performed.
data.namea character string giving the name of the data.
nthe total number of observations (not shown on screen).
Details
Calculates the Breslow-Day test of homogeneity for a
\(2 \times 2 \times k\) table, in order to investigate if
all \(k\) strata have the same OR. If OR is not given, the
Mantel-Haenszel estimate is used.
For the Breslow-Day test to be valid, the sample size should be relatively large in each stratum, and at least 80% of the expected cell counts should be greater than 5. Note that this is a stricter sample size requirement than the requirement for the Cochran-Mantel-Haenszel test for tables, in that each stratum sample size (not just the overall sample size) must be relatively large. Even when the Breslow-Day test is valid, it might not be very powerful against certain alternatives, as discussed in Breslow and Day (1980).
The statistic is referred to a chi-squared distribution with \(k-1\)
degrees of freedom; this also applies when a prespecified OR is
supplied. Note that Tarone's adjustment is derived for the
Mantel-Haenszel estimate; a warning is issued if correct = TRUE
is combined with a user-supplied OR.
Alternatively, it might be better to cast the entire inference problem
into the setting of a logistic regression model. Here, the underlying
question of the Breslow-Day test can be answered by investigating
whether an interaction term with the strata variable is necessary (e.g.
using a likelihood ratio test using the anova function).
References
Breslow, N. E. and Day, N. E. (1980) The Analysis of Case-Control Studies. Statistical Methods in Cancer Research: Vol. 1. Lyon, France, IARC Scientific Publications.
Tarone, R.E. (1985) On heterogeneity tests based on efficient scores, Biometrika, 72, pp. 91-95.
Jones, M. P., O'Gorman, T. W., Lemka, J. H., and Woolson, R. F. (1989) A Monte Carlo Investigation of Homogeneity Tests of the Odds Ratio Under Various Sample Size Configurations. Biometrics, 45, 171-181.
Breslow, N. E. (1996) Statistics in Epidemiology: The Case-Control Study. Journal of the American Statistical Association, 91, 14-26.
See also
Other test.categorical:
barnardTest(),
bhapkarTest(),
cochranQTest(),
gTest(),
lehmacherTest(),
mantelTrendTest(),
stuartMaxwellTest(),
woolfTest()
Examples
migraine <- xtabs(freq ~ .,
cbind(expand.grid(treatment=c("active", "placebo"),
response =c("better", "same"),
gender =c("female", "male")),
freq=c(16, 5, 11, 20, 12, 7, 16, 19))
)
# get rid of gender
tab <- xtabs(Freq ~ treatment + response, migraine)
tab
#> response
#> treatment better same
#> active 28 27
#> placebo 12 39
# only the women
female <- migraine[,, 1]
female
#> response
#> treatment better same
#> active 16 11
#> placebo 5 20
# .. and the men
male <- migraine[,, 2]
male
#> response
#> treatment better same
#> active 12 16
#> placebo 7 19
breslowDayTest(migraine)
#>
#> Breslow-Day test for homogeneity of the odds ratios
#>
#> data: migraine
#> X-squared = 1.4929, df = 1, p-value = 0.2218
#>
breslowDayTest(migraine, correct = TRUE)
#>
#> Breslow-Day test for homogeneity of the odds ratios (Tarone corrected)
#>
#> data: migraine
#> X-squared = 1.4905, df = 1, p-value = 0.2221
#>
salary <- array(
c(38, 12, 102, 141, 12, 9, 136, 383),
dim=c(2, 2, 2),
dimnames=list(exposure=c("exposed", "not"),
disease =c("case", "control"),
salary =c("<1000", ">=1000"))
)
# common odds ratio = 4.028269
breslowDayTest(salary, OR = 4.02)
#>
#> Breslow-Day test for homogeneity of the odds ratios
#>
#> data: salary
#> X-squared = 0.080143, df = 1, p-value = 0.7771
#>