R语言----逻辑回归实例(R包mtcars数据集举例)
简单逻辑回归模型可以先参考这篇文章学习下
https://blog.csdn.net/weixin_41744624/article/details/105506951
数据预览
我们使用的是R自带包mtcars中的数据来举例,其中响应变量(y)是数据集中的"am"
异常值检验
首先来检查一下数据集的异常值(缺失、离群、重复),需要根据数据的具体情况确认是否去除,本例中不考虑重复值
离群值
可以选择箱线图,mvoutlier包中的sing2等函数
在此我们选择箱线图演示,绘制数据集中预测变量(x)与am的关系,查看有无离群值:
boxplot(mtcars$mpg~am,mtcars)
缺失值
rowSums(is.na(raw_data))
缺失值处理可以采取如下分割数据集策略,本例中没有缺失值:
>d_n <- raw_data[which(rowSums(is.na(raw_data)) > 0),]
>d_nn <- raw_data[-which(rowSums(is.na(raw_data)) > 0),]
提取数据,分割训练集,测试集
d <- raw_data
# 保证实验可重复性
set.seed(110)
train <- createDataPartition(y=d$am,p=0.8,list=FALSE)
d_train <- d[train,]
d_test <- d[-train,]
回归模型建立
创建逻辑回归模型,首先考虑所有的相应变量与预测变量(am)的模型初步建立是否成功:
glm <- glm(am~.,family = binomial(link ='logit'),data = d_train)
发现警告:拟合概率算出来是数值零或一
拟合出来的值全都是0或者1,说明出现了过拟合的状态,过拟合的原因是噪音或者数据集太少,我们在前面判断的时候已经排除了离群值,所以可能原因应该是数据集太少造成的。
出现错误的解释可以参照这篇文章:
https://www.cnblogs.com/runner-ljt/p/4574275.html
回想一下,R包数据集中的变量有十几个,但是数据集却很少,难免会造成过拟合状态,所以我们选择使用逐步回归分析删除部分不重要的变量,逐步回归分析是以AIC信息统计量为准则(可以搜索赤池准则),通过选择最小的AIC信息统计量,来达到删除或增加变量的目的。
关于逐步回归分析可以参考我的这篇文章:
https://blog.csdn.net/weixin_41744624/article/details/105725381
逐步回归分析
logit.step <- step(glm, direction = "both")
drop1(logit.step)
我们观察到其中"gear的AIC也较为高,我们选择去除"
新模型建立及预测结果
# 使用去除变量后的数据进行模型训练
glm <- glm(am ~ qsec+carb,family = binomial(link ='logit'),data = d_train)
#预测模型
pre_test=predict(glm,newdata=d_test,type="response")
#返回预测模型和原数据的混淆矩阵,查看预测结果
confusionMatrix(as.factor(num_test),as.factor(d_test$am))
可以看出模型的准确率在83%左右
上一篇: R语言ISLR工资数据进行多项式回归和样条回归分析
下一篇: 用R语言建立logistic回归模型