r - 使用 prob 包计算 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 <- tibble(smoker, pain)
d <- cbind(id = seq(nrow(d)),d)
那么你会得到想要的结果
> Prob(d, event = pain == "Pain", given = smoker == "Smoker")
[1] 0.6666667
注意:这样做的原因是,Prob()
计算intersect()
事件和给定条件之间的时间。当您将数据框用于概率空间时,交叉点中的重复项将被丢弃。为避免这种情况,您需要手动添加额外的信息来区分数据框中的行d
,以便可以保存所有重复项直到计算结束。
推荐阅读
- microsoft-graph-api - 如何在特定时间间隔内从收件箱阅读我的邮件或从特定电子邮件地址发送的邮件?
- batch-file - 进程无法访问文件,因为它正在被另一个程序使用
- vba - PDFs created by Excel Mail merge macro does not change merge fields
- python - Pandas: read.csv() - read only rows with certain column length
- python - Count specific pattern in seqID python
- luxon - How to check if obj is of type luxon?
- r - Calculate mean by group with dplyr
- php - Silverstripe ListboxField 嵌套数据对象
- c - ‘getnstimeofday' is an implicit declaration in system call when
is included - ruby-on-rails - Overriding save method in model