首页 > 解决方案 > 如何使用 R 计算成为列表中中位数的概率?

问题描述

假设我有以下数据集,其中显示了假设实验的每个状态的三个观察结果的列表:

state <- c("Iowa", "Minnesota", "Illinois")
outcome <- list(c(5, 11, 11), c(3, 12, 8), c(9, 14, 2))
dat <- tibble(state, outcome)

每行包含州名,以及按位置垂直对齐的实验结果。(第一行保存第一个实验的结果,第二行保存第二个实验的结果,等等。)我试图确定一个状态在实验中具有中值的概率。例如:

因此,给定我们的小样本,我们将为每个状态分配以下概率:

如何使用 R 计算一个状态作为中位数的概率?提前致谢。

标签: r

解决方案


这是一个 tidyverse 解决方案:

library(dplyr)
library(tidyr)

dat %>% 
  unnest(cols = outcome) %>% 
  group_by(state) %>% 
  mutate(experiment = seq(n())) %>% 
  group_by(experiment) %>% 
  mutate(is_median = as.numeric(outcome == median(outcome))) %>% 
  group_by(state) %>% 
  mutate(prob_median = scales::percent(sum(is_median)/length(is_median)))

#> # A tibble: 9 x 5
#> # Groups:   state [3]
#>   state     outcome experiment is_median prob_median
#>   <chr>       <dbl>      <int>     <dbl> <chr>      
#> 1 Iowa            5          1         1 33%        
#> 2 Iowa           11          2         0 33%        
#> 3 Iowa           11          3         0 33%        
#> 4 Minnesota       3          1         0 67%        
#> 5 Minnesota      12          2         1 67%        
#> 6 Minnesota       8          3         1 67%        
#> 7 Illinois        9          1         0 0%         
#> 8 Illinois       14          2         0 0%         
#> 9 Illinois        2          3         0 0%    

推荐阅读