8.常用统计分析方法——生存分析

2023-11-03

目录

生存分析基本概念

生存率估计

1. 乘积极限法

2. 寿命表法

3. 生存曲线

生存曲线比较

COX比例风险回归模型

1. 建立COX回归模型

2. 比例风险假定的检验

3. 生存预测


生存分析基本概念

logistic回归中因变量是终点事件发生与否,而生存分析则关注的是终点事件所经历的时间。

生存资料的特点:1.随访资料,包括两个方面时间和结局;2.时间—事件变量;3.有不完全数据;
生存分析:就是用来研究“生存”过程的统计方法;研究生存时间;时间与事件的关系

生存资料的三要素

  1. 研究因素
  2. 生存时间
  3. 生存结局

生存资料的分析

(1)估计:根据样本生存资料估计总体生存率和其他有关指标;

(2)比较:对不同组生存曲线进行比较;

(3)影响因素分析:目的是探索和了解影响预后的因素,或平衡某些因素的影响后,研究某个或者某些因素对生存的影响。

生存时间(survival time):根据研究目的确定的观察起点到某一给定终点 事件出现的时间。       类型:

(1)完全数据:随访研究中,在规定的时间内,若观察到某些对象的死亡结局所经历的时间,称为生存时间的完全数据。

(2)删失数据:随访研究中,在规定的时间内,由于某些原因未能观察到某些对象的死亡结局,提供的是从手术到停止观察的时间长度,并非确切的生存时间,称为生存时间的删失数据(censored data)

删失常见的原因:

  1. 研究结束时终点事件未发生
  2. 由于未继续就诊、拒绝随访或失去联系等失访,未能观察到其死亡结局
  3. 因死于其他原因终止观察

起始事件:标志研究对象生存过程开始的特征事件,又称为起点事件,与终点事件相对应。
终点事件:指研究者所关心的特定事件,又称为失效事件,标志着“生存”的终止。失效事件不一定是不好额事件,只表示特点事件的发生。
截尾:又称为终检或删失,指在发生终点事件之前,被观察对象的观测过程终止了。没有观察到所关心终点事件的发生。
特点:不完全信息(不知道确切的生存时间),但可知真实的生存时间不会短于现在观察的时间。

生存概率和死亡概率:

生存概率:某单位时段开始存活的个体,到该时段结束时仍存活的可能性。

p\approx \frac{活满一年人数}{某年年初人口数}

死亡概率:表示某单位时段开始存活的个体,在该时段内死亡的可能性。

q\approx\frac{年内死亡人数}{某年年初人口数}

若观察时段相同,p+q=1

生存率与风险率:

生存率(survival rate)也即是生存函数指观察对象活过t个单位时段的可能性,记为S(t)。           如果没有删失数据,直接法计算生存率:S(t)=P(T> t)\approx \frac{t时刻仍存活的例数}{观察总例数}                                                                                     若有删失数据,须分段计算生存概率:S(t)=P(T> t)=P_{1}\cdot P_{2}\cdot\cdot\cdot\ P_{t}

风险率(hazard rate)或风险函数表示t时刻存活的个体在t时刻的瞬时死亡风险。

生存率估计

非参数法估计的生存率主要有寿命表法(life table method)和乘积极限法(product limit method),前者适用于生存时间按区间分组的大样本资料,后者适用于仅含个体生存时间的小样本或者大样本资料。

分析思想:先求出各个时段的生存概率,然后根据概率乘法定理估计生存率。

1. 乘积极限法

又称为K-M法,乘积的含义:生存率等于生存概率的乘积;极限的含义:寿命表法中的时间区间长度趋近于0,也即是有明确的生存时间或截尾时间。

条件:每个对象均有确切的生存时间/截尾时间;tk时刻的生存率等于tk时刻之前各点生存概率的乘积;不需要对资料分布类型进行假设。

基本计算步骤:

  1. 将生存时间(t_{i})由小到大排序,完全数据和删失数据相同时,删失数据在完全数据的后面;
  2. 列出时间区间[t_{i}, t_{i+1})上的死亡数d_{i}和删失数c_{i};
  3. 计算期初例数,恰在某一时刻t_{i}之前的生存人数n_{i};
  4. 计算死亡概率q_{i}和生存概率p_{i};
  5. 计算生存率\hat{S}(t_{i}),注意删失时间处不做变换,删失时间的影响只体现在期初例数的计算上。

