gpt4 book ai didi

r - 在 R 中创建概率树

转载 作者:行者123 更新时间:2023-12-02 18:17:34 24 4
gpt4 key购买 nike

我正在使用 R 编程语言。

假设我进行了以下设置:

  • 有 5 个对象:A、B、C、D、E
  • 每个对象被选择的概率为:0.2、0.3、0.1、0.3、0.1
  • 您想要选择其中 5 个对象进行替换(例如 ABACD、DDBCA 等)

我想找出(确切的解决方案):

  • 这 5 个对象可以进行的所有组合
  • 每种组合的概率

目前,我不知道如何做到这一点 - 我尝试通过模拟“大量组合”来做到这一点,并希望我充分看到每个组合以推断出正确的概率:

library(dplyr)


results <- list()

for (i in 1:100) {

iteration = i
sample_i = sample(c("A", "B", "C", "D", "E"), size =5, replace = T, prob= c( 0.2, 0.3, 0.1, 0.3, 0.1))


my_data_i = data.frame(iteration, sample_i )

results[[i]] <- my_data_i

}

results_df <- data.frame(do.call(rbind.data.frame, results))

但这看起来是解决这个问题的一种非常复杂的方法。最后,我会寻找这样的东西:

  • AAAAA:概率 = 0.03
  • AABDE:概率 = 0.06
  • DEECB:概率 = 0.07
  • 等等

有人可以告诉我如何执行此操作吗?

谢谢!

最佳答案

每个排列的总体概率是每个选定元素的概率的乘积。

library(RcppAlgos)

# Probabilities
probs <- setNames(c(0.2, 0.3, 0.1, 0.3, 0.1), LETTERS[1:5])

# Generate permutations
perms <- permuteGeneral(names(probs), repetition = TRUE)

# Collapse permutations
perm_res <- do.call(paste, c(asplit(perms, 2), sep = ""))

# Replace with probability values and coerce to numeric
perms[] <- probs[perms]
class(perms) <- "numeric"

# Calculate products
res <- data.frame(perm_res, prob = exp(rowSums(log(perms))))
head(res)

perm_res prob
1 AAAAA 0.00032
2 AAAAB 0.00048
3 AAAAC 0.00016
4 AAAAD 0.00048
5 AAAAE 0.00016
6 AAABA 0.00048

# Check total sums to 1
sum(res$prob)
[1] 1

关于r - 在 R 中创建概率树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71375997/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com