Performs exact binomial test and pairwise comparisons following a significant exact multinomial test. Wrapper around the R base function link[stats]{binom.test}() that returns a data frame as a result.

binom_test(
  x,
  n,
  p = 0.5,
  alternative = "two.sided",
  conf.level = 0.95,
  detailed = FALSE
)

pairwise_binom_test(
  x,
  p.adjust.method = "holm",
  alternative = "two.sided",
  conf.level = 0.95
)

pairwise_binom_test_against_p(
  x,
  p = rep(1/length(x), length(x)),
  p.adjust.method = "holm",
  alternative = "two.sided",
  conf.level = 0.95
)

Arguments

x

numeric vector containing the counts.

n

number of trials; ignored if x has length 2.

p

a vector of probabilities of success. The length of p must be the same as the number of groups specified by x, and its elements must be greater than 0 and less than 1.

alternative

indicates the alternative hypothesis and must be one of "two.sided", "greater" or "less". You can specify just the initial letter.

conf.level

confidence level for the returned confidence interval.

detailed

logical value. Default is FALSE. If TRUE, a detailed result is shown.

p.adjust.method

method to adjust p values for multiple comparisons. Used when pairwise comparisons are performed. Allowed values include "holm", "hochberg", "hommel", "bonferroni", "BH", "BY", "fdr", "none". If you don't want to adjust the p value (not recommended), use p.adjust.method = "none".

Value

return a data frame containing the p-value and its significance. with some the following columns:

  • group, group1, group2: the categories or groups being compared.

  • statistic: the number of successes.

  • parameter: the number of trials.

  • p: p-value of the test.

  • p.adj: the adjusted p-value.

  • method: the used statistical test.

  • p.signif, p.adj.signif: the significance level of p-values and adjusted p-values, respectively.

  • estimate: the estimated probability of success.

  • alternative: a character string describing the alternative hypothesis.

  • conf.low,conf.high: Lower and upper bound on a confidence interval for the probability of success.

The returned object has an attribute called args, which is a list holding the test arguments.

Functions

  • binom_test(): performs exact binomial test. Wrapper around the R base function binom.test that returns a dataframe as a result.

  • pairwise_binom_test(): performs pairwise comparisons (binomial test) following a significant exact multinomial test.

  • pairwise_binom_test_against_p(): performs pairwise comparisons (binomial test) following a significant exact multinomial test for given probabilities.

See also

Examples

# Exact binomial test
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
# Data: 160 mice with cancer including 95 male and 65 female
# Q1: Does cancer affect more males than females?
binom_test(x = 95, n = 160)
#> # A tibble: 1 × 6
#>       n estimate conf.low conf.high      p p.signif
#> * <dbl>    <dbl>    <dbl>     <dbl>  <dbl> <chr>   
#> 1   160    0.594    0.513     0.671 0.0216 *       
# => yes, there are a significant difference


# Q2: compare the observed proportion of males
# to an expected proportion (p = 3/5)
binom_test(x = 95, n = 160, p = 3/5)
#> # A tibble: 1 × 6
#>       n estimate conf.low conf.high     p p.signif
#> * <dbl>    <dbl>    <dbl>     <dbl> <dbl> <chr>   
#> 1   160    0.594    0.513     0.671 0.872 ns      
# => there are no significant difference

# Multinomial test
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
# Data
tulip <- c(red = 81, yellow = 50, white = 27)
# Question 1: are the color equally common ?
# this is a test of homogeneity
res <- multinom_test(tulip)
res
#> # A tibble: 1 × 2
#>             p p.signif
#> *       <dbl> <chr>   
#> 1 0.000000711 ****    
attr(res, "descriptives")
#> # A tibble: 3 × 3
#>   group  observed expected
#>   <chr>     <dbl>    <dbl>
#> 1 red          81     52.7
#> 2 yellow       50     52.7
#> 3 white        27     52.7

# Pairwise comparisons between groups
pairwise_binom_test(tulip, p.adjust.method = "bonferroni")
#> # A tibble: 3 × 9
#>   group1 group2     n estimate conf.low conf.high           p      p.adj p.adj…¹
#> * <chr>  <chr>  <dbl>    <dbl>    <dbl>     <dbl>       <dbl>      <dbl> <chr>  
#> 1 red    yellow   131    0.618    0.529     0.702 0.00851        2.55e-2 *      
#> 2 red    white    108    0.75     0.657     0.828 0.000000191    5.72e-7 ****   
#> 3 yellow white     77    0.649    0.532     0.755 0.0117         3.5 e-2 *      
#> # … with abbreviated variable name ¹​p.adj.signif


# Question 2: comparing observed to expected proportions
# this is a goodness-of-fit test
expected.p <- c(red = 0.5, yellow = 0.33, white = 0.17)
res <- multinom_test(tulip, expected.p)
res
#> # A tibble: 1 × 2
#>       p p.signif
#> * <dbl> <chr>   
#> 1 0.942 ns      
attr(res, "descriptives")
#> # A tibble: 3 × 3
#>   group  observed expected
#>   <chr>     <dbl>    <dbl>
#> 1 red          81     79  
#> 2 yellow       50     52.1
#> 3 white        27     26.9

# Pairwise comparisons against a given probabilities
pairwise_binom_test_against_p(tulip, expected.p)
#> # A tibble: 3 × 10
#>   group  observed expected     n estimate conf.low conf.high     p p.adj p.adj…¹
#> * <chr>     <dbl>    <dbl> <dbl>    <dbl>    <dbl>     <dbl> <dbl> <dbl> <chr>  
#> 1 red          81     79     158    0.513    0.432     0.593 0.811     1 ns     
#> 2 yellow       50     52.1   158    0.316    0.245     0.395 0.800     1 ns     
#> 3 white        27     26.9   158    0.171    0.116     0.239 1         1 ns     
#> # … with abbreviated variable name ¹​p.adj.signif