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似然值)。要看到它的对数似然,我们可以这样写:
数据分析咨询请扫描二维码
在准备数据分析师面试时,掌握高频考题及其解答是应对面试的关键。为了帮助大家轻松上岸,以下是10个高频考题及其详细解析,外加 ...
2024-12-20互联网数据分析师是一个热门且综合性的职业,他们通过数据挖掘和分析,为企业的业务决策和运营优化提供强有力的支持。尤其在如今 ...
2024-12-20在现代商业环境中,数据分析师是不可或缺的角色。他们的工作不仅仅是对数据进行深入分析,更是协助企业从复杂的数据信息中提炼出 ...
2024-12-20随着大数据时代的到来,数据驱动的决策方式开始受到越来越多企业的青睐。近年来,数据分析在人力资源管理中正在扮演着至关重要的 ...
2024-12-20在数据分析的世界里,表面上的技术操作只是“入门票”,而真正的高手则需要打破一些“看不见的墙”。这些“隐形天花板”限制了数 ...
2024-12-19在数据分析领域,尽管行业前景广阔、岗位需求旺盛,但实际的工作难度却远超很多人的想象。很多新手初入数据分析岗位时,常常被各 ...
2024-12-19入门数据分析,许多人都会感到“难”,但这“难”究竟难在哪儿?对于新手而言,往往不是技术不行,而是思维方式、业务理解和实践 ...
2024-12-19在如今的行业动荡背景下,数据分析师的职业前景虽然面临一些挑战,但也充满了许多新的机会。随着技术的不断发展和多领域需求的提 ...
2024-12-19在信息爆炸的时代,数据分析师如同探险家,在浩瀚的数据海洋中寻觅有价值的宝藏。这不仅需要技术上的过硬实力,还需要一种艺术家 ...
2024-12-19在当今信息化社会,大数据已成为各行各业不可或缺的宝贵资源。大数据专业应运而生,旨在培养具备扎实理论基础和实践能力,能够应 ...
2024-12-19阿里P8、P9失业都找不到工作?是我们孤陋寡闻还是世界真的已经“癫”成这样了? 案例一:本硕都是 985,所学的专业也是当红专业 ...
2024-12-19CDA持证人Louis CDA持证人基本情况 我大学是在一个二线城市的一所普通二本院校读的,专业是旅游管理,非计算机非统计学。毕业之 ...
2024-12-18最近,知乎上有个很火的话题:“一个人为何会陷入社会底层”? 有人说,这个世界上只有一个分水岭,就是“羊水”;还有人说,一 ...
2024-12-18在这个数据驱动的时代,数据分析师的技能需求快速增长。掌握适当的编程语言不仅能增强分析能力,还能帮助分析师从海量数据中提取 ...
2024-12-17在当今信息爆炸的时代,数据分析已经成为许多行业中不可或缺的一部分。想要在这个领域脱颖而出,除了热情和毅力外,你还需要掌握 ...
2024-12-17数据分析,是一项通过科学方法处理数据以获取洞察并支持决策的艺术。无论是在商业环境中提升业绩,还是在科研领域推动创新,数据 ...
2024-12-17在数据分析领域,图表是我们表达数据故事的重要工具。它们不仅让数据变得更加直观,也帮助我们更好地理解数据中的趋势和模式。相 ...
2024-12-16在当今社会,我们身处着一个飞速发展、变化迅猛的时代。不同行业在科技进步、市场需求和政策支持的推动下蓬勃发展,呈现出令人瞩 ...
2024-12-16在现代商业世界中,数据分析师扮演着至关重要的角色。他们通过解析海量数据,为企业战略决策提供有力支持。要有效完成这项任务, ...
2024-12-16在当今数据爆炸的时代,数据分析师是组织中不可或缺的导航者。他们通过从大量数据中提取可操作的洞察力,帮助企业在竞争激烈的市 ...
2024-12-16