barnard.test | R Documentation |
Barnard's unconditional test for superiority applied to 2x2 contingency tables using Score or Wald statistics for the difference between two binomial proportions.
barnard.test(n1, n2, n3, n4, dp = 0.001, pooled = TRUE)
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 |
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.
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 |
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).
Kamil Erguler, Post-doctoral Fellow, EEWRC, The Cyprus Institute k.erguler@cyi.ac.cy
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/
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")
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.