R中二进制值的随机化检验

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

我有一个癌症的数据集,是否。下面的数据集示例

set.seed(42)
cancer <- sample(c("yes", "no"), 200, replace=TRUE) 
agegroup <- sample(c("35-39", "40-44", "45-49"), 200, replace=TRUE)  
agefirstchild <- sample(c("Age < 30", "Age 30 or greater", "nullipareous"), 200, replace=TRUE) 
dat <- data.frame(cancer, agegroup, agefirstchild)

我想从这个数据集中减去5000个样本。每个样本包含数据集的10%。然后取每个样品的“是”值的比例。然后我要从5000个值中绘制出来自Cancer Yes的5000个比例值的直方图,并获得该直方图的均值,中位数,四分位数和标准差的摘要。

下面的这段代码计算比例。但是现在我需要数据集的10%,5000次并在带有摘要的直方图中使用它

resample <- sample(dat, replace = TRUE)
proportion <- prop.table(table(resample$Cancer))

我可以找到一些使用数字值而不使用二进制值的方法的示例。但是如何使用二进制值执行这样的测试?

r
1个回答
0
投票

鉴于您上面建议的数据集dat,您可以循环5000次,每次保持cancer=="yes"的比例,如下所示:

samplesize <- nrow(dat)*0.10
result_vec <- vector(length=samplesize)
for(i in 1:5000) {
    rows_to_keep <- sample(1:nrow(dat), size=samplesize, replace=F)
    result_vec[i] <- mean(dat$cancer[rows_to_keep] == "yes")
}

hist(result_vec)

这里带有二进制变量的“技巧”是,当条件为真/假时,首先创建一个1和0的向量,然后取该向量的平均值。这为您提供条件成立的次数的百分比。

如果您要计算其他感兴趣的数量(例如5000比例的标准偏差),则可以执行:

sd(result_vec)
© www.soinside.com 2019 - 2024. All rights reserved.