逻辑回归预测的输出

机器算法验证 r 可能性 物流
2022-02-02 00:40:07

我使用以下代码创建了一个逻辑回归:

full.model.f = lm(Ft_45 ~ ., LOG_D)
base.model.f = lm(Ft_45 ~ IP_util_E2pl_m02_flg)
step(base.model.f, scope=list(upper=full.model.f, lower=~1),
     direction="forward", trace=FALSE)

然后我使用输出来创建最终模型:

final.model.f = lm(Ft_45 ~ IP_util_E2pl_m02_flg + IP_util_E2_m02_flg + 
                           AE_NumVisit1_flg + OP_NumVisit1_m01_flg + IP_TotLoS_m02 + 
                           Ft1_45 + IP_util_E1_m05_flg + IP_TotPrNonElecLoS_m02 + 
                           IP_util_E2pl_m03_flg + LTC_coding + OP_NumVisit0105_m03_flg +
                           OP_NumVisit11pl_m03_flg + AE_ArrAmb_m02_flg)

然后我使用 predict 函数预测了一组不同数据的结果:

log.pred.f.v <- predict(final.model.f, newdata=LOG_V)

我已经能够使用建立一个令人愉悦的 ROC 曲线并创建一个表格来建立我所期望的响应的敏感性和特异性。

但是,我要做的是为每一行数据确定 Ft_45 为 1 的概率是多少。如果我查看 log.pred.fv 的输出,例如,我会得到:

1 -0.171739593    
2 -0.049905948    
3 0.141146419    
4 0.11615669    
5 0.07342591    
6 0.093054334    
7 0.957164383    
8 0.098415639    
.
.
.
104 0.196368229    
105 1.045208447    
106 1.05499112

由于我对自己正在做的事情只有一个初步的了解,所以我很难理解如何解释负值和高于 1 的值,因为我预计概率在 0 和 1 之间。

所以我的问题是我只是错过了一个需要转换输出的步骤,还是我完全错了。提前感谢您提供的任何帮助。

2个回答

首先,看起来您构建了一个常规线性回归模型,而不是逻辑回归模型。要构建逻辑回归模型,您需要使用glm()with family="binomial" ,而不是lm()

假设您使用自变量构建以下逻辑回归模型x1,x2, 和x3预测事件的概率y

logit <- glm(y~x1+x2+x3,family="binomial")

该模型具有回归系数β0,β1,β2β3.

如果你这样做predict(logit),R 将计算并返回b0 + b1*x1 + b2*x2 + b3*x3

回想一下,您的逻辑回归方程是y=log(p1p)=β0+β1x1+β2x2+β3x3.

所以,要得到你想要的概率,你需要解这个方程p.

在 R 中,您可以执行以下操作:

pred <- predict(logit,newdata=data) #gives you b0 + b1x1 + b2x2 + b3x3
probs <- exp(pred)/(1+exp(pred)) #gives you probability that y=1 for each observation

查看 的文档,似乎就像在调用predict.glm中使用额外的参数一样简单:predict

 type = "response"

请参阅文档:

type - 所需的预测类型。默认值在线性预测变量的范围内;另一种“响应”是在响应变量的范围内。因此,对于默认二项式模型,默认预测是对数赔率(logit 标度上的概率),type = "response" 给出预测概率。"terms" 选项返回一个矩阵,给出模型公式中每个项在线性预测尺度上的拟合值。这个参数的值可以缩写