使用Bootstrap法估计线性回归斜率95%置信区间的R实现问题
错误原因说明
你之前计算标准误返回NA,是因为你仅用原始数据集计算了1次斜率,slope是单个数值,sd()对单个数值计算会返回NA,自然无法得到有效结果。Bootstrap方法的核心是通过多次有放回重抽样得到多个斜率估计值,再基于这组估计值计算置信区间。
完整实现代码
# 原始数据生成代码 set.seed(1) n <- 100 x <- rnorm(n) y <- 5 + 3*x + rnorm(n, mean = 0, sd = 0.3) df <- data.frame(x = x, y = y) # 初始化向量存储100次Bootstrap得到的斜率 boot_slopes <- numeric(100) # 执行100次Bootstrap重抽样 for (i in 1:100) { # 有放回抽取行索引 sample_idx <- sample(1:n, size = n, replace = TRUE) # 生成重抽样数据集 boot_df <- df[sample_idx, ] # 拟合模型提取斜率存入向量 boot_slopes[i] <- lm(y ~ x, data = boot_df)$coefficients[2] } # 方法1:分位数法计算95%置信区间(Bootstrap最常用的方法) ci_quantile <- quantile(boot_slopes, c(0.025, 0.975)) print("分位数法95%置信区间:") print(ci_quantile) # 方法2:标准误法计算95%置信区间 ci_se <- mean(boot_slopes) + c(-1.96, 1.96) * sd(boot_slopes) print("标准误法95%置信区间:") print(ci_se)
结果说明
在你设定的set.seed(1)的前提下,运行上述代码得到的置信区间会非常接近你预期的(2.95, 3.05)。如果需要更稳定的估计结果,可以将Bootstrap抽样次数从100次调整为1000次,区间估计的精度会进一步提升。
内容的提问来源于stack exchange,提问作者user16914149
相关产品推荐
相关产品推荐

