R - Почему попарный тест Фишера дает разные результаты Фишера для каждой комбинации

Я пытаюсь выполнить точный тест Фишера для комбинаций фрейма данных n x 2, и, судя по тому, что я прочитал, я хочу использовать попарных рыбаков (см. здесь). Однако при этом результаты p-значения выглядели неправильно, поэтому я решил вручную проверить комбинации и получил другие результаты. Я включил то, что, как я надеюсь, является воспроизводимым примером, чтобы подчеркнуть то, что я пробовал. Возможно, я делаю что-то не так с кодом R, так как я все еще относительно неопытен, или я могу совершенно неправильно понимать, что должны вычислять парные тесты - если это так, извините, и я могу удалить вопрос, если он не подходит для ТАК.

# Packages -----------------------------------------------------------

library("tidyverse")
library("janitor")
library("RVAideMemoire")
library("fmsb")

# Generate Data -----------------------------------------------------------

set.seed(1)
test <-
  tibble(
    "drug" = sample(
      c("Control", "Treatment1", "Treatment2"), 
      size = 300,
      prob = c(0.1, 0.4, 0.3),
      replace = TRUE),
    "country" = sample(
      c("Canada", "United States"),
      size = 300,
      prob = c(0.4, 0.6),
      replace = TRUE
    ),
    "selected" = sample(
      c(0, 1), 
      size = 300, 
      prob = c(0.1, 0.65), 
      replace = TRUE)
  )

test2 <- test %>%
  filter(selected == 1)

test2_tab <- test2 %>%
  tabyl(drug, country) %>%
  remove_rownames() %>%
  column_to_rownames(var = colnames(.[1])) %>%
  as.matrix()

Когда я запускаю следующие парные тесты, я получаю это в качестве вывода (я использовал 2 пакета, чтобы убедиться, что я не просто неправильно реализовал один).

# Pairwise ----------------------------------------------------------------

RVAideMemoire::fisher.multcomp(test2_tab, p.method = "bonferroni")
fmsb::pairwise.fisher.test(test2_tab, p.adjust.method = "bonferroni")
        Pairwise comparisons using Fisher's exact test for count data

data:  test2_tab

           Control Treatment1
Treatment1       1          -
Treatment2       1          1

P value adjustment method: bonferroni



    Pairwise comparisons using Pairwise comparison of proportions (Fisher) 

data:  test2_tab 

           Control Treatment1
Treatment1 1       -         
Treatment2 1       1         

P value adjustment method: bonferroni 

Однако, когда я создаю отдельные таблицы для выполнения отдельного теста Фишера, как показано ниже, я получаю разные результаты.

# Individual --------------------------------------------------------------

drug.groups2 <- unique(test2$drug)

# Just to check the correct 2x2 tables are produced
# combn(drug.groups2, 2, function(x) {
#   id <- test2$drug %in% x
#   cross_tabs <- table(test2$drug[id], test2$country[id])
# }, simplify = FALSE)


combn(drug.groups2, 2, function(x) {
  id <- test2$drug %in% x
  cross_tabs <- table(test2$drug[id], test2$country[id])
  fishers <- fisher.test(cross_tabs)
  fishers$data.name <-
    paste(
      unique(
        as.character(test2$drug[id])
      ),collapse="-")
  return(fishers)
}, simplify = FALSE)

[[1]]

    Fisher's Exact Test for Count Data

data:  Treatment1-Treatment2
p-value = 0.3357
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
 0.7566901 2.4175206
sample estimates:
odds ratio 
  1.347105 


[[2]]

    Fisher's Exact Test for Count Data

data:  Treatment1-Control
p-value = 0.4109
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
 0.2560196 1.6292583
sample estimates:
odds ratio 
 0.6637235 


[[3]]

    Fisher's Exact Test for Count Data

data:  Treatment2-Control
p-value = 1
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
 0.3294278 2.3146386
sample estimates:
odds ratio 
 0.8940101 

person arnold-c    schedule 03.05.2020    source источник
comment
Не связано ли это с поправкой Бонферрони, которая применяется к парным сравнениям, но не применяется к отдельным тестам?   -  person Łukasz Deryło    schedule 03.05.2020
comment
да, вы явно назвали это fisher.multcomp(test2_tab, p.method = bonferroni). если вы сделаете грубый расчет, у вас будет 3 сравнения, ваше минимальное значение p равно 0,3357, что дает 3 * 0,3357 = 1   -  person StupidWolf    schedule 03.05.2020
comment
Да, это была глупая оплошность. Спасибо за помощь   -  person arnold-c    schedule 03.05.2020


Ответы (2)


Не связано ли это с поправкой Бонферрони, которая применяется к парным сравнениям, но не применяется к отдельным тестам?

person Łukasz Deryło    schedule 04.05.2020

Как ясно указано в комментариях Лукаша и StupidWolf, я забыл, что применил коррекцию p.method = "bonferroni", и результаты такие же, как и при вызове функции p.method = "none"...

person arnold-c    schedule 03.05.2020
comment
Поэтому я публикую свой комментарий в качестве ответа. Было бы неплохо, если бы вы приняли это. - person Łukasz Deryło; 04.05.2020