R语言之Logic回归分析

理论上,回归分析是在目标变量为连续型数据的情况下建模的,它不能处理目标变量为分类型数据的情况。

而logic回归分析的思路是把分类变量(“是否开通VIP”)转化为连续变量(“开通VIP的概率”),进而使用回归分析的方法间接地研究分类分析的问题。

一、原理

假设vip变量为分类变量,其取值只有0和1,这是分类型变量,无法通过回归分析建模。

但是,vip取值为1的概率却是一个连续型变量(prob.vip),可以使用回归分析为prob.vip建模:

prob.vip=k1*x1+k2*x2+k3*x3+k4*x4+b

由于k1*x1+k2*x2+k3*x3+k4*x4+b 的取值范围是(-∞,+∞),而prob.vip的范围是[0,1],因此,使用y=1/(1+exp(-x))函数进行转化:

prob.vip=1/(1+exp(-(k1*x1+k2*x2+k3*x3+k4*x4+b)))

当prob.vip>0.5,则可以预测vip.predict=1,否则为0。

注:回归分析使用最小二乘法拟合模型参数;logic回归则使用最大似然法来估算。

二、R语言实现

glm()是用R语言实现logic回归分析的核心函数。

参数:

formula:设置线性拟合模型的形式

family:glm的算法族。logic回归分析,family设置为binomial("logit")

data:样本数据

代码:

(1)建立logic回归模型
data.glm<- glm(vip~.,data=vip.data,family=binomial("logit")) summary(data.glm) 可以使用step函数对模型进行修正: data.glm<- step(data.glm)
(2)模型glm的输出项
模型参数:data.glm$coefficients
线性模型的预测数据:data.glm$linear.predictors
vip等于1的概率prob.vip: data.glm$fitted.values
线性拟合模型的残差:data.glm$residuals
(3)模型预测
预测测试数据:
predict.vip <- ifelse(data.glm$fitted.values>= 0.5,1,0)
predict.vip <- as.factor(predict.vip)
预测新数据:
new.predict.vip<- predict(data.glm,newdata=test.vip.data) 线性拟合数据的预测值
new.predict.vip<- 1/(1+exp(-new.predict.vip)) 概率值
new.predict.vip<- as.factor(ifelse(new.predict.vip>= 0.5,1,0))预测最终值
(4)模型性能衡量
performance<- length(which((predict.vip==vip.data$vip)==TRUE))/nrow(vip.data) 正确率
其中,length(which((predict.vip==vip.data$vip)==TRUE))表示预测值与实际样本值元素取值相等的数目。