(1)创建生存对象:将研究对象的结局变量由“time”(时间)和“event”(事件)组成。

生存对象可以由survival包中的函数Surv()生成,是一种将事件和时间合并在一起的数据结局。

案例:比较卵巢癌患者在两种治疗方法下的生存率

library(survival)
library(survminer)
data(ovarian)
str(ovarian)
attr(ovarian,"var.labels")[1:6]<- c("随访时间",
                                   "结局状态:0存活,1死亡",
                                   "患者年龄",
                                   "疾病残留情况:1没有残留,2有残留",
                                   "治疗方法:1环磷酰胺,2环磷酰胺加阿霉素",
                                   "患者的ECOG评分,1较好,2较差")
library(epiDisplay)
des(ovarian)
attributes(ovarian)
summary(ovarian)

对分类变量进行因子化

ovarian$resid.ds <- factor(ovarian$resid.ds,
                           levels = c(1,2),
                           labels = c("no","yes"))
ovarian$rx <- factor(ovarian$rx,
                     levels = c(1,2),
                     labels = c("A","B"))
ovarian$ecog.ps <- factor(ovarian$ecog.ps,
                          levels = c(1,2),
                          labels = c("good","bad"))
hist(ovarian$age)#年龄不对称将,年龄进行因子化
ovarian$agegr <- cut(ovarian$age,
                     breaks = c(0,50,75),
                     labels = c("<=50",">50"))#按50为分界值将,年龄分成两组
table(ovarian$agegr)

创建生存对象:

surv.obj <- Surv(time =ovarian$futime,event = ovarian$fustat);surv.obj

在生存对象中,“+”号表示删失数据,例如,第四个值“421+”,表示这个患者并未在421天死于卵巢癌,只是没有继续随访

(2) 生存率估计

生存率估计的基本格式:

survfit(Surv(生存时间,结局)~分组变量,data),survfit根据KM法创建生存曲线,如果没有分组变量,就用"1"代替。

其中Surv(生存时间,结局)就是上面提到的生存对象。

survfit(surv.obj~1)

依次展示的是样本数,事件发生数,中位生存时间,中位生存时间的置信区间。因为数据样本较小,生存曲线没有穿过生存率在50%对应的水平先,无法计算生存时间置信区间的上限。

通过summary()函数对生存分析的数据进行展示,显示具体的各时间段的生存概率和生存率。

fit <- survfit(surv.obj~1)
summary(fit)#不显示删失数据
summary(fit,censored = T)#包含删失数据

 参数censored默认未FALSE,通过TRUE可以展示删失数据。包含各时间点的存活对象个数生存率置信区间,censored=T包括删失数据

2. 寿命表法

资料是分时间段收集,数据按时间区组分组
对于每个时间段,假定死亡情况在每个时间段均匀出现,即生存率匀速下降
假定删失的发生在时间段内也是均匀分布,区间中删失个体算半个人时,校正观察例数

两种方法的选择:

  • #寿命表法:适用于时间分段或无法得知准确生存时间的资料,区间内生存率呈线性的变化
  • #KM法:要求每个观测对象有明确的死亡时间和截尾时间

3. 生存曲线

生存曲线是一条横坐标以时间为参数,纵坐标以生存率为参数的统计图。

(1)基础包plot绘图

plot(fit,mark.time = T)

 mark.time=T为删失数据添加标记"+",不想按展示置信区间conf.int=F

(2)用survival包函数ggsurvplot()绘制生存曲线

ggsurvplot(fit,pval=T,conf.int = T) #生存曲线

(3)死亡曲线

ggsurvplot(fit,pavl=T,conf.int = F,fun = "event",ylim=c(0,1))

 fun表示绘制不同类型的曲线,event绘制累积事件,cumhaz绘制累积危险函数,pct表示百分比表示生存率

总结:

Survfit(Surv(生存时间,结局)~分组变量,data),survfit根据KM法创建生存曲线,如果没有分组变量,就用"1"代替
ggsurvplot(fit,pval=TRUE,conf.int=FALSE),fit表示生存曲线函数,pval是否将p值显示到曲线上,conf.int是否显示置信区间条带
surv_diff <- survdiff(Surv(生存时间,结局)~分组变量,data),按照分组变量进行不同组别生存曲线的比较

