【发布时间】:2012-03-15 10:21:04
【问题描述】:
我的目标是使用自举(1000 次重复)来计算 r(皮尔逊相关系数)的空分布、均值和 CI,这些与从我的 600 个唯一个体(ID )。我最近从 SAS 切换到 R,我将使用“procsurveyselect”来生成数据集。问题:
- 生成这些结果的最有效方法是什么(请参阅下面的尝试)?
- 在我的示例中,我将如何使用 set.seed 命令来复制我的结果?
具有 600 个人和相关特征值的模拟起始数据集:
ID <- seq(1, 600, by = 1)
x <- rnorm(600, m = 7, sd = 2)
X <- as.data.frame(cbind(ID, x))
然后我生成 r 的 1000 次重复并计算 95% CI:
for (i in 1:1000) {
X.sample <- X[ sample(1:nrow(X), 40, replace = FALSE), ]
X.sample.1 <- X.sample[1:20, ]
X.sample.2 <- X.sample[21:40, ]
Y <- as.data.frame(cbind(X.sample.1$ID, X.sample.1$x, X.sample.2$ID, X.sample.2$x))
cor.results <- cor.test(Y[,2], Y[,4], alternative = c("greater"), method = c("pearson"))
Z[i] <- cor.results$estimate
}
error <- qt(0.975, df = (length(Z) - 1)) * (sd(Z))/sqrt(length(Z))
【问题讨论】:
-
只需几个 cmets 重新编码简洁...
ID列在这里似乎无关紧要,但如果你确实想要它,ID <- 1:600会做的伎俩。在这种情况下,我看不出有任何理由使用data.frame,因为您的ID和x是相同的数据类型(数字)。据我所知,matrix操作通常比data.frame操作快。请参阅下面的解决方案以了解其他一些节省时间的方法。
标签: r random-sample statistics-bootstrap