簡體   English   中英

R 中是否有 function 來創建離散概率分布?

[英]Is there a function in R to create a discrete probability distribution?

我有一組伯努利變量,給出具有不同概率的特定值。 變量是獨立的。 我正在嘗試為所有可能的結果建立一個簡單的離散概率表。 我擁有的數據的一個簡短示例是:

# 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

這是一種方法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM