logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释。所以实际中最为常用的就是二分类的logistic回归。
在R语言中,进行logistic回归的命令是通过广义线性模型进行的:fm <- glm(formula, family = binomial(link = logit),data=data.frame) ,下面以《统计建模与R软件》中的一个例子来说明用法。
如有50位病人,其中自变量有三项生理指标分别为x1,x2,x3。因变量y是二分变量,表示为生存时间是否在1年以上。数据和代码如下:
#首先将这四个变量建构一个数据框,取名为life
life = data.frame(
X1=c(2.5, 173, 119, 10, 502, 4, 14.4, 2, 40, 6.6,21.4, 2.8, 2.5, 6, 3.5, 62.2, 10.8, 21.6, 2, 3.4,5.1, 2.4, 1.7, 1.1, 12.8, 1.2, 3.5, 39.7, 62.4, 2.4,34.7, 28.4, 0.9, 30.6, 5.8, 6.1, 2.7, 4.7, 128, 35,2, 8.5, 2, 2, 4.3, 244.8, 4, 5.1, 32, 1.4),
X2=rep(c(0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2,0, 2, 0, 2, 0, 2, 0),
c(1, 4, 2, 2, 1, 1, 8, 1, 5, 1, 5, 1, 1, 1, 2, 1,1, 1, 3, 1, 2, 1, 4)),
X3=rep(c(0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1),
c(6, 1, 3, 1, 3, 1, 1, 5, 1, 3, 7, 1, 1, 3, 1, 1, 2, 9)),
Y=rep(c(0, 1, 0, 1), c(15, 10, 15, 10))
)
#然后获得一般线性模型结果
glm.sol<-glm(Y~X1+X2+X3, family=binomial, data=life)
summary(glm.sol)
#根据模型对某个具体病人做预测,得到其存活一年以上概率
pre<-predict(glm.sol, data.frame(X1=5,X2=2,X3=1))若要检测模型预测能力,可以利用ROC图来进行观察
p<-exp(pre)/(1+exp(pre))
首先用原数据代入模型得出预测概率,严格来讲训练和检测需要用不同的样本,这里暂时不考虑。
pre=predict(glm.sol,type='response')再利用ROCR包绘制ROC图以衡量模型的效果。
library(ROCR)另一个相关的衡量标准就是ROC图的曲线下面积,许多的数据挖掘大赛会用它来作为最终的评价指标,本例的auc得出是0.85
m=prediction(pre,life$Y)
plot(performance(m,'tpr','fpr'))
abline(0,1, lty = 8, col = "grey")
auc <- performance(m, "auc")
没有评论:
发表评论