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
又到一年年终时,各位打工人也迎来了展示成果的关键时刻 —— 年终述职。一份出色的年终述职报告,不仅能全面呈现你的工作价值, ...
2025-01-23“用户旅程分析”概念 用户旅程图又叫做用户体验地图,它是用于描述用户在与产品或服务互动的过程中所经历的各个阶段、触点和情 ...
2025-01-22在竞争激烈的商业世界中,竞品分析对于企业的发展至关重要。今天,我们就来详细聊聊数据分析师写竞品分析的那些事儿。 一、明确 ...
2025-01-22在数据分析领域,Excel作为一种普及率极高且功能强大的工具,无疑为无数专业人士提供了便捷的解决方案。尽管Excel自带了丰富的功 ...
2025-01-17在这个瞬息万变的时代,许多人都在寻找能让他们脱颖而出的职业。而数据分析师,作为大数据和人工智能时代的热门职业,自然吸引了 ...
2025-01-14Python作为一门功能强大的编程语言,已经成为数据分析和可视化领域的重要工具。无论你是数据分析的新手,还是经验丰富的专业人士 ...
2025-01-10完全靠数据决策,真的靠谱吗? 最近几年,“数据驱动”成了商界最火的关键词之一,但靠数据就能走天下?其实不然!那些真正成功 ...
2025-01-09SparkSQL 结构化数据处理流程及原理是什么?Spark SQL 可以使用现有的Hive元存储、SerDes 和 UDF。它可以使用 JDBC/ODB ...
2025-01-09在如今这个信息爆炸的时代,数据已然成为企业的生命线。无论是科技公司还是传统行业,数据分析正在深刻地影响着商业决策以及未来 ...
2025-01-08“数据为王”相信大家都听说过。当前,数据信息不再仅仅是传递的媒介,它成为了驱动经济发展的新燃料。对于企业而言,数据指标体 ...
2025-01-07在职场中,当你遇到问题的时候,如果感到无从下手,或者抓不到重点,可能是因为你掌握的思维模型不够多。 一个好用的思维模型, ...
2025-01-06在现代企业中,数据分析师扮演着至关重要的角色。每天都有大量数据涌入,从社交媒体到交易平台,数据以空前的速度和规模生成。面 ...
2025-01-06在职场中,许多言辞并非表面意思那么简单,有时需要听懂背后的“潜台词”。尤其在数据分析的领域里,掌握常用术语就像掌握一门新 ...
2025-01-04在当今信息化社会,数据分析已成为各行各业的核心驱动力。它不仅仅是对数字进行整理与计算,而是在数据的海洋中探寻规律,从而指 ...
2025-01-03又到一年年终时,各位打工人也迎来了展示成果的关键时刻 —— 年终述职。一份出色的年终述职报告,不仅能全面呈现你的工作价值, ...
2025-01-03在竞争激烈的商业世界中,竞品分析对于企业的发展至关重要。今天,我们就来详细聊聊数据分析师写竞品分析的那些事儿。 一、明确 ...
2025-01-03在数据分析的江湖里,有两个阵营总是争论不休。一派信奉“大即是美”,认为数据越多越好;另一派坚守“小而精”,力挺质量胜于规 ...
2025-01-02数据分析是一个复杂且多维度的过程,从数据收集到分析结果应用,每一步都是对信息的提炼与升华。可视化分析结果,以图表的形式展 ...
2025-01-02在当今的数字化时代,数据分析师扮演着一个至关重要的角色。他们如同现代企业的“解密专家”,通过解析数据为企业提供决策支持。 ...
2025-01-02数据分析报告至关重要 一份高质量的数据分析报告不仅能够揭示数据背后的真相,还能为企业决策者提供有价值的洞察和建议。 年薪 ...
2024-12-31