假设我有下面的数据集,它显示了一个假设实验的每个状态的三个观察的列表:
state <- c("Iowa", "Minnesota", "Illinois")
outcome <- list(c(5, 11, 11), c(3, 12, 8), c(9, 14, 2))
dat <- tibble(state, outcome)每一行都包含状态的名称,以及按位置垂直对齐的实验结果。(第一行保存第一次实验的结果,第二行第二次实验,等等)在实验中,我试图确定一个状态有中值的概率。例如:
。
因此,在我们的小样本中,我们将为每个州分配以下概率:
爱荷华州的1 / 3 = 33%
2 / 3 = 67%
0 / 3 = 0%如何用R来计算状态为中位数的概率?提前谢谢。
发布于 2020-09-12 20:42:15
这里有一个tidyverse解决方案:
library(dplyr)
library(tidyr)
dat %>%
unnest(cols = outcome) %>%
group_by(state) %>%
mutate(experiment = seq(n())) %>%
group_by(experiment) %>%
mutate(is_median = as.numeric(outcome == median(outcome))) %>%
group_by(state) %>%
mutate(prob_median = scales::percent(sum(is_median)/length(is_median)))
#> # A tibble: 9 x 5
#> # Groups: state [3]
#> state outcome experiment is_median prob_median
#> <chr> <dbl> <int> <dbl> <chr>
#> 1 Iowa 5 1 1 33%
#> 2 Iowa 11 2 0 33%
#> 3 Iowa 11 3 0 33%
#> 4 Minnesota 3 1 0 67%
#> 5 Minnesota 12 2 1 67%
#> 6 Minnesota 8 3 1 67%
#> 7 Illinois 9 1 0 0%
#> 8 Illinois 14 2 0 0%
#> 9 Illinois 2 3 0 0% 发布于 2020-09-12 21:02:51
下面是使用prop.table + factor的基本R选项
within(
dat,
media_prob <- prop.table(
table(factor(
state[sapply(
asplit(do.call(rbind, outcome), 2),
function(x) which(x == median(x))
)],
levels = state
))
)
)这给
state outcome media_prob
<chr> <list> <table>
1 Iowa <dbl [3]> 0.3333333
2 Minnesota <dbl [3]> 0.6666667
3 Illinois <dbl [3]> 0.0000000https://stackoverflow.com/questions/63864013
复制相似问题