如何使用R语言做逻辑回归详解

目录
  • 前言
  • 首先加载需要用的包
  • 接下来建模
  • 最后我们可以根据模型来预测啦
  • 总结

前言

回归的本质是建立一个模型用来预测,而逻辑回归的独特性在于,预测的结果是只能有两种,true or false

在R里面做逻辑回归也很简单,只需要构造好数据集,然后用glm函数(广义线性模型(generalized linear model))建模即可,预测用predict函数。

我这里简单讲一个例子,来自于加州大学洛杉矶分校的课程

首先加载需要用的包

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 3.1.3
library(Rcpp)
## Warning: package 'Rcpp' was built under R version 3.2.2
然后加载测试数据
mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv")
## 这里直接读取网络数据
head(mydata)
##   admit gre  gpa rank
## 1     0 380 3.61    3
## 2     1 660 3.67    3
## 3     1 800 4.00    1
## 4     1 640 3.19    4
## 5     0 520 2.93    4
## 6     1 760 3.00    2
#This dataset has a binary response (outcome, dependent) variable called admit.
#There are three predictor variables: gre, gpa and rank. We will treat the variables gre and gpa as continuous.
#The variable rank takes on the values 1 through 4.
summary(mydata)
##      admit             gre             gpa             rank
##  Min.   :0.0000   Min.   :220.0   Min.   :2.260   Min.   :1.000
##  1st Qu.:0.0000   1st Qu.:520.0   1st Qu.:3.130   1st Qu.:2.000
##  Median :0.0000   Median :580.0   Median :3.395   Median :2.000
##  Mean   :0.3175   Mean   :587.7   Mean   :3.390   Mean   :2.485
##  3rd Qu.:1.0000   3rd Qu.:660.0   3rd Qu.:3.670   3rd Qu.:3.000
##  Max.   :1.0000   Max.   :800.0   Max.   :4.000   Max.   :4.000
sapply(mydata, sd)
##       admit         gre         gpa        rank
##   0.4660867 115.5165364   0.3805668   0.9444602
xtabs(~ admit + rank, data = mydata)  ##保证结果变量只能是录取与否,不能有其它!!!
##      rank
## admit  1  2  3  4
##     0 28 97 93 55
##     1 33 54 28 12

可以看到这个数据集是关于申请学校是否被录取的,根据学生的GRE成绩,GPA和排名来预测该学生是否被录取。

其中GRE成绩是连续性的变量,学生可以考取任意正常分数。

而GPA也是连续性的变量,任意正常GPA均可。

最后的排名虽然也是连续性变量,但是一般前几名才有资格申请,所以这里把它当做因子,只考虑前四名!

而我们想做这个逻辑回归分析的目的也很简单,就是想根据学生的成绩排名,绩点信息,托福或者GRE成绩来预测它被录取的概率是多少!

接下来建模

mydata$rank <- factor(mydata$rank)
mylogit <- glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial")
summary(mylogit)
##
## Call:
## glm(formula = admit ~ gre + gpa + rank, family = "binomial",
##     data = mydata)
##
## Deviance Residuals:
##     Min       1Q   Median       3Q      Max
## -1.6268  -0.8662  -0.6388   1.1490   2.0790
##
## Coefficients:
##              Estimate Std. Error z value Pr(>|z|)
## (Intercept) -3.989979   1.139951  -3.500 0.000465 ***
## gre          0.002264   0.001094   2.070 0.038465 *
## gpa          0.804038   0.331819   2.423 0.015388 *
## rank2       -0.675443   0.316490  -2.134 0.032829 *
## rank3       -1.340204   0.345306  -3.881 0.000104 ***
## rank4       -1.551464   0.417832  -3.713 0.000205 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
##     Null deviance: 499.98  on 399  degrees of freedom
## Residual deviance: 458.52  on 394  degrees of freedom
## AIC: 470.52
##
## Number of Fisher Scoring iterations: 4

根据对这个模型的summary结果可知:

