如何使用rep_slice_sample()在不同观察数的组内随机采样

问题描述 投票:0回答:1

我正在为具有引导值的组构建置信区间,但在创建多个重新采样的数据集来构建我的置信区间时遇到困难。

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

我错过了什么?

r dplyr tidyverse resampling
1个回答
0
投票

我认为一旦你将数据分成物种而不是群体内的数据,应用起来会更容易。可能有一些漂亮的 tidyverse 方法可以在不拆分的情况下完成此操作,但我认为下面的代码可以满足您的意图。您也可以使用

rep_slice_sample
代替最后一行,但我不想不必要地引入另一个包。
data.table::rbindlist()

© www.soinside.com 2019 - 2024. All rights reserved.