簡體   English   中英

使用 prob 包計算 R 中的條件概率

[英]Using prob package to calculate a conditional probability in R

我的數據如下所示:

d

#> # A tibble: 220 x 2
#>    smoker pain 
#>    <chr>  <chr>
#>  1 Smoker Pain 
#>  2 Smoker Pain 
#>  3 Smoker Pain 
#>  4 Smoker Pain 
#>  5 Smoker Pain 
#>  6 Smoker Pain 
#>  7 Smoker Pain 
#>  8 Smoker Pain 
#>  9 Smoker Pain 
#> 10 Smoker Pain 
#> # … with 210 more rows

是兩個變量的組合:吸煙者和疼痛。

d %>% 
  count(smoker, pain, sort = T)
#> # A tibble: 4 x 3
#>   smoker    pain        n
#>   <chr>     <chr>   <int>
#> 1 No smoker No pain   107
#> 2 Smoker    Pain       70
#> 3 Smoker    No pain    35
#> 4 No smoker Pain        8

我想計算一個人在吸煙的情況下感到疼痛的概率 P(pain|smoker):

library(tidyverse)
library(prob)

d <- probspace(d)
Prob(d, event = smoker == "Smoker", given = pain == "Pain")
#> [1] 0.01282051

據我所知,這個值一定是吸煙者感到疼痛的百分比:

70/105

#> [1] 0.667

這里有什么問題?

這是數據的代碼:

smoker <- c(rep("Smoker", 105), rep("No smoker", 115))
pain <- c(rep("Pain", 70), rep("No pain", 35), rep("Pain", 8), rep("No pain", 107))

d <- tibble(smoker, pain)

我認為你應該在d <- cbind(id = seq(nrow(d)),d) d <- tibble(smoker, pain)之后再添加一行d <- cbind(id = seq(nrow(d)),d) d <- tibble(smoker, pain) ,即,

d <- tibble(smoker, pain)
d <- cbind(id = seq(nrow(d)),d)

然后你會得到想要的結果

> Prob(d, event = pain == "Pain", given = smoker == "Smoker")
[1] 0.6666667

注意:這樣做的原因是, Prob()計算事件和給定條件之間的intersect() 當您將數據框用於概率空間時,交集中的重復項將被刪除。 為避免這種情況,您需要手動添加額外信息來區分數據框d中的行,以便所有重復項都可以保存到計算結束。

暫無
暫無

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

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