GRE成绩每增加1分,被录取的优势对数(log odds)增加0.002

而GPA每增加1单位,被录取的优势对数(log odds)增加0.804,不过一般GPA相差都是零点几。

最后第二名的同学比第一名同学在其它同等条件下被录取的优势对数(log odds)小了0.675,看来排名非常重要啊!!!

这里必须解释一下这个优势对数(log odds)是什么意思了,如果预测这个学生被录取的概率是p,那么优势对数(log odds)就是log2(p/(1-p)),一般是以自然对数为底

最后我们可以根据模型来预测啦

## 重点是predict函数,type参数
newdata1 <- with(mydata,
                 data.frame(gre = mean(gre), gpa = mean(gpa), rank = factor(1:4)))
newdata1
##     gre    gpa rank
## 1 587.7 3.3899    1
## 2 587.7 3.3899    2
## 3 587.7 3.3899    3
## 4 587.7 3.3899    4
## 这里构造一个需要预测的矩阵,4个学生,除了排名不一样,GRE和GPA都一样
newdata1$rankP <- predict(mylogit, newdata = newdata1, type = "response")
newdata1
##     gre    gpa rank     rankP
## 1 587.7 3.3899    1 0.5166016
## 2 587.7 3.3899    2 0.3522846
## 3 587.7 3.3899    3 0.2186120
## 4 587.7 3.3899    4 0.1846684
## type = "response" 直接返回预测的概率值0~1之间
可以看到,排名越高,被录取的概率越大!!!

log(0.5166016/(1-0.5166016)) ## 第一名的优势对数0.06643082

log((0.3522846/(1-0.3522846))) ##第二名的优势对数-0.609012

两者的差值正好是0.675,就是模型里面预测的!

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))))
##newdata2
##这个数据集也是构造出来,需要用模型来预测的!
newdata3 <- cbind(newdata2, predict(mylogit, newdata = newdata2, type="link", se=TRUE))
## type="link" 返回fit值,需要进一步用plogis处理成概率值
## ?plogis The Logistic Distribution
newdata3 <- within(newdata3, {
  PredictedProb <- plogis(fit)
  LL <- plogis(fit - (1.96 * se.fit))
  UL <- plogis(fit + (1.96 * se.fit))
})
最后可以做一些简单的可视化
head(newdata3)
##        gre    gpa rank        fit    se.fit residual.scale        UL
## 1 200.0000 3.3899    1 -0.8114870 0.5147714              1 0.5492064
## 2 206.0606 3.3899    1 -0.7977632 0.5090986              1 0.5498513
## 3 212.1212 3.3899    1 -0.7840394 0.5034491              1 0.5505074
## 4 218.1818 3.3899    1 -0.7703156 0.4978239              1 0.5511750
## 5 224.2424 3.3899    1 -0.7565919 0.4922237              1 0.5518545
## 6 230.3030 3.3899    1 -0.7428681 0.4866494              1 0.5525464
##          LL PredictedProb
## 1 0.1393812     0.3075737
## 2 0.1423880     0.3105042
## 3 0.1454429     0.3134499
## 4 0.1485460     0.3164108
## 5 0.1516973     0.3193867
## 6 0.1548966     0.3223773
ggplot(newdata3, aes(x = gre, y = PredictedProb)) +
  geom_ribbon(aes(ymin = LL, ymax = UL, fill = rank), alpha = .2) +
  geom_line(aes(colour = rank), size=1)

总结

