京公网安备 11010802034615号
经营许可证编号:京B2-20210330
R数据分析案例:逻辑回归
逻辑回归,也称之为逻辑模型,用于预测二分结果变量。在逻辑模型当中,输出结果所占的比率就是预测变量的线性组合。
这篇文章将要使用下面这几个包,而且你们需要保证在运行我所举的例子的时候,你已经把这些包都装好了。如果你还没装好这些包,那么,运行install.packages(“R包名称”)这个操作,或者你可能需要更新版本,运行update.packages()。
library(aod)
library(ggplot2)
library(Rcpp)
版本说明:本文基于R3.2.3进行测试的,一下是包的版本:
Rcpp:0.12.3 ggplot2:2.0.0 knitr:1.12.3
记住:本文意在要你知道如何用相关的指令进行逻辑回归分析,而并没有涵盖所有研究人员可能会做的事情,尤其是数据是没有进行清洗和查阅的,而且假设并非最严谨,其它方面也不会相当的标准。
案例
案例1: 假如我们对这些因素感兴趣,它们表示政治候选人是否赢得选举的因子,其中,我们把结果变量表示为0或1,也可以表达成赢或者输。而预测变量的利益可由一场运动中所投入的金额表示,或者是选举人所花的时间,再或者在职人员是否获得足够的支持。
案例2:一个研究者可能会对GRE(研究生入学考试成绩)、GPA(大学平均绩点),以及研究生学院的名誉感兴趣,因为它们影响学校的招生问题。这里,我们用允许/不允许这个二进制结果表示其因变量。
数据的描述
对于我们接下来要进行的数据分析来说,我们要对案例2的入学问题进行深入的探讨。我们有了通常情况下假设所产生的数据,而它们可从R的相关网站得到。记住,当我们要调用相关函数导入数据的时候,如果我们要具体表示一个硬盘驱动器的文件,我们需要打上斜杠(/),而不是反斜杠(\)。
这个数据集有二进制的结果(输出值,依赖),它表示允许。这里有3个预测变量:gre、gpa以及rank。我们把gre和gpa看作是连续变量。rank表示有4个值为1。这里,为0的那所学校声望最高,其它的这4所高校声望最低。这时,我们可以用summary()函数来汇总一下这个数据集的情况,而且,如果想要计算里面的标准差,我们可以使用sapply()函数,并在里面写上sd来获取其标准差。
你可能会考虑到的分析方法
接下来,我会列举一些你可能会用到的方法。这里所列举的一些方法相对来说比较合理,毕竟有些其他方法不能执行或者尤其局限性。
1.逻辑回归,也是本文的重点
2.概率回归。概率分析所产生的结果类似于逻辑回归。我们可以依据我们的需要进行有选择性的进行概率回归或逻辑回归。
3.最小二乘法。当你使用二进制输出变量的时候,这种模型就是常用于线性回归分析的,而且也可以用它来进行条件概率的运算。然而,这里的误差(例如残差)来自于线性概率模型,而且会影响到异方差性最小二乘法回归的正态误差检验,它也影响无效标准误差和假设性分析。想要了解更多关于线性概率模型的相关问题,可以查阅Long(1997,p.38-40)。
4.双组判别函数分析。这是一个多元的方法处理输出变量。
5.Hotelling 的T2。0/1的输出结果转换到分组变量中,而前一个预测值则成为输出变量。这样可以进行一个显著性测试,然而并没有给没个变量分别给一个系数,而且这对于某个变量根据影响情况调整到其它变量的程度是不清楚的。
使用逻辑模型
接下来的代码,通过使用glm()函数(广义线性模型)进行相关评估。首先,我们要把rank(秩)转换成因子,并预示着rank在这里被视为分类变量。
由于我们得到了模型的名字(mylogit),而R并不会从我们的回归中产生任何输出结果。为了得到结果,我们使用summary()函数进行提取:
1.在上面的结果中,我们首先看到的就是call,这提示我们这时的R在运行什么东西,我们设定了什么选项,等等。
2.接下来,我们看到了偏差残差,用于测量模型的拟合度。这部分的结果显示了这个分布的偏差残差,而针对每个使用在模型里的个案。接下来,我们讨论一下如何汇总偏差估计,从而知道模型的拟合结果。
3.下一部分的结果显示了相关系数,标准误差,z统计量(有时也叫Wald Z统计量),以及它的相关结果。gre和gpa都是同等重要的统计量,并作为rank的3个变量。逻辑回归系数给改变了在预测变量中增加一个单位的输出结果误差。
对于gre,每改变一个单位,输出结果的允许误差(相对于不允许来说)增加0.002。
对于gpa,每改变一个单位,入学的研究生的允许误差增加0.804。
ranK的指示变量的观察方法就有点不同了。例如,层在本科学习过的在rank的值是2,其它为1,使之允许误差变为-0.675。
我们可以使用confint()函数来获取相关的区间的预测信息。对于逻辑回归模型来说,其置信区间时基于异形对数似然函数求出来的。同样,我们得到的CL是基于默认方法求出的标准差算的。
我们可以调用aod包里的wald.test()函数来测试rank的所有影响。图表里的系数的顺序和模型里的项顺序是一样的。这样很重要,因为wald.test()函数就是基于这些模型的项顺序进行测试的。b提供了系数,而Sigma提供了误差项的方差协方差矩阵,而且最终,这些项告诉R哪些项用来进行测试,而在这种情况下,第4、5、6这三项作为rank的层次进行测试。
卡方检验算出来的值是20.9,这里涉及到3个自由度,p值算出来是0.00011,这预示着我们所假设的这些项之间具有显著的影响效果。
我们也可以测试而外的假设,这些假设包含rank里不同层次的差异。下面,我们通过测试得知rank=2的测试结果和rank=3的时候一样。下面的第一行代码创造的向量是1,这定义了测试里我们要执行的内容。在这种情况下,我们想要测试rank=2和rank=3(即模型的第4项、第5项)这两个不同的项所产生的差异(减)。为了对比这2项,我们对其中一项乘以1,另一项乘以-1。其它项不包含在测试里,所以它们统一都乘上0。第二行代码写上L=1,这告诉R基于向量为1时执行这次测试(并不是我们之前所选择的进行测试)。
卡方检验所在自由度为1的情况下算出来的结果为5.5,并得出相关的p值为0.019,这预示着rank=2和rank=3之间存在着显著的差异。
你一可以把系数指数化,并从误差率进行解读,而R会自动帮你算出来。为了要得到指数化系数,你可以告诉R你想要指数化(exp),而R也会按照你的要求把它们指数化,它属于mylogit(coef(mylogit))的一部分。我们可以使用相同的误差率以及它们的置信区间,并可先前就把置信区间指数化。把它们都放到其中一个图表,我们可以使用cbind系数和系数置信区间这些列整合起来。
现在,我们可以说gpa增加了一个单位,而研究生入学(反之就是没有入学的)的误差则在因子上增加2.23。对于更多关于误差率信息的解读,查看我们的FAQ页 How do I interpret odds ratios in logistic regression? 。注意,当R产生了这个结果时,关于误差率的拦截一般都不被解读。
你也可以使用预测概率来帮助你解读这个模型。预测概率可以均可由分类预测变量或连续预测变量计算出来。为了算出预测概率,我们首先要创建含有我们需要的独立变量来创建新的数据框。
我们将要开始计算每个rank值的预测概率的允许值,并计算gre和gpa的平均值。首先,我们要创建新的数据框:
这些值必须含有和你之前所创建的逻辑回归分析相同的名字(例如,在这个例子中,gre的就必须命名为gre)。既然,我们现在已经创建好了我们需要进行运算的数据框,那么我们可以告诉R根据这个来创建预测概率。第一行代码经过了压缩,我们现在就把它分开来,讨论这些值是怎样执行的。Newdata$rankP告诉R我们要根据数据集(数据框)的newdata1里的rankP创建一个新的变量剩余的指令告诉R这些rankP值应当使用prediction()函数进行预测。圆括号里的选项告诉R这些预测值应该基于分析mylogit进行预测,mylogit的值源自newdata1以及它的预测值类型就是预测概率(type=”response”)。第二行代码列举了数据框newdata1的值,尽管它不是十分理想,而这就是图表的预测概率。
在上面的预测结果中,我们看到来自最好的名校(rank=1)并被接收到研究生的本科生预测概率是0.52,而0.18的学生来自最低档次的学校(rank=4),以gre和gpa作为平均值。我们可以做相似的事情来创建一个针对不断变化的变量gre和gpa的预测概率图表。我们可以基于此作图,所以我们可以在200到800之间创建100个gre值,基于它的rank(1,2,3,4)。
newdata2 <- with(mydata,
data.frame(gre = rep(seq(from = 200, to = 800, length.out = 100), 4),
gpa = mean(gpa), rank = factor(rep(1:4, each = 100))))
这些代码所产生的预测概率(下面第一行)和之前算的一样,除非我们还想要对标准差进行要求,否则我们可以对置信区间作图。我们可以对关联规模进行预测,同时反向变换预测值和置信区间的临近值到概率中。
当然,使用图像描绘预测概率来解读和展示模型也是相当有用的。我们会使用ggplot2包来作图。下面我们作图描绘预测概率,和95%置信区间。
我们也许很想看到这个模型的拟合效果怎么样,而刚刚那样做是非常有用的,尤其是对比这些竞争的模型。Summary(mylogit)所产生的结果包含了拟合系数(下面展示了其系数),包含了空值、偏差残差和AIC。模型拟合度的一个衡量标准就是整个模型的显著程度。这个测试问了我们使用了预测值的模型是否比仅仅含有截距的模型(即,空模型)更加显著,而这个测试里的统计量是含有预测值的预测拟合指数和空模型的差,而且这个模型的统计量也是含有其自由度等于现有的模型(即,模型里的预测变量个数)和空模型的自由度之差的卡方分布。为了要找到这两个模型的偏差(即,这个测试的统计量),我们可以使用下面的指令:文章来源cda数据分析培训
这两个模型的自由度之差等于这个模型里预测变量的个数,而且我们可以按照下面的方法获取它:
最后,我们提取一下p值:
在自由度为5的情况下算出来的卡方是41.46,而相关的p值则小于0.001。这告诉我们,此模型的拟合效果比一个空模型所产生的拟合效果更加显著。这个,我们有时称它为似然比测试(偏差残差为-2*log似然值)。要看到它的对数似然,我们可以这样写:
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在数据统计分析、数据清洗、异常值识别与数据分布研究中,箱型图是最直观、高效、专业的可视化分析工具。相较于柱状图、折线图仅 ...
2026-05-29Tkinter是Python内置的标准GUI图形界面库,具备无需额外安装、调用简单、兼容性强、轻量化高效等优势,是Python快速开发桌面小程 ...
2026-05-29 很多分析师在设计标签时思路清晰,但真到落地环节却面临“数据在手,不知如何转化为可用标签”的困境:或因加工方式选择不当 ...
2026-05-29【核心关键词】大数据、经理、专业、金融、客户、传统、建模、数据产品、互联网金融、产品经理、数据分析、金融行业、数据模型 ...
2026-05-28 很多分析师每天和数据打交道,但当被问到“标签是什么”“标签和指标有什么区别”“标签体系如何设计”时,却常常答不上来。 ...
2026-05-28随着大数据技术的快速普及,各行各业积累了海量的用户数据、交易数据、生产数据与行为数据。单纯的数据统计与报表分析只能呈现表 ...
2026-05-28在Python网络请求、接口测试、数据爬取、业务对接开发中,Requests库是最简洁、最高效的HTTP请求工具,凭借简洁的语法、完善的适 ...
2026-05-272025 年,零售与服务行业的竞争已从 “经验驱动” 全面转向 “数据驱动”。中小企业门店普遍面临数据零散、分析浅层、决策凭感觉 ...
2026-05-27 很多数据分析师每天都在写SQL,但当被问到“数据查询语言(DQL)的本质是什么”“SELECT语句中各子句的书写顺序与实际执行顺 ...
2026-05-27在统计学分析、实验研究、业务数据复盘过程中,单因素方差分析是检验自变量对因变量是否存在显著影响的核心方法。其中,两个水平 ...
2026-05-26【核心关键词】算法、客户、大数据、互联网、调优、建模、模型优化、机器学习、评分卡模型、模型开发、智能风控、业务场景、数 ...
2026-05-26 很多数据分析师写过无数个 SELECT,但当被问到“新建一张表,该如何定义字段类型来保证数据质量”“创建视图和存储物理表有 ...
2026-05-26在数据清洗、统计分析与数据质量检测工作中,箱型图(又称箱线图、Box Plot)是最直观、最高效的可视化分析工具之一。相较于柱状 ...
2026-05-25在大数据分析、数据清洗、质量管控、风险监测等领域,异常数据识别是保障数据质量、确保分析结论精准、规避业务决策失误的核心基 ...
2026-05-25 很多数据分析师精通Excel函数和透视表,但当被问到“数据从哪里来”“表和视图有什么区别”“数据库管理系统和SQL是什么关系 ...
2026-05-25数字化经营时代,企业的市场竞争早已从经验决策转向数据决策。门店营收、用户转化、产品销量、成本损耗、存量资产等所有经营行为 ...
2026-05-22在MySQL数据库日常运维、业务数据校验、数据迁移与数据清洗场景中,自增主键ID的连续性校验是一项基础且关键的工作。MySQL的Auto ...
2026-05-22 很多企业团队并非缺乏指标,而是陷入“指标失控”:仪表盘上堆满实时跳动的数据,却无法回答“当前瓶颈在哪、下一步该做什么 ...
2026-05-22【核心关键词】大数据、可视化、存储、架构、客户、离线、产品、同步、实时、数据仓库、数据分析、数据可视化、存储数据、离线 ...
2026-05-21在电商流量红利消退、公域获客成本持续走高的当下,存量用户深度挖掘已成为店铺增收增效的核心抓手。相较于付费投放获取的陌生新 ...
2026-05-21