在R中实现SAS Proc Logistic预测概率追加功能的方法问询
当然可以!在R里完全能实现你说的SAS Proc Logistic那种把预测概率追加到原数据集的功能,而且操作起来灵活又直观,给你两种常用的实现方式:
在R中实现逻辑回归预测概率追加到原数据
首先,先假设你已经用glm()拟合好了逻辑回归模型,这里用经典的mtcars数据集做示例:
# 拟合逻辑回归:以am(自动/手动变速箱)为二分类响应变量,wt和hp为自变量 logit_model <- glm(am ~ wt + hp, data = mtcars, family = binomial)
方法一:基础R原生实现(手动追加)
用R内置的predict()函数就能生成预测概率,指定type = "response"就能得到0-1之间的概率值(和SAS里的Pred=<phat>完全对应),然后直接把结果作为新列加到原数据框里:
# 把预测概率追加到原数据,新列命名为phat(你也可以改成Estimated Probability) mtcars$phat <- predict(logit_model, type = "response")
执行完这行代码,原数据框mtcars就多了一列phat,里面就是每条观测对应的预测概率,和SAS的效果一模一样。
方法二:用broom包自动追加(更省心)
如果你想要更自动化的方式,不用手动赋值,可以用broom包的augment()函数——它会自动把预测值、残差等一系列模型相关统计量追加到原数据里,直接生成带预测概率的新数据集:
# 首次使用需先安装broom包 # install.packages("broom") library(broom) # 自动生成带预测概率的数据集,.fitted列就是我们需要的预测概率 augmented_data <- augment(logit_model, type.predict = "response") # 可选:用dplyr把列名改成更直观的名字(比如phat) library(dplyr) augmented_data <- augmented_data %>% rename(phat = .fitted)
这个方法的好处是不用手动处理数据合并,还能顺便得到其他模型诊断信息,非常适合批量处理或需要更多统计量的场景。
额外小提示
- 如果你需要预测新数据集的概率,只需要在
predict()或augment()里加上newdata = 你的新数据框参数即可,用法和SAS处理新数据的逻辑一致。 - R默认不会直接修改原数据(除非你像方法一那样直接赋值),所以你可以灵活选择保留原数据,或者用新变量存储带预测值的数据集。
内容的提问来源于stack exchange,提问作者jrl