生存曲线比较

案例:想要比较不同治疗方式下的生存率差异?

分析:由治疗方式作为分组,进行上述操作。

surv.treat <- survfit(surv.obj~rx,data=ovarian)#创建生存对象
summary(surv.treat,censored = T)#计算生存率
plot(surv.treat,mark.time = T, #绘制生存曲线
     conf.int = F,
     lty=c(1,2),
     lwd=2,
     col = c("red","blue"))
legend(60,0.3,title = "KM cur",
       legend=c("环磷酰胺","环磷酰胺+阿霉素"),
       lty=c(1,2),
       lwd=2,
       col = c("red","blue"))

#survmuner包中的ggsurplot以ggplot2的风格提供更丰富的图形输出
ggsurvplot(surv.treat,data=ovarian,pval=T)
survdiff(surv.obj~agegr,data = ovarian)

 生存曲线的比较

Log-rank检验:时序检验,属于非参数的方法,比较整个生存时间的分布。可以通过函数survdiff(生存对象~分组,data=《MYDATA》)格式计算。

surv_diff <- survdiff(Surv(futime,fustat)~rx,data=ovarian);surv_diff

根据上述结果,两种治疗方法在生存率的差异没有统计学差异。但是两组中研究对象可能被其他影响生存的因素如年龄,疾病残留情况,患者的ECOG评分影响,需要使用回归分析,把这些因素作为协变量解释两组之间的差异。

注意:当不同时间段内生存情况的优劣存在交叉时,log-rank检验不适用,,表现为生存曲线存在明显交叉

COX比例风险回归模型

风险率(hazard rate)或风险函数表示t时刻存活的个体在t时刻的瞬时死亡风险。风险函数h(t)用于度量在某个时刻t还存活的个体在极短时间内死亡的风险。h(t)=寿命分布函数f(t)/S(t)

 COX回归模型的两个前提假设

  • 各个危险因素的作用不随时间的变化而变化,即\frac{h(t)}{h_{0}(t)}不会随着时间的变化而变化;
  • 对数线性假定:模型中协变量应该与对数风险比成线性关系。

COX回归分析的一般步骤

1. 分析前的准备——数据整理

2. 参数估计,建立最佳模型

3. 假设检验

4. Cox模型的解释及应用

5. Cox模型拟合优度的考察

1. 建立COX回归模型

案例分析:

将所有协变量都包含进来建立cox回归模型:

cox1 <- coxph(surv.obj~rx+resid.ds+agegr+ecog.ps,data=ovarian)
summary(cox1)

 调整协变量后,rx组p值0.0322有统计学差异,因此两种治疗方法下死亡风险有统计学差异。

与多重线性回归类似,多重cox回归也存在变量选择问题,对包含所有自变量的模型cox1使用函数drop1()可以得到各个自变量的似然比检验结果。

drop1(cox1,test = "Chisq")

计算各个自变量似然比检验,ecog.ps对于的p值最大,从模型中剔除。也可以使用step()函数基于AIC进行变量选择。

cox2 <- coxph(surv.obj~rx+resid.ds+agegr,data=ovarian)
step.cox <- step(cox1)

step的结果也表明cox2是最优模型

2. 比例风险假定的检验

验证cox回归的比例风险假定,使用函数cox.zph()

cox.zph(cox2)

结果表明各个自变量检验和全局检验p值都大于0.05,没有违背比例风险的假定

summary(cox2)

接受方法B治疗的死亡风险是方法A的27.78%,反过来,治疗A方法的死亡风险是B方法的3.599倍,同时不同残留情况以及不同年龄组之间的死亡风险差异均无统计学差异

3. 生存预测

newdata <- data.frame(rx = c("A" , "B"), 
                      resid.ds = c("no", "no"),
                      agegr = c(">50", ">50"))
newdata

hr <- predict(cox2, newdata = newdata, type = "risk")
hr
hr[1]/hr[2]

A治疗比B治疗的风险
#大于50岁,都没有风险残留的病A治疗的死亡风险是B治疗的3.599倍
#使用KM拟合生存曲线更直观展示两种治疗方式下的生存率变化

绘制生存曲线:

