r - R中二进制值的随机化测试
问题描述
我有一个数据集,其中包含 Yes No 的 Cancer 值。下面是数据集的示例
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% 的数据集。然后取每个样本的 Cancer 的 yes 值的比例。从这 5000 个值中,我想制作来自 Cancer Yes 的 5000 个比例值的直方图,并获得该直方图的平均值、中位数、四分位数和标准差的摘要。
下面的代码计算比例。但现在我需要它来自 10% 的数据集,5000 次,并在带有摘要的直方图中
resample <- sample(dat, replace = TRUE)
proportion <- prop.table(table(resample$Cancer))
我可以找到一些如何使用数值而不是二进制值来执行此操作的示例。但是我怎样才能用二进制值执行这样的测试呢?
解决方案
鉴于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)
推荐阅读
- python - Python:是否有一个循环函数来总结这一点?
- mongodb - Mongo DB搜索查询不给出结果
- niagara-4 - 如何在 Niagara-4 中获取站点正常运行时间(开始时间)信息?
- api - 什么是合适的 woo-commerce API 来创建带有归属的订单
- c++ - 在 std::qsort 的比较函数中处理错误情况
- ruby - IO.pipe 上的 Ruby readpartial 不会引发 EOFError
- python - 我不明白为什么会发生 SettingWithCopyWarning
- html - 用同样不起作用的 flex 替换不起作用的 float
- c - C11:如何快速将char数组转换为int,然后修改int和更新char数组
- uwp - 我应该使用哪种视觉状态自适应触发方法来跨多个设备和分辨率运行 uwp 应用程序?