【问题标题】:How to calculate the probability of being a median across a list using R?如何使用 R 计算成为列表中中位数的概率?
【发布时间】:2020-09-12 19:13:41
【问题描述】:

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

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

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

  • 在第一个实验中,爱荷华州的中值为 5。
  • 在第二个实验中,明尼苏达州的中位数为 值为 11。
  • 在第三个实验中,明尼苏达州的中值 8 个。

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

  • 爱荷华州成为中位数的概率:1 / 3 = 33%
  • 明尼苏达州成为中位数的概率:2 / 3 = 67%
  • 伊利诺伊州成为中位数的概率:0 / 3 = 0%

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

【问题讨论】:

    标签: r


    【解决方案1】:

    这是一个 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%    
    

    【讨论】:

      【解决方案2】:

      这是使用prop.table + factor 的基本 R 选项

      within(
        dat,
        media_prob <- prop.table(
          table(factor(
            state[sapply(
              asplit(do.call(rbind, outcome), 2),
              function(x) which(x == median(x))
            )],
            levels = state
          ))
        )
      )
      

      给了

        state     outcome   media_prob
        <chr>     <list>    <table>
      1 Iowa      <dbl [3]> 0.3333333
      2 Minnesota <dbl [3]> 0.6666667
      3 Illinois  <dbl [3]> 0.0000000
      

      【讨论】:

        猜你喜欢
        • 2012-02-25
        • 2020-09-24
        • 2017-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多