cox.fit <- survfit(cox2, newdata = newdata, type = "kaplan-meier")
plot(cox.fit, lty = c(1, 2), col = c(2, 4))
title(main="Cox survival curves by treatment
      for age > 50, no residual disease patients",
      xlab="Duration in days", 
      ylab="Survival probability",
      las = 1)
legend(5, 0.3, c("Treatment A", "Treatment B"), 
       lty = c(1, 2), col = c(2, 4))

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

8.常用统计分析方法——生存分析 的相关文章

  • R语言备忘录

    title dataclear rbase author MengKe date 2023 03 12 output html document 1 Load R packages library ggplot2 library tidyr
  • R大数定律(Python切比雪夫不等式验证大数定律)模拟圆周率

    大数定律 在概率论中 大数定律 LLN 是描述大量执行相同实验的结果的定理 根据规律 大量试验所得结果的平均值应接近预期值 并随着试验次数的增加而趋于接近预期值 LLN 很重要 因为它保证了一些随机事件的平均值的长期稳定结果 例如 虽然赌场
  • Rstudio更换主题/样式

    github项目地址 https github com gadenbuie rsthemes 安装 在 rstudio 的控制台console中数据 install packages devtools devtools install gi
  • R语言基本函数的学习(持续更新)

    目录 前言 Tidyverse包 arrange 函数 head 函数 filter 函数 select 函数
  • R语言描述性统计

    使用Hmisc这个包 只需要调用 my data read csv test csv Hmisc describe my data 可以打印出各个变量的均值方差等信息
  • R语言 数据处理(一)

    数据合并 提取及降维处理 install packages dplyr 数据处理包dplyr library dplyr name1 lt c Bob Mary Jane Kim name2 lt c Bob Mary Kim Jane w
  • R语言的Rattle可视化BI数据挖掘分析工具

    Rattle介绍 Rattle是一个免费的开源数据挖掘工具包 使用 Gnome 图形界面以统计语言 R编写 它在GNU Linux Macintosh OS X和MS Windows下运行 Rattle正在澳大利亚和国际上用于商业 政府 研
  • 如何用R分析CNKI文献关键词词频?

    疑惑 如何用VOSviewer分析CNKI数据 一文发布后 有同学问我 王老师 我有个问题 我用cnki导出关键词后 想统计关键词的词频 我应该用什么样的工具 如果不利用citespace和python 做出excel那种的统计表格 该怎么
  • 1.R语言基础知识

    目录 一 R语言的介绍 R语言的下载与按照 Rstudio R包的安装 工作空间管理 基本运算 二 R的数据结构 1 数据类型 2 数据类型的转换和判断 3 数据结构 三 导入 导出数据 获取内置数据集 获取其他格式的数据 四 数据框的常用
  • R语言GGPLOT2绘制圆环图雷达图/星形图/极坐标图/径向图Polar Chart可视化分析汽车性能数据

    最近我们被客户要求撰写关于可视化的研究报告 包括一些图形和统计输出 漂亮的圆形图 我不确定对数据分析师本身是否有额外的好处 但如果能吸引决策者的注意 那对我来说就是额外的价值 然而 用coord polar 或偶尔发现的ggplot2中的c
  • 统计学三大分布(卡方、t、F)即相应概率密度图的R语言实现

    三大统计分布 1 2 chi 2 2分布 设随机变量 X 1
  • R----stringr包介绍学习

    1 stringr介绍 stringr包被定义为一致的 简单易用的字符串工具集 所有的函数和参数定义都具有一致性 比如 用相同的方法进行NA处理和0长度的向量处理 字符串处理虽然不是R语言中最主要的功能 却也是必不可少的 数据清洗 可视化等
  • Coding and Paper Letter(六十一)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 资源整理 1 Coding 1 航拍影像的土地覆盖分类 CAS机器学习人工智能2019 ZHAW 中ML DL分配的仓库 ml dl assignment 2019 2 跨
  • [R语言] R语言PCA分析教程 Principal Component Methods in R

    R语言PCA分析教程 Principal Component Methods in R 代码下载 主成分分析Principal Component Methods PCA 允许我们总结和可视化包含由多个相互关联的定量变量描述的个体 观察的数
  • 【干货】Chrome插件(扩展)开发全攻略(不点进来看看你肯定后悔)<转>

    干货 Chrome插件 扩展 开发全攻略 不点进来看看你肯定后悔 写在前面 我花了将近一个多月的时间断断续续写下这篇博文 并精心写下完整demo 写博客的辛苦大家懂的 所以转载务必保留出处 本文所有涉及到的大部分代码均在这个demo里面 h
  • R语言与多元线性回归方程及各种检验

    R语言与多元线性回归方程及各种检验 文章目录 R语言与多元线性回归方程及各种检验 一 模型建立 二 多重共线性 1 产生的背景 2 多重共线性的检验 1 简单相关系数法 2 方差膨胀因子 vif 法 3 矩阵 X T X
  • R语言中tidyverse基础知识汇总

    tidyverse group by 分组统计 gather 和spread 简单地说 gather 是列转行 而spread 是行转列 请看下面的示例 gt df id class grade 1 1 a 81 2 2 b 82 3 3
  • 4. 统计描述和基线表格绘制

    目录 1 连续型变量统计描述 单变量统计描述 1 summary函数 2 psych包中的describe 函数 3 Hmisc包中的describe 函数 4 pastecs包的stat desc 的函数 分组统计描述 1 doBy包的s
  • R语言采集获取58商铺出租转让信息

    前两篇文章给我一个朋友分析出店铺商品以及地址房源信息 后来去看了下店铺房租有点贵 还是毛坯房 要自己装修 本着节约成本的原则 熬了个通宵 给他采集了一些转租商铺数据 因为数据比较多 过于先进不方便展示 我就将我爬虫程序的模版展示给大家观看
  • R语言采集获取58商铺出租转让信息

    前两篇文章给我一个朋友分析出店铺商品以及地址房源信息 后来去看了下店铺房租有点贵 还是毛坯房 要自己装修 本着节约成本的原则 熬了个通宵 给他采集了一些转租商铺数据 因为数据比较多 过于先进不方便展示 我就将我爬虫程序的模版展示给大家观看

