R中是否存在创建离散概率分布的函数?

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

# 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
zht_410728 回答:R中是否存在创建离散概率分布的函数?

这是一种方法:

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],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
本文链接:https://www.f2er.com/3066108.html

大家都在问