R语言模拟研究:使用for循环批量生成95%置信区间的实现问题
R语言for循环批量生成95%置信区间问题解答
错误原因
你之前的代码无法正常运行核心有两个问题:
- 存储结构错误:你用
rep(NA,10)生成了一维向量存储结果,但每个95%置信区间包含上下限两个值,无法塞进一维向量的单个元素中,需要提前创建10行2列的矩阵存储,每行对应一组置信区间的上下限。 - 逻辑位置错误:样本生成、置信区间计算的代码放在了for循环外部,只会运行一次,即使循环执行10次也只能得到同一个置信区间,必须把这部分逻辑放到循环内部,每次迭代重新生成随机样本、计算新的置信区间。
基础功能实现(单组置信区间)
原始可正常运行的单组95%置信区间生成代码如下:
set.seed(10) ransamp <- rnorm(30, 100, 5) x.bar <- mean(ransamp) n <- length(ransamp) me.95 <- qt(0.05/2, df = (n-1), lower.tail = FALSE) * sd(ransamp) / sqrt(n) ci.95 <- c(x.bar - me.95, x.bar + me.95) ci.95
最终可行代码
你后续找到的实现方案已经修复了上述两个问题,可正常输出10组置信区间:
matrix1 <- matrix(NA, nrow = 10, ncol = 2) set.seed(10) loop1 <- for(i in 1:10){ ransamp <- rnorm(30, 100, 5) x.bar <- mean(ransamp) n <- length(ransamp) me.95 <- qt(0.05/2, df = (n-1), lower.tail = FALSE) * sd(ransamp) / sqrt(n) ci.95 <- c(x.bar - me.95, x.bar + me.95) matrix1[i, 1] <- x.bar - me.95 matrix1[i, 2] <- x.bar + me.95 } matrix1
如果需要进一步简化代码,也可以直接把ci.95赋值给矩阵的整行:
matrix1[i, ] <- ci.95
效果和分别给两列赋值完全一致。
内容的提问来源于stack exchange,提问作者Scott Hebert
相关产品推荐
相关产品推荐

