我有一组伯努利变量,给出具有不同概率的特定值。变量是独立的。我正在尝试为所有可能的结果建立一个简单的离散概率表。我拥有的数据的一个简短示例是:
# 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
答案 0 :(得分: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