【问题标题】:Boostraping in hierarchical data in RR中分层数据的引导
【发布时间】:2021-04-13 15:39:57
【问题描述】:

我有一个如下形式的数据集:

dat <- expand.grid(cat=factor(1:4), lab=factor(1:10))
dat <- cbind(dat, x=runif(18), y=runif(18, 2, 5)) 

我在 10 个实验室中观察了 4 只猫。

现在我想通过重采样来模拟这个数据集中的样本,以便:

在 5 个(随机)实验室中观察到每只猫并且每个实验室观察到 50%(或 2 只)随机猫。

老实说,我无法解决这个问题...提前致谢

【问题讨论】:

    标签: r


    【解决方案1】:

    这类事情一般用函数最简单。

    此函数获取数据并首先过滤要从中采样的实验室数量,然后对每个实验室的猫进行采样。

    library(dplyr)
    dat <- expand.grid(cat=factor(1:4), lab=factor(1:10)) %>% 
            mutate(x = runif(nrow(.)),
                   y = runif(nrow(.), 2, 5))
    
    samplr <- function(dat, nlab = 5, ncat = 2){
    
      dat %>% 
        filter(lab %in% sample(unique(dat$lab), nlab)) %>% 
        group_by(lab) %>% 
        filter(cat %in% sample(unique(dat$cat), ncat))
    
    }
    
    samplr(dat)
    

    然后您可以更改被采样的猫或实验室的数量

    samplr(dat, nlab = 4, ncat = 3)
    

    【讨论】:

    • 感谢您的回答,但我的问题不够精确。所需的输出是一个 20 行的数据框,其中 all 表示“实验室”,并在每个实验室中观察到 2 只“猫”。同时我希望每只“猫”在相同数量(在本例中为 5 个)的“实验室”中被观察到。换句话说,我想产生一个平衡的(相对于“猫”和“实验室”因素)子样本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2023-01-22
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多