barnard.test {Barnard} | R Documentation |
Barnard's Unconditional Test
Description
Barnard's unconditional test for superiority applied to 2x2 contingency tables using Score or Wald statistics for the difference between two binomial proportions.
Usage
barnard.test(n1, n2, n3, n4, dp = 0.001, pooled = TRUE)
Arguments
n1 , n2 , n3 , n4 |
Elements of the 2x2 contingency table |
dp |
The resolution to search for the nuisance parameter |
pooled |
Z statistic with pooled (Score) or unpooled (Wald) variance |
Details
For a 2x2 contingency table, such as X=[n_1,n_2;n_3,n_4]
, the normalized difference in proportions between the two categories, given in each column, can be written with pooled variance (Score statistic) as
T(X)=\frac{\hat{p}_2-\hat{p}_1}{\sqrt{\hat{p}(1-\hat{p})(\frac{1}{c_1}+\frac{1}{c_2})}},
where \hat{p}=(n_1+n_3)/(n_1+n_2+n_3+n_4)
, \hat{p}_2=n_2/(n_2+n_4)
, \hat{p}_1=n_1/(n_1+n_3)
, c_1=n_1+n_3
and c_2=n_2+n_4
. Alternatively, with unpooled variance (Wald statistic), the difference in proportions can we written as
T(X)=\frac{\hat{p}_2-\hat{p}_1}{\sqrt{\frac{\hat{p}_1(1-\hat{p}_1)}{c_1}+\frac{\hat{p}_2(1-\hat{p}_2)}{c_2}}}.
The probability of observing X
is
P(X)=\frac{c_1!c_2!}{n_1!n_2!n_3!n_4!}p^{n_1+n_2}(1-p)^{n_3+n_4},
where p
is the unknown nuisance parameter.
Barnard's test considers all tables with category sizes c_1
and c_2
for a given p
. The p-value is the sum of probabilities of the tables having a score in the rejection region, e.g. having significantly large difference in proportions for a two-sided test. The p-value of the test is the maximum p-value calculated over all p
between 0 and 1.
Value
statistic.table |
The contingency tables considered in the analysis represented by 'n1' and 'n2', their scores, and whether they are included in the one-sided (1), two-sided (2) tests, or not included at all (0) |
nuisance.matrix |
Nuisance parameters, |
dp |
The resolution of the search space for the nuisance parameter |
contingency.matrix |
The observed 2x2 contingency table |
alternative |
One sided or two sided test |
statistic |
The standardized difference between the observed proportions |
nuisance.parameter |
The nuisance parameter where the p-value is maximized |
p.value |
The p-value for the observed contingency table |
pooled |
Variance estimator of the Z statistic |
Note
I am indebted to Peter Calhoun for helping to test the performance and the accuracy of the code. I also thank Rodrigo Duprat, Long Qu, and Nicolas Sounac for their valuable comments. The accuracy has been tested with respect to the existing MATLAB and R implementations as well as the results of StatXact. I have largely been influenced by the works of Trujillo-Ortiz etal. (2004), Cardillo G. (2009), and Galili T. (2010).
Author(s)
Kamil Erguler, Post-doctoral Fellow, EEWRC, The Cyprus Institute k.erguler@cyi.ac.cy
References
Barnard, G.A. (1945) A new test for 2x2 tables. Nature, 156:177.
Barnard, G.A. (1947) Significance tests for 2x2 tables. Biometrika, 34:123-138.
Suissa, S. and Shuster, J. J. (1985), Exact Unconditional Sample Sizes for the 2x2 Binomial Trial, Journal of the Royal Statistical Society, Ser. A, 148, 317-327.
Cardillo G. (2009) MyBarnard: a very compact routine for Barnard's exact test on 2x2 matrix. URL http://www.mathworks.com/matlabcentral/fileexchange/25760
Galili T. (2010) URL http://www.r-statistics.com/2010/02/barnards-exact-test-a-powerful-alternative-for-fishers-exact-test-implemented-in-r/
Lin C.Y., Yang M.C. (2009) Improved p-value tests for comparing two independent binomial proportions. Communications in Statistics-Simulation and Computation, 38(1):78-91.
Trujillo-Ortiz, A., R. Hernandez-Walls, A. Castro-Perez, L. Rodriguez-Cardozo N.A. Ramos-Delgado and R. Garcia-Sanchez. (2004). Barnardextest:Barnard's Exact Probability Test. A MATLAB file. [WWW document]. URL http://www.mathworks.com/
Examples
barnard.test(8,14,1,3)
## Plotting the search for the nuisance parameter for a one-sided test
bt<-barnard.test(8,14,1,3)
plot(bt$nuisance.matrix[,1:2],
t="l",xlab="nuisance parameter",ylab="p-value")
## Plotting the tables included in the p-value
bt<-barnard.test(40,14,10,30)
bts<-bt$statistic.table
plot(bts[,1],bts[,2],
col=hsv(bts[,4]/4,1,1),
t="p",xlab="n1",ylab="n2")
## Plotting the difference between pooled and unpooled tests
bts<-barnard.test(40,14,10,30,pooled=TRUE)$statistic.table
btw<-barnard.test(40,14,10,30,pooled=FALSE)$statistic.table
plot(bts[,1],bts[,2],
col=c("black","white")[1+as.numeric(bts[,4]==btw[,4])],
t="p",xlab="n1",ylab="n2")