gpt4 book ai didi

R 引导重采样,每个 id 有多个观察值,并返回重采样数据作为结果

转载 作者:行者123 更新时间:2023-12-04 11:01:40 24 4
gpt4 key购买 nike

我正在尝试为我的数据做一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com