欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

R语言----逻辑回归实例(R包mtcars数据集举例)

程序员文章站 2022-07-14 21:12:59
...

简单逻辑回归模型可以先参考这篇文章学习下
https://blog.csdn.net/weixin_41744624/article/details/105506951

数据预览

我们使用的是R自带包mtcars中的数据来举例,其中响应变量(y)是数据集中的"am"

异常值检验

首先来检查一下数据集的异常值(缺失、离群、重复),需要根据数据的具体情况确认是否去除,本例中不考虑重复值

离群值
可以选择箱线图,mvoutlier包中的sing2等函数
在此我们选择箱线图演示,绘制数据集中预测变量(x)与am的关系,查看有无离群值:

boxplot(mtcars$mpg~am,mtcars)

R语言----逻辑回归实例(R包mtcars数据集举例)
缺失值

rowSums(is.na(raw_data))

R语言----逻辑回归实例(R包mtcars数据集举例)

缺失值处理可以采取如下分割数据集策略,本例中没有缺失值:

>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)

R语言----逻辑回归实例(R包mtcars数据集举例)
发现警告:拟合概率算出来是数值零或一
拟合出来的值全都是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")

R语言----逻辑回归实例(R包mtcars数据集举例)

drop1(logit.step)

R语言----逻辑回归实例(R包mtcars数据集举例)
我们观察到其中"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语言----逻辑回归实例(R包mtcars数据集举例)