我正在尝试对我的数据进行引导。我的数据(df)具有以下形状。
id v1 v2
1 1 1
1 0 1
1 0 1
2 2 0
2 1 1
2 0 0据我所知,在R中初始化bootstrap时,重采样(使用reoplacement)是在行级别进行的,对吗?
所以设置某物。像这样:
boot_function <- function(data, i)
{boot_data <- data[i,]}然而,我的第一个问题是,在每个id都有几个观察值需要保存在bootstrap中的情况下,我该如何设置它?因此,在我的示例中,当执行bootstrap时,我不能简单地在行之间采样,但我需要在ids中采样。因此,不是像上面那样
我用的是这个:
boot_function2 <- function(data, i)
{boot_data <- data[data$id %in% i,]}这是正确的方式吗?
关于上面的场景,我想检查我的方法是否正确,所以我想我只是检查重采样是什么样子的,但我不知道如何返回单个引导样本数据帧。有什么想法吗?(我知道,如果我的原始数据很大,并且我正在进行2000次复制,那么返回的对象可能会相当大,所以我可能只想用R=10检查一下)。
发布于 2019-11-08 19:16:08
这是一种方法。我将首先生成一些假数据:
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由此,您可以将其扩展到您需要执行的任何类型的建模。
https://stackoverflow.com/questions/58763866
复制相似问题