R语言逻辑回归:自定义系数计算预测值的可行性问询
用自定义固定系数计算逻辑回归预测值的正确姿势
嘿,我太懂你为啥直接改results$coefficients没效果了——R返回的glm对象可不止存了系数这么简单,里面还藏着预计算的中间结果(比如$linear.predictors),调用predict()的时候,它经常会优先用这些缓存好的值,完全没搭理你刚修改的系数!给你几个靠谱的解决办法,按需选就行:
方法1:手动计算(最直接,零坑点)
逻辑回归的预测概率公式本来就很清晰,直接自己算反而最省心:
预测概率 = 1 / (1 + exp(-(截距项 + 自变量系数*X)))
假设你的原始数据存在data_df里,直接写代码就行:
# 替换成你想用的截距和系数 intercept <- 0.9 x_coef <- 1.2 # 计算预测概率 data_df$custom_pred <- 1 / (1 + exp(-(intercept + x_coef * data_df$X)))
这个方法完全绕开原模型对象,想换什么系数直接改数值就行,灵活得很。
方法2:改造模型对象让predict()认新系数
如果你偏想用predict()函数,那得把模型对象里的关键部分都更新到位,不能只改系数:
# 先复制原模型,别直接改原对象,留个备份 custom_model <- results # 修改成你想要的系数 custom_model$coefficients <- c(0.9, 1.2) # 重点!清空预计算的线性预测值,不然predict会用旧的结果 custom_model$linear.predictors <- NULL # 现在调用predict就会用新系数计算了 custom_pred <- predict(custom_model, type = "response")
为啥要清空$linear.predictors?因为这个属性存在时,predict.glm()会直接拿它转换得到响应值,根本不会重新用新系数计算线性预测项。把它设为NULL,函数才会老老实实重新计算。
方法3:用offset批量测试多组系数
如果你要测试好几组不同的系数,用offset参数会更高效:
# 先搞个只有截距的空模型(保证predict不会自带原模型的系数) null_model <- glm(Y ~ 1, data = data_df, family = binomial(link='logit')) # 直接把自定义的线性预测值传给offset # 比如测试截距0.9、X系数1.2的情况 custom_pred <- predict(null_model, newdata = data_df, type = "response", offset = 0.9 + 1.2 * data_df$X)
换系数的时候只要改offset里的表达式就行,不用每次折腾模型对象。
内容的提问来源于stack exchange,提问作者Whitebeard13
相关产品推荐
相关产品推荐

