Хотя я дважды запускал один и тот же тест, но оказалось, что результаты разные.

Сначала я создал таблицу непредвиденных обстоятельств из своих данных:

> SAtab1 <- table(dt2$ACE_SA_BIN, dt2$IHD_other_healthy)
> SAtab1
   
      0   1   2
  0 345 577  29
  1  10  25   2

А затем я запускаю тест Фишера:

> fisher.test(SAtab1, workspace = 2e8, simulate.p.value=TRUE)

    Fisher's Exact Test for Count Data with simulated p-value (based on 2000 replicates)

data:  SAtab1
p-value = 0.2969
alternative hypothesis: two.sided

Потом я где-то увидел код, где вместо таблицы непредвиденных обстоятельств передавали матрицу. Итак, я создаю матрицу:

> SAtab2 <- 
+   matrix(c(345,10,577,25,29,2),
+          nrow = 2,
+          dimnames = list(Gender = c("no", "yes"),
+                          Illness =c("no illness","other than IHD", "HD")))
> SAtab2
      Illness
Gender no illness other than IHD HD
   no         345            577 29
   yes         10             25  2

И снова запустите fisher.test:

> fisher.test(SAtab2, workspace = 2e8, simulate.p.value=TRUE)

    Fisher's Exact Test for Count Data with simulated p-value (based on 2000 replicates)

data:  SAtab2
p-value = 0.2829
alternative hypothesis: two.sided

Как это возможно, чтобы тест не дал одинаковых результатов? Откуда берется незначительное отклонение?

1
Nneka 16 Мар 2023 в 21:59

1 ответ

Проблема заключается не в class (таблица и матрица), а в том, что simulate.p.value является ИСТИННЫМ, например. если мы запускаем одни и те же данные с simulate.p.value несколько раз, они возвращают другое значение p. По данным ?fisher.test

Simulation.p.value - логическое указание, следует ли вычислять p-значения с помощью моделирования Монте-Карло в таблицах размером более 2 × 2.

> fisher.test(SAtab2, workspace = 2e8, simulate.p.value=TRUE)

    Fisher's Exact Test for Count Data with simulated p-value (based on 2000 replicates)

data:  SAtab2
p-value = 0.3088
alternative hypothesis: two.sided

> fisher.test(SAtab2, workspace = 2e8, simulate.p.value=TRUE)

    Fisher's Exact Test for Count Data with simulated p-value (based on 2000 replicates)

data:  SAtab2
p-value = 0.3018
alternative hypothesis: two.sided

Тогда как в противном случае он даст тот же результат

> lst1 <- replicate(5, fisher.test(SAtab2, workspace = 2e8, simulate.p.value=FALSE), simplify = FALSE)

> all.equal(lst1[[1]], lst1[[2]])
[1] TRUE
> all.equal(lst1[[1]], lst1[[3]])
[1] TRUE
> all.equal(lst1[[1]], lst1[[5]])
[1] TRUE
0
akrun 16 Мар 2023 в 22:12