卢沙野大使接受法国LCI电视台直播专访

【少儿禁】马建《亮出你的舌苔或空空荡荡》

外交部迅速反应:严正抗议美冻结全国人大14位副委员长资产,中方将反制

达赖叛逃时把人皮、头骨法器都送给了谁(胆小慎入)

列宁会如何看待宝马MINI“冰淇淋事件”

生成图片,分享到微信朋友圈

自由微信安卓APP发布,立即下载! | 提交文章网址
查看原文

一文读懂既简单又复杂的Logistic回归!内附R代码!

R师傅 如沐风科研 2022-10-07
 欢迎关注"如沐风科研"~~

[来源: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(00, 0, 0, 1, 1, 1, 1, 1, 1), 
                         marker = c(1:915))
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语言统计篇:简单线性回归)。


但是,想要完全读懂上述结果,则需要明白三个概念:probabilityodds以及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途径保护

重磅!“中国中医药大学”来了


文章有问题?点此查看未经处理的缓存