一文读懂既简单又复杂的Logistic回归!内附R代码!
[来源:Wikipedia]
一般来说,当因变量(y)为连续变量(Continuous variable)时,可以选择线性回归(R语言统计篇:简单线性回归)建立模型。
当因变量为分类变量(Categorical variable)时,可以选择Logistic回归。
例如因变量为无糖尿病vs有糖尿病,存活vs死亡,有效vs无效等等。
在这种情况下,使用Logistic回归会更加合适,此方法也属于广义线性模型(Generalized Linear Model)的一种,为线性回归的延伸。
这篇文章主要介绍二分类Logistic回归 (Binary logistic regression),即因变量只有两个水平(如:0和1)。如果因变量有二个分类以上或者存在等级顺序,则分别称为multinomial或者ordered logistic 回归,这些内容会在以后介绍。
好了,速速进入操作部分!
1. 如果强行使用线性回归会怎么样?
如果因变量为二分类变量,但是小编对线性回归情有独钟,非要选择线性回归建立模型,那会怎么样?有点霸王硬上弓的意思。
为了回答这个问题,先创建几个数据用于模型的建立。
其中,outcome指代二分类的因变量(0和1),marker 指代血液里的一种标记物水平,为连续变量:
logit_data <- data.frame(outcome = c(0, 0, 0, 0, 1, 1, 1, 1, 1, 1),
marker = c(1:9, 15))
logit_data
注:上图左侧1到10的数值指的是数据的行数。
一个最简单的数据就准备好了,接下来建立线性回归模型并且作图:
linear_model <- lm(outcome ~ marker, data = logit_data) # 拟合线性回归
plot(y = logit_data$outcome, x = logit_data$marker, # 作图
xlab = "Marker",
ylab = "Outcome (0 or 1)")
abline(a = coef(linear_model)[1], b = coef(linear_model)[2]) # 拟合回归直线
仅用肉眼观察,我们模型的残差(Residual)比较大(手把手教你画出统计上极其重要的概念:残差),说明模型并不准确,提示二分类的数据其实并不适合使用线性回归。
2. Logistic 函数
从上图可以感觉到,面对上述的数据,理想的情况应该是找到一条垂直于x轴的直线,将两者(0 vs 1)分隔开,从而使线的左侧指代0,而右侧代表1,应该是这个样子:
plot(y = logit_data$outcome, x = logit_data$marker,
xlab = "Marker",
ylab = "Outcome (0 or 1)")
abline(v = 4.6)
从上可知,当marker = 4.6时(4到5皆可,这里小编取4.6),线的左侧代表0,而右侧代表1,这条直线将outcome进行了准确的分类。
因此,logistic回归是一种通过寻找marker中的某个值,从而对outcome(0 vs 1)做出最优归类的方法。
似乎…找到了通往logistic回归的一把钥匙!
那这条分割线是如何找到的呢?
首先大致了解下logsitic函数的历史!
核心人物是比利时人口学家以及统计学家Pierre- Francois Verhulst,他在1838年至1847年发表了3篇学术论文,阐述了欧洲几个国家的人口增长情况,使用了一种数学函数来模拟人口的增长,发现此函数与人口增长的数据非常的接近,并且将这个函数命名为logistic函数。
那为什么叫logistic函数?这个估计永远都搞不清楚了!在一篇关于logistic回归历史的文章中[1],Cramer在论文中写道:“
Here Verhulst names it the logistic, without further explanation”。也就是说,它就叫“logistic”,你能拿我怎么滴!
现在是时候见一见logistic函数的庐山真面目了:
小编知道,数学公式是最不受欢迎的!那就在R里面解释并且画一条logistic曲线!
curve(1/(1 + exp(1)^-x),
from = -10, to = 10,
xlab = "Input",
ylab = "Probability")
有那么点意思了!上述的图片代表标准版本的logistic曲线,那如何将我们之前创建的数据outcome和marker套进去呢?那需要以下几步:
1. 标准版logistic函数:
p = 1/[1 + exp(-y)]
2. 自己的数据:
y(outcome) = a + b*marker
3. 将2套入1中:
p = 1/[1 + exp(-(a + b*marker))]
4. 将3进行数学转化后:
p/(1-p) = exp(a+ b*marker)
5. 再进行log转化:
log[p/(1-p)] = a + b*marker
6. log[p/1-p]也称为log-odd或者logit
上述的过程不是第一遍就能够完全理解的,需要反复实践并理顺。不过操作部分就峰回路转了!与简单线性回归非常的类似(R语言统计篇:简单线性回归)!
这也是为什么称logistic回归是一种即简单又复杂的统计方法!
3. 建立Logistic回归模型
首先将“mtcars”数据集做一些改变,创建数据mydata,然后作图并且建立回归模型:
library(tidyverse)
mydata <- mtcars %>%
mutate(outcome = am) %>% # 创建变量outcome,与am的值先相同
mutate(marker = mpg) %>% # 创建变量marker,与mpg的值相同
select(outcome, marker)
head(mydata)
注:左侧的英文名字可以忽略,指的是原数据集行的名称(车名)
下一步,制作logistic回归概率图:
ggplot(mydata, aes(marker, outcome)) +
geom_point(alpha = 0.3) +
geom_smooth(method = "glm", method.args = list(family = "binomial")) +
labs(title = "Logistic regression",
x = "Maker",
y = "Probability of being 1") +
theme_minimal()
S型曲线get!在上图中,横坐标为marker,纵坐标为outcome发生“1”事件的概率。
然后,建立logistic回归方程:
logit_model <- glm(outcome ~ marker, data = mydata, family = "binomial")
summary(logit_model)
上述的输出结果大部分与线性回归非常相似,这里就不再重复,新来的小伙伴请查看往期文章(R语言统计篇:简单线性回归)。
但是,想要完全读懂上述结果,则需要明白三个概念:probability,odds以及odds ratios(即我们熟悉的OR值)
。
其中,下图可以帮助更好的理解
probability与odds之间的区别(小编制作,建议收藏
):
一张图片搞定两个重要概念!
OR值可以用来描述自变量(x)与因变量(y)之间的关系。假如x为一个分类变量,如抽烟情况(抽烟vs不抽烟),y为心肌梗死的发生与否(0和1)。假设抽烟人群中(x = 抽烟)发生心肌梗死的Odds为1.5,而非抽烟人群中的Odds为1,那么OR值就是1.5/1 = 1.5。也就是说,抽烟人群心肌梗死发生的Odds是非抽烟人群发生心机梗死的1.5倍。
回到我们的结果,OR值也可以用来描述连续变量(marker)与因变量(outcome)的关系。marker的回归系数为0.307,那么它的OR值为exp(0.307) = 1.36。那么可以这么解释:每增加一个单位的marker值可以增加1.36倍此事件发生(outcome =1)的Odds。
好啦!今天的内容就到这里。如果有帮助,记得分享给需要的人!
参考文献:
[1] The Origins of Logistic Regression, J.S. Cramer
往期推荐
【单体药理-IF13.5】南中医等团队揭示一种石斛提取物抑制肺癌-通过钙/钙调素依赖性铁死亡机制
江中85级校友、中国中医科学院院长黄璐琦在人民日报发表署名文章《遵循发展规律,促进中医药特色发展》
【单体药理-炎症相关期刊-无版面】迷迭香酸抑制神经炎症通过调节小胶质细胞M1/M2极化
关爱自闭症,关心自闭症研究:CRISPR/Cas9基因编辑诱导自闭症谱系障碍的核心症状研究
网络药理学教程(一)——中药复方网络药理学选题思路与基本方法
重磅发现!科研人员首次清晰观察到沿人体经络穴位迁移的连续荧光线
【年刊600+审稿仅1月-免版面】浙中医药学院:麻黄汤主要活性成分的药动学与哮喘大鼠药效学的相关性
【单体受欢迎-审稿快-版面可免IF4.1】协和等团队揭示人参皂甙Re改善认知功能障碍通过NLRP3和Nrf2途径保护
重磅!“中国中医药大学”来了
关键词
模型
数据
Logistic回归
线性回归
函数
最新评论
推荐文章
作者最新文章
你可能感兴趣的文章
Copyright Disclaimer: The copyright of contents (including texts, images, videos and audios) posted above belong to the User who shared or the third-party website which the User shared from. If you found your copyright have been infringed, please send a DMCA takedown notice to [email protected]. For more detail of the source, please click on the button "Read Original Post" below. For other communications, please send to [email protected].
版权声明:以上内容为用户推荐收藏至CareerEngine平台,其内容(含文字、图片、视频、音频等)及知识版权均属用户或用户转发自的第三方网站,如涉嫌侵权,请通知[email protected]进行信息删除。如需查看信息来源,请点击“查看原文”。如需洽谈其它事宜,请联系[email protected]。
版权声明:以上内容为用户推荐收藏至CareerEngine平台,其内容(含文字、图片、视频、音频等)及知识版权均属用户或用户转发自的第三方网站,如涉嫌侵权,请通知[email protected]进行信息删除。如需查看信息来源,请点击“查看原文”。如需洽谈其它事宜,请联系[email protected]。