随机推荐

  • 注解-宋红康

    目录 一 注解 Annotation 概述 二 常见的注解实例 三 如何自定义注解 四 JDK中的四个元注解 五 Java8注解的新特性 1 可重复注解 2 类型注解 一 注解 Annotation 概述 二 常见的注解实例 三 如何自定义
  • Android开发入门组件(十)——WebView

    今天主要写一下WebView 主要是在安卓应用的页面来加载或者写入网页 是比较常见的一种操作 加载网页 1 加载url 网络或者本地assets文件下的html文件 1 加载网络url webview loadUrl 相应的网址 直接在ac
  • 从外包辞职了,600小时后,我入职了字节跳动

    前言 没有绝对的天才 只有持续不断的付出 对于我们每一个平凡人来说 改变命运只能依靠努力 幸运 但如果你不够幸运 那就只能拉高努力的占比 2022年7月 我有幸成为了字节跳动的一名Java后端开发 相信同行都清楚 从外包进大厂有多难 运气之
  • c# --- 泛型解决输入和输出类型不确定问题

    一 背景 有这样一个需求 一个方法 他的返回值类型不确定 方法参数的类型不做要求 二 思考 返回值类型不确定 从继承的角度 所以类都是object的子类 返回object即可 但是这种方法是类型不安全的 需要进行类型转换 我们可以使用泛型解
  • HTML <small> 标签

    定义和用法
  • CUBLAS矩阵乘法

    include
  • Winsock属性 方法介绍

    本文章已收录于 Winsock是Mcrosoft windows提供的网络编程接口 它供了基于TCP IP协议接口实现方法 通过网络进行的数据通信 需要用地址来表示网络中的主机 TCP IP协议使用IP地址来作为主机的标识 实现的连接方式是
  • 关于connect: network is unreachable 问题的解决

    由于发现原创文章 在未署名作者及出处的情况下被转载 在以后所有的原创文章开头我都会写明作者和出处 希望朋友们以后在转载本博客原创博文时注意标明文章作者及出处 作者 liukun321 咕唧咕唧 原文出处 http blog csdn net
  • 牛客面试题库(9)

    请你说说索引怎么实现的B 树 为什么选这个数据结构 说到B 树 一般和B树做对比 都是多叉树 B 数组叶子结点存储数据 其他节点存储索引 而B树每个节点都存储数据 B 树叶子结点内通过单向链表连接 节点和节点之间通过双向链表连接 从磁盘IO
  • 匿名内部类的定义格式

    匿名内部类 1 使用条件 如果接口的实现类 或者父类的子类只需要使用唯一的一次 那么就可以省略该类的定义 改用匿名内部类 2 定义格式 接口名称 对象名 new 接口名称 覆盖重写所有抽象方法 分号不要忘 3 对匿名内部类的格式 new 接
  • springboot + mybatis启动时执行sql脚本

    目录 1 创建数据版本表 结构如下 2 创建HdVersion对象 3 创建执行sql的dao 4 创建dao对应的xml 5 创建sql执行器 实现ApplicationRunner 6 结语 背景 项目开发或发布阶段修改表结构 项目更新
  • 大数据平台测试-白盒测试静态方法解析(我奶奶都能看懂)

    软件测试从某种维度上分为黑盒测试和白盒测试 黑盒测试更多的是增啥改查 也就是功能测试 关于功能测试参考这里 增删改查测试场景 菜市场的大妈都能看懂 关于白盒测试的资料参考这里 白盒测试案例设计 我爷爷都能看懂 注意并不是说白盒测试一定就是要
  • 还不会python 实现常用的数据编码和对称加密?看这篇文章就够啦~

    前 言 相信很多使用 python 的小伙伴在工作中都遇到过 对数据进行相关编码或加密的需求 今天这篇文章主要给大家介绍对于一些常用的数据编码和数据加密的方式 如何使用 python 去实现 话不多说 接下来直接进入主题 1 base64
  • Unity—关节、布料、角色控制器、视频播放

    开学啦 接下来学习Unity的寻路系统和射线 结尾有彩蛋呦 每日一句 少年特有的放浪不羁是青春的定义 目录 关节 布料 视频播放 Character Controller组件 关节 铰链关节 Hinge Joint 将两个刚体 Rigidb
  • jenkins fastlane淌坑记录

    目录 前言 管理证书 使用证书 构建命令 关于app托管 iOS的版本自增 testflight上传 fastlane下苹果的账号验证问题 iOS缓存问题 iOS打包会开启8081服务 fastlane获取最新代码 Fastlane完整代码
  • CSRF漏洞详解

    目录 一 CSRF漏洞原理 1 基本原理 2 流程图 3 条件 二 分类 1 GET型 2 POST型 三 危害 四 检测与防御 1 检测 2 防御 一 CSRF漏洞原理 1 基本原理 CSRF Cross site Request For
  • linux用c++获取mac地址,网卡地址,网口地址,网卡序号ip地址,不使用 ioctl(sock, SIOCGIFCONF, &ifc)获取网络接口名称,这个接口有时会返回-1获取不到,换方法获取

    linux用c 获取mac地址 不使用 ioctl sock SIOCGIFCONF ifc 获取网络接口名称 这个接口有时会返回 1获取不到 换方法获取 1 弃用 SIOCGIFCONF 获取网络接口名称列表 获取所有网络接口列表 ifc
  • # Python推荐系统学习笔记(3)------基于协同过滤的个性化推荐算法实战---隐语义模型

    Python推荐系统学习笔记 3 基于协同过滤的个性化推荐算法实战 隐语义模型 一 概念性理解 传统的推荐方法 UserCF 首先需要找到和他们看了同样书的其他用户 然后给他们推荐那些用户喜欢的其他书 ItemCF 需要给他们推荐和他们已经
  • SpringCloud-Hystrix服务降级与熔断简介与简单配置

    1 前言 作者最近在学习springcloud 本篇文章仅作为学习笔记 如有错误 敬请指正 2 Hystrix是什么 Hystrix是一个用于处理分布式系统的延迟和容错的开源库 在分布式系统里 许多依赖不可避免的会调用失败 比如 超时 异常
  • 8.常用统计分析方法——生存分析

    目录 生存分析基本概念 生存率估计 1 乘积极限法 2 寿命表法 3 生存曲线 生存曲线比较 COX比例风险回归模型 1 建立COX回归模型 2 比例风险假定的检验 3 生存预测 生存分析基本概念 logistic回归中因变量是终点事件发生