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

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

# 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 

Ответы [ 2 ]

1 голос
/ 04 мая 2020

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

0 голосов
/ 03 мая 2020

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

...