以下内容来自公众号:R语言与SPSS学习笔记
继续利用R自带数据集Titanic介绍非条件二分类logistic回归模型。忘记上次所学内容的小伙伴可以查看利用R做logistic回归(一)
利用logistic回归模型可以预测船上人员的生还概率,默认情况下,这个概率大于0.5,就会被判断为生还,否则判断为死亡。实际情况与模型判断多少会不一样,这种情况下,判断正确率便是衡量该模型好坏的一个标准。
#预测所有人的生还概率
predicted <- predict(fit, newdata = Titanic,type="response")
#将概率转化为生还或者死亡
pred.surv <- as.numeric(predicted > 0.5)
labels=c("p.No","p.Yes")
pred.surv <- labels[pred.surv+1]
#把预测的分类与原数据合并
df <- as.data.frame(Titanic, stringsAsFactors = FALSE)
df <- cbind(df,pred.surv,predicted)
# 制作混淆矩阵,加权分析用到questionr包
library(questionr)
confus <- wtd.table( df$Survived, y = pred.surv, weights = df$Freq,
digits = 3, normwt = FALSE, useNA = c("no", "ifany", "always"),
na.rm = TRUE, na.show = FALSE, exclude = NULL)
confus混淆矩阵如下:
#计算每个格子频率
prop.table(confus)
这个模型正确率为0.6197+0.1586=0.7783,即77.83%。对于这个混淆矩阵,也可以计算灵敏度特、异度等评价指标,此处略。
除此之外,还可以用pROC包计算ROC曲线下面积(AUC)来衡量:
library(pROC)
#将加权数据转换为原始数据才可以用roc函数
resp <- rep(df$Survived,times=df$Freq)
pred <- rep(df$predicted,times=df$Freq)
roc(resp,pred,plot=TRUE,smooth=TRUE)
AUC为0.7597,不是很好,也算勉强可以。
ROC光滑曲线长这样:
由此可见,虽然ROC的AUC不够0.8,但也还是可以利用该模型做粗略预测的。
如果单纯想看拟合效果,也可以用AIC或者BIC函数:
AIC(fit)
结果为2222.061。这个值越小,表示模型拟合越好。此处没有比较,所以看不出拟合好不好。