Медианная статистическая разница в ggplot - PullRequest
2 голосов
/ 26 января 2020

У меня есть коробочный график ggplot, подобный этому:

library(ggplot2)
data(iris)
ggplot(iris, aes(x = "", y = Sepal.Width)) +
    geom_boxplot()

Как вы можете видеть, медиана равна 3. Скажите, что реальное значение составляет 3,8, и я хотел бы знать, есть ли статистическая разница между реальное значение 3,8 и наблюдаемое значение 3, так какой метод статистической разницы я должен использовать? Могу ли я реализовать это в R. Также возможно ли построить реальное значение 3,8 на графике?

Thx!

PS: я использую набор данных радужной оболочки как легко воспроизводимый пример для моих реальных данных.

Ответы [ 2 ]

4 голосов
/ 26 января 2020

Вы ищете односэмпловый ранговый тест Уилкоксона:

wilcox.test(iris$Sepal.Width, mu = 3.8)
#> 
#>  Wilcoxon signed rank test with continuity correction
#> 
#> data:  iris$Sepal.Width
#> V = 113, p-value < 2.2e-16
#> alternative hypothesis: true location is not equal to 3.8

Вы можете добавить горизонтальную линию к блокпосту с помощью geom_hline и текстовую аннотацию с geom_text

ggplot(iris, aes(x = "", y = Sepal.Width)) +
  geom_boxplot() + 
  geom_hline(aes(yintercept=3.8), linetype = 2) +
  geom_text(aes(label = "True median", x = 0.5, y = 3.9))

enter image description here

2 голосов
/ 26 января 2020

Другим жизнеспособным вариантом является начальная загрузка.

Когда вы bootstrap, вы берете много случайных выборок из вашей исходной выборки с заменой (это означает, что отдельные наблюдения из вашей выборки могут появляться более одного раза в некоторых ваших bootstrap образцов), а затем используйте bootstrap образцов для оценки вашей статистики c интереса. Самое замечательное в bootstrap заключается в том, что вы можете использовать его для оценки доверительного интервала практически любой статистики c, представляющей интерес, будь то среднее значение, медиана, корреляция, наклон в регрессионной модели смешанных эффектов и т. Д. c ...

Чтобы реализовать его в R с помощью tidyverse, вы можете сделать следующее:

# Write a function to get your statistic of interest on a randomly drawn sample
# (i.e. median in your case) with replacement

get_median <- function(x) {

   x_sample <- sample(x, size = length(x), replace = TRUE)
   median(x)

}  

# After that you iterate your function many times (e.g. 1000 times) using purrr

bootstrapped_medians <- purrr::map_dbl(1:1000, ~ get_medians(x = iris$Sepal.Width))

# Now you can use the vector of bootstrapped statistics to get the desired summary
# e.g. 95% confidence interval

quantile(bootstrapped_medians, c(0.025, 0.975))
...