r - 如何使用 R 计算成为列表中中位数的概率?
问题描述
假设我有以下数据集,其中显示了假设实验的每个状态的三个观察结果的列表:
state <- c("Iowa", "Minnesota", "Illinois")
outcome <- list(c(5, 11, 11), c(3, 12, 8), c(9, 14, 2))
dat <- tibble(state, outcome)
每行包含州名,以及按位置垂直对齐的实验结果。(第一行保存第一个实验的结果,第二行保存第二个实验的结果,等等。)我试图确定一个状态在实验中具有中值的概率。例如:
- 在第一个实验中,爱荷华州的中值为 5。
- 在第二个实验中,明尼苏达州的中值为 11。
- 在第三个实验中,明尼苏达州的中值为 8。
因此,给定我们的小样本,我们将为每个状态分配以下概率:
- 爱荷华州成为中位数的概率:
1 / 3 = 33%
- 明尼苏达州成为中位数的概率:
2 / 3 = 67%
- 伊利诺伊州成为中位数的概率:
0 / 3 = 0%
如何使用 R 计算一个状态作为中位数的概率?提前致谢。
解决方案
这是一个 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%
推荐阅读
- python - 熊猫合并python排序数据框
- android - C++ 协程和 ANDROID 标志
- c++ - 这个简单的 Mutex 没有任何作用
- c - 为什么 GNU 科学库不允许列多于行的矩阵进行奇异值分解?
- r - 计算df中时间间隔的观察总和
- javascript - 如何根据应用脚本中的范围值设置条件
- winforms - 如何获取图片框内图像的鼠标点击坐标(不是图片框鼠标点击坐标而是图像像素坐标)
- javascript - vuedraggable 背景使 div 不可拖动
- python - 如何使用 pandas/numpy/python 数学库计算平均绝对误差 (MAE) 和平均有符号误差 (MSE)?
- node.js - 防止 API 调用中的潜在竞争条件?