Learn R Programming

Barnard (version 1.6)

barnard.test: 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

Value

  • statistic.tableThe 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.matrixNuisance parameters, $p$, and the corresponding p-values for both one- and two-sided tests
  • dpThe resolution of the search space for the nuisance parameter
  • contingency.matrixThe observed 2x2 contingency table
  • alternativeOne sided or two sided test
  • statisticThe standardized difference between the observed proportions
  • nuisance.parameterThe nuisance parameter where the p-value is maximized
  • p.valueThe p-value for the observed contingency table
  • pooledVariance estimator of the Z statistic

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.

References

  1. Barnard, G.A. (1945) A new test for 2x2 tables.Nature, 156:177.
  2. Barnard, G.A. (1947) Significance tests for 2x2 tables.Biometrika, 34:123-138.
  3. 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.
  4. Cardillo G. (2009) MyBarnard: a very compact routine for Barnard's exact test on 2x2 matrix. URLhttp://www.mathworks.com/matlabcentral/fileexchange/25760
  5. Galili T. (2010) URLhttp://www.r-statistics.com/2010/02/barnards-exact-test-a-powerful-alternative-for-fishers-exact-test-implemented-in-r/
  6. 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.
  7. 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]. URLhttp://www.mathworks.com/

Examples

Run this code
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")

Run the code above in your browser using DataLab