R语言中基于泰坦尼克数据集的逻辑回归Bootstrap绘图报错排查求助
问题根源与解决方法
你遇到的问题核心是bootstrap函数没有真正使用抽样后的数据集,导致每次拟合模型都用的是原始数据,所以所有bootstrap重复计算的系数完全一致,自然偏差和标准误为0,绘图时也会提示所有t*值相同。
具体错误点
看你的logit_test函数:
logit_test <- function(data, indices) { dt <- data[indices,] # 这里已经抽取了bootstrap样本 fit <- glm(Clean_data$Survived ~ Fare, data = Clean_data, family = "binomial") # 但这里还是用原始的Clean_data! return(coef(fit)) }
你虽然创建了抽样后的子集dt,但拟合glm时完全没用到它,而是硬编码了原始数据集Clean_data,这就导致每次bootstrap迭代都在同一个数据集上拟合模型,系数结果完全一样,bootstrap的抽样就失去了意义。
修正后的代码
把glm的数据集换成抽样后的dt,并且不要硬编码原始数据的列:
library(boot) set.seed(50000) logit_test <- function(data, indices) { dt <- data[indices,] # 抽取当前bootstrap样本 # 用dt拟合模型,而不是原始的Clean_data fit <- glm(Survived ~ Fare, data = dt, family = "binomial") return(coef(fit)) } # 运行bootstrap boot_strap <- boot( data = Clean_data, statistic = logit_test, R = 1000 # 建议增加重复次数,100次可能不够稳定 ) # 计算95%置信区间 boot.ci(boot.out = boot_strap, type = c("basic")) # 查看结果和绘图 boot_strap plot(boot_strap, index=2)
额外建议
- 增加
R的数值:100次bootstrap重复可能不足以得到稳定的置信区间,建议设置为1000甚至5000(根据你的计算资源调整)。 - 检查数据完整性:确保
Clean_data中没有缺失值,可以用na.omit(Clean_data)预处理,避免拟合模型时出错。 - 尝试多种置信区间类型:除了
basic,还可以试试normal、percentile类型,对比结果是否一致。
内容的提问来源于stack exchange,提问作者WhiteHill
相关产品推荐
相关产品推荐

