【问题标题】:Is there a function in R to create a discrete probability distribution?R中是否有创建离散概率分布的函数?
【发布时间】:2019-11-20 11:59:57
【问题描述】:

我有一组伯努利变量,给出具有不同概率的特定值。变量是独立的。我正在尝试为所有可能的结果建立一个简单的离散概率表。我拥有的数据的一个简短示例是:

# A tibble: 2 x 4
  `test number`  prob value `no-value`
          <dbl> <dbl> <dbl>      <dbl>
1             1   0.7   1.7        0.3
2             2   0.6   1.5        0.6

其中值是可能值的总和,概率是该值的概率。 我正在使用的示例来自 Excel 工作表。 我正在处理的表格是一长串独立测试。 每个测试都有一个可能的成功值、一个成功概率和一个不成功值(概率为(1 - 成功概率))。 概率表是一个计算每个可能结果的概率的表 - 可能值(对该结果的值求和)和该结果的概率。所以第一个可能的结果 3.2 = 1.7 + 1.5 的概率为 0.42 = 0.7 * 0.6。第二个结果是 2.3 = (1.7 + 0.6),概率为 0.28 = (0.7 * (1 - 0.6),依此类推。

所以我想要得到的解决方案是这样的 (2.29 = 2.3, 0.899 = 0.9:

# A tibble: 1 x 5
  value       `3.2` `2.299999999999999~ `1.8` `0.8999999999999999~
  <chr>       <dbl>               <dbl> <dbl>                <dbl>
1 probability  0.42               0.280  0.18                 0.12

【问题讨论】:

    标签: r probability distribution bernoulli-probability


    【解决方案1】:

    这是一种方法:

    dat <- data.frame(
      prob = c(0.3, 0.7, 0.6),
      value_success = c(1, 2, 3),
      value_failure = c(4, 5, 6)
    )
    
    ntrials <- nrow(dat)
    
    issues <- setNames(
      do.call(expand.grid, replicate(ntrials, c(0,1), simplify = FALSE)),
      paste0("trial", 1:ntrials)
    )
    
    issues[["prob"]] <- apply(issues, 1, function(x){
      prod(ifelse(x==0, 1-dat$prob, dat$prob))
    })
    
    issues[["total"]] <- apply(issues[,1:ntrials], 1, function(x){
      sum(ifelse(x==0, dat$value_failure, dat$value_success))
    })
    
    issues
    #   trial1 trial2 trial3  prob total
    # 1      0      0      0 0.084    15
    # 2      1      0      0 0.036    12
    # 3      0      1      0 0.196    12
    # 4      1      1      0 0.084     9
    # 5      0      0      1 0.126    12
    # 6      1      0      1 0.054     9
    # 7      0      1      1 0.294     9
    # 8      1      1      1 0.126     6
    

    【讨论】:

      猜你喜欢
      • 2016-06-12
      • 1970-01-01
      • 2020-06-14
      • 1970-01-01
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 2018-10-11
      • 1970-01-01
      相关资源
      最近更新 更多