R 使用每个 id 的多个观测值进行引导重采样,并返回重采样数据作为结果

标签 r resampling statistics-bootstrap

我正在尝试对我的数据进行引导。我的数据 (df) 具有以下形状。

id    v1    v2
1    1    1
1    0    1
1    0    1
2    2    0
2    1    1
2    0    0

据我了解,在 R 中初始化 Bootstrap 时,重采样(通过重新放置)是在行级别完成的,对吗?

所以设置某事。像:

boot_function <- function(data, i)
{boot_data <- data[i,]}

但是,我的第一个问题是,在每个 id 有多个观察值需要在 Bootstrap 中保存在一起的情况下,我该如何设置?因此,在我的示例中,在进行引导时,我不能简单地在行中进行采样,但我需要在 id 中进行采样。所以代替上面的

我用的是这个:

boot_function2 <- function(data, i)
{boot_data <- data[data$id %in% i,]}

这是正确的方法吗?

与上述场景相关,我想检查我的方法是否正确,所以我想我只是检查重新采样的样子,但我不知道如何返回单个引导样本数据帧。任何想法? (而且我知道,如果我的原始数据很大并且我进行了 2000 次重复,则返回对象可能会很大,所以我可能只想用 R=10 左右进行抽查)。

最佳答案

这是一种方法。我首先会生成一些假数据:

ids <- rep(1:3, times = 10)
values <- rnorm(30)

dat <- data.frame(ids, values)

现在我们有了数据,我们可以生成集群引导函数。这将从每个集群内进行采样并返回一个新的数据帧。然后您可以应用您的测试统计数据:

library(tidyverse)

cluster_boot_function <- function(x){

  clusted_boot <- dat %>% 
    group_by(ids) %>% 
    nest() %>%
    mutate(samps = map(data, ~sample(.$values, size = 5, replace = T))) %>% 
    select(ids, samps) %>% 
    unnest(cols = samps)


  results <- clusted_boot %>% 
    group_by(ids) %>% 
    summarise(mu = mean(values))

  results
}

现在您只需要重复应用它(另请注意,函数中的“x”不会执行任何操作,我只需要在下一步中使用它)。

这里我使用 map_dfr 返回每次迭代的摘要统计信息:

out <- map_df(1:100, cluster_boot_function, .id = "iteration")

这将为您提供 Bootstrap 每次迭代的统计信息:

# A tibble: 300 x 3
   iteration   ids    mu
   <chr>     <int> <dbl>
 1 1             1 0.150
 2 1             2 0.150
 3 1             3 0.150
 4 2             1 0.150
 5 2             2 0.150
 6 2             3 0.150
 7 3             1 0.150
 8 3             2 0.150

从此您可以将其扩展到您需要执行的任何类型的建模。

关于R 使用每个 id 的多个观测值进行引导重采样,并返回重采样数据作为结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58763866/

相关文章:

r - 按组观察两个连续值后进行过滤

python - 如何在 Python 中有效地将字符串类型的数据框列转换为日期时间?

python - 使用 "bin size"/"frequency"对 Pandas 数据帧重新采样

r - 引导分层/多级数据(重采样集群)

html - 2 个内联表 div 之间的图像 - 不适用于 Bootstrap

r - 在 rstudio 中安装 rgdal 库 - 在 libgdal 中找不到 GDALAllRegister

r - R中多行取一列的最大值

python - Pandas 数据框每天重新采样和计数事件

python - Pandas 重新采样并填充最后留下 NaN

在 igraph 中重新连线以获取 niter 参数的 R 含义