使用car::Boot bootstrap逻辑回归模型时出现'low'变量未找到错误
问题原因与解决方案
你遇到的object 'low' not found错误,是因为car::Boot函数在重抽样时,无法正确从模型的调用环境中定位到变量。这通常和你用~ .简化公式的写法有关,Boot函数解析这种简化公式时容易出现环境匹配问题。
解决办法(任选其一即可)
办法1:明确写出模型公式的所有自变量
把原来用.的公式改成具体变量名,避免简化写法:
data(birthwt, package = "MASS") data <- as.data.frame(birthwt) data$low <- as.factor(data$low) # 明确列出所有自变量,替代~ . - bwt - age - ftv pmod <- glm(low ~ lwt + race + smoke + ptl + ht + ui, data = data, family = binomial) boot_results <- car::Boot(pmod, R = 100)
办法2:调用Boot时明确指定data参数
在car::Boot中直接传入你的数据框,帮它明确数据来源:
data(birthwt, package = "MASS") data <- as.data.frame(birthwt) data$low <- as.factor(data$low) pmod <- glm(low ~ . - bwt - age - ftv, data = data, family = binomial) boot_results <- car::Boot(pmod, R = 100, data = data)
办法3:改用boot包实现bootstrap
如果上述方法仍有问题,可以用boot包的核心函数来实现,逻辑更直观:
library(boot) data(birthwt, package = "MASS") data <- as.data.frame(birthwt) data$low <- as.factor(data$low) # 定义bootstrap要提取的统计量(这里是模型系数) boot_fun <- function(data, indices) { d <- data[indices, ] fit <- glm(low ~ . - bwt - age - ftv, data = d, family = binomial) return(coef(fit)) } # 运行bootstrap boot_results <- boot(data = data, statistic = boot_fun, R = 100)
内容的提问来源于stack exchange,提问作者enfield
相关产品推荐
相关产品推荐

