我正在为具有引导值的组构建置信区间,但在创建多个重新采样的数据集来构建我的置信区间时遇到困难。
以
palmerpenguins
库为例:
library(tidyverse)
library(infer)
library(palmerpenguins)
总共有 344 个观测值,每个物种都有不同数量的观测值:
nrow(penguins)
[1] 344
penguins %>% group_by(species) %>% count()
# A tibble: 3 × 2
# Groups: species [3]
species n
<fct> <int>
1 Adelie 152
2 Chinstrap 68
3 Gentoo 124
我希望能够按物种进行分组,并为每个物种提取多个样本,同时使用每组的原始观察数。
set.seed(100)
slices <- penguins2 %>%
group_by(species) %>%
rep_slice_sample(prop = 1, replace = TRUE, reps = 10)
这应该给我完整的新数据集中的
344 * 10 = 3440
行。这是事实,但是当您查看数据时,您会发现每个重复都有不同数量的观察值。对于所有 Adelie,每个样本的 n 应为 152,chinstrap 应为 68,Gentoo 应为 124。相反,我们发现:
slices %>% group_by(species, replicate) %>% count()
# A tibble: 30 × 3
# Groups: species, replicate [30]
species replicate n
<fct> <int> <int>
1 Adelie 1 148
2 Adelie 2 147
3 Adelie 3 148
4 Adelie 4 151
5 Adelie 5 138
6 Adelie 6 157
7 Adelie 7 161
8 Adelie 8 157
9 Adelie 9 151
10 Adelie 10 138
# ℹ 20 more rows
# ℹ Use `print(n = ...)` to see more rows
我错过了什么?
我认为一旦你将数据分成物种而不是群体内的数据,应用起来会更容易。可能有一些漂亮的 tidyverse 方法可以在不拆分的情况下完成此操作,但我认为下面的代码可以满足您的意图。您也可以使用
rep_slice_sample
代替最后一行,但我不想不必要地引入另一个包。data.table::rbindlist()