Хотя я дважды запускал один и тот же тест, но оказалось, что результаты разные.
Сначала я создал таблицу непредвиденных обстоятельств из своих данных:
> 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 ответ
Проблема заключается не в 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
Похожие вопросы
Новые вопросы
r
R — это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, используйте минимально воспроизводимые примеры, которые другие могут запустить с помощью копирования и вставки. Показать желаемый результат. Используйте dput() для данных и укажите все небазовые пакеты с помощью library(). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. Для вопросов по статистике используйте https://stats.stackexchange.com.