到此这篇关于如何使用R语言做逻辑回归的文章就介绍到这了,更多相关R语言逻辑回归内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • R语言逻辑回归、ROC曲线与十折交叉验证详解

    自己整理编写的逻辑回归模板,作为学习笔记记录分享.数据集用的是14个自变量Xi,一个因变量Y的australian数据集. 1. 测试集和训练集3.7分组 australian <- read.csv("australian.csv",as.is = T,sep=",",header=TRUE) #读取行数 N = length(australian$Y) #ind=1的是0.7概率出现的行,ind=2是0.3概率出现的行 ind=sample(2,N,rep

  • R语言逻辑回归深入讲解

    逻辑回归 > ###############逻辑回归 > setwd("/Users/yaozhilin/Downloads/R_edu/data") > accepts<-read.csv("accepts.csv") > names(accepts) [1] "application_id" "account_number" "bad_ind" "vehicle_

  • R语言中逻辑回归知识点总结

    逻辑回归是回归模型,其中响应变量(因变量)具有诸如True / False或0/1的分类值. 它实际上基于将其与预测变量相关的数学方程测量二元响应的概率作为响应变量的值. 逻辑回归的一般数学方程为 y = 1/(1+e^-(a+b1x1+b2x2+b3x3+...)) 以下是所使用的参数的描述 y是响应变量. x是预测变量. a和b是作为数字常数的系数. 用于创建回归模型的函数是glm()函数. 语法 逻辑回归中glm()函数的基本语法是 glm(formula,data,family) 以下是

  • R语言多元Logistic逻辑回归应用实例

    可以使用逐步过程确定多元逻辑回归.此函数选择模型以最小化AIC. 如何进行多元逻辑回归 可以使用阶梯函数通过逐步过程确定多元逻辑回归.此函数选择模型以最小化AIC. 通常建议不要盲目地遵循逐步程序,而是要使用拟合统计(AIC,AICc,BIC)比较模型,或者根据生物学或科学上合理的可用变量建立模型. 多元相关是研究潜在自变量之间关系的一种工具.例如,如果两个独立变量彼此相关,可能在最终模型中都不需要这两个变量,但可能有理由选择一个变量而不是另一个变量. 多元相关 创建数值变量的数据框 Data.

  • 在R语言中实现Logistic逻辑回归的操作

    逻辑回归是拟合回归曲线的方法,当y是分类变量时,y = f(x).典型的使用这种模式被预测Ÿ给定一组预测的X.预测因子可以是连续的,分类的或两者的混合. R中的逻辑回归实现 R可以很容易地拟合逻辑回归模型.要调用的函数是glm(),拟合过程与线性回归中使用的过程没有太大差别.在这篇文章中,我将拟合一个二元逻辑回归模型并解释每一步. 数据集 我们将研究泰坦尼克号数据集.这个数据集有不同版本可以在线免费获得,但我建议使用Kaggle提供的数据集. 目标是预测生存(如果乘客幸存,则为1,否则为0)基于

  • 如何使用R语言做逻辑回归详解

    目录 前言 首先加载需要用的包 接下来建模 最后我们可以根据模型来预测啦 总结 前言 回归的本质是建立一个模型用来预测,而逻辑回归的独特性在于,预测的结果是只能有两种,true or false 在R里面做逻辑回归也很简单,只需要构造好数据集,然后用glm函数(广义线性模型(generalized linear model))建模即可,预测用predict函数. 我这里简单讲一个例子,来自于加州大学洛杉矶分校的课程 首先加载需要用的包 library(ggplot2) ## Warning: p

  • R语言操作文件方法详解教程

    目录 1. 文件与文件夹列表的读取 2. 新建文件与文件夹 3. 文件与文件夹的删除 4. 查看文件与文件夹是否存在 小练习 由于最近在处理一些真实数据时涉及到嵌套的 .tar.gz 文件的解压,手动一个一个解压过于麻烦.可以使用 shell 脚本或者 bat 脚本来做,但想尝试使用 R 语言对其进行完全解压,这里就需要涉及到对文件与文件夹的一些操作. 网上已经有许多现有教程,这里参考了很多网上的代码,不过会尝试尽量写得更加详细. 整篇文章我们的测试目录结构如下(生成目录结构树,可以直接在当前路

  • R语言Legend函数深入详解

    legend(x, y = NULL, legend, fill = NULL, col = par("col"), border = "black", lty, lwd, pch, angle = 45, density = NULL, bty = "o", bg = par("bg"), box.lwd = par("lwd"), box.lty = par("lty"), box.

  • R语言决策基础知识点详解

    决策结构要求程序员指定要由程序评估或测试的一个或多个条件,以及如果条件被确定为真则要执行的一个或多个语句,如果条件为假则执行其他语句. 以下是在大多数编程语言中的典型决策结构的一般形式 R提供以下类型的决策语句. 单击以下链接以检查其详细信息. Sr.No. 声明和描述 1 if语句 if语句由一个布尔表达式后跟一个或多个语句组成. 2 if ... else语句 if语句后面可以有一个可选的else语句,当布尔表达式为false时执行. 3 switch语句 switch语句允许根据值列表测试

  • R语言对二进制文件操作详解

    二进制文件是包含仅以位和字节(0和1)的形式存储的信息的文件.它们不是人类可读的,因为它中的字节转换为包含许多其他不可打印字符的字符和符号.尝试使用任何文本编辑器读取二进制文件将显示如Ø和ð的字符. 二进制文件必须由特定程序读取才能使用.例如,Microsoft Word程序的二进制文件只能通过Word程序读取到人类可读的形式.这表示,除了人类可读的文本之外,还有更多的信息,例如字符和页码等的格式化,它们也与字母数字字符一起存储.最后一个二进制文件是一个连续的字节序列.我们在文本文件中看到的换行

  • R语言关于卡方检验实例详解

    卡方检验是一种确定两个分类变量之间是否存在显着相关性的统计方法. 这两个变量应该来自相同的人口,他们应该是类似 是/否,男/女,红/绿等. 例如,我们可以建立一个观察人们的冰淇淋购买模式的数据集,并尝试将一个人的性别与他们喜欢的冰淇淋的味道相关联. 如果发现相关性,我们可以通过了解访问的人的性别的数量来计划适当的味道库存. 语法 用于执行卡方检验的函数是chisq.test(). 在R语言中创建卡方检验的基本语法是 chisq.test(data) 以下是所使用的参数的描述 data是以包含观察

  • R语言多元线性回归实例详解

    目录 一.模型简介 二.求解过程 总结 一.模型简介 一元线性回归是一个主要影响因素作为自变量来解释因变量的变化,在现实问题研究中,因变量的变化往往受几个重要因素的影响,此时就需要用两个或两个以上的影响因素作为自变量来解释因变量的变化,这就是多元回归亦称多重回归.当多个自变量与因变量之间是线性关系时,所进行的回归分析就是多元线性回归. 二.求解过程 这里我使用的数据是包里面自带的数据,我们导入并进行查看: 可以看到第一列是我们的数据标签(无数学含义),后面五列分别为对应的五个特征即相应的数值.我

  • R语言关于泊松回归知识点总结

    泊松回归(英语:Poisson regression)包括回归模型,其中响应变量是计数而不是分数的形式. 例如,足球比赛系列中的出生次数或胜利次数. 此外,响应变量的值遵循泊松分布. 泊松回归的一般数学方程为 log(y) = a + b1x1 + b2x2 + bnxn..... 以下是所使用的参数的描述 ​y​是响应变量. ​a​和​b​是数字系数. ​x​是预测变量. 用于创建泊松回归模型的函数是​glm()​函数. 语法 在泊松回归中​glm()​函数的基本语法是 glm(formula

  • R语言实现LASSO回归的方法

    Lasso回归又称为套索回归,是Robert Tibshirani于1996年提出的一种新的变量选择技术.Lasso是一种收缩估计方法,其基本思想是在回归系数的绝对值之和小于一个常数的约束条件下,使残差平方和最小化,从而能够产生某些严格等于0的回归系数,进一步得到可以解释的模型.R语言中有多个包可以实现Lasso回归,这里使用lars包实现. 1.利用lars函数实现lasso回归并可视化显示 x = as.matrix(data5[, 2:7]) #data5为自己的数据集 y = as.ma

随机推荐