24、生存分析与比例风险回归:从理论到应用

生存分析与比例风险回归:从理论到应用

1. 生存分析中的对数秩检验

生存分析是统计学中用于研究事件发生时间的重要方法。对数秩检验是比较两条生存曲线最古老且最常用的方法之一,它属于非参数检验。其原假设是两组受试者来自同一总体,备择假设是总体生存曲线不同。

1.1 SAS程序示例

以下是一个用于比较急性髓系白血病(AML)数据中两组缓解时间的SAS程序:

data;
input surv cens group;
datalines;
5 1 0
5 1 0
. . .
45 1 0
9 1 1
13 1 1
13 0 1
. . .
161 0 1
run;
proc print;
/* We are in this habit by now */
run;
proc lifetest plots =(s); /* plots=(s) draws the survival curve */
time surv * cens(0);
strata group; /* Compare the survival curves of two groups */
run;

在这个程序中, surv 表示生存时间, cens 是删失变量( 0 表示删失观测), group 表示患者所属的组(对照组或持续治疗组)。程序会计算比较两组的p值, plots=(s) 选项会绘制生存曲线。

1.2 对数秩检验原理

对数秩检验是对一系列2×2列联表中观察频数和期望频数的比较。每当两组患者中任一发生事件时,就会构建一个2×2列联表。例如,在第23周时,两组各有一个事件发生,此时治疗维持组有6名患者处于风险中,非维持组有7名患者处于风险中,对应的2×2列联表如下:
| | 治疗维持组 | 非维持组 |
| — | — | — |
| 事件 | 1 | 1 |
| 无事件 | 5 | 6 |
| 处于风险的患者 | 6 | 7 |

对数秩统计量基于公式 $\sum_{i}(o_{i}-e_{i})$,其中 $o_{i}$ 是每个2×2列联表左上角的观察事件数,$e_{i}$ 是在独立原假设下的相应期望频数。在原假设下,即总体生存曲线相同,事件在两组中独立发生,对数秩统计量应接近零。远离零的值表明在独立模型下,一组的事件数过多或过少,这是一个双侧检验。

此外,对数秩统计量还需通过其标准差进行标准化,在 proc lifetest 中会自动完成此操作,并给出p值。例如,在某些数据中,p值为0.0653,表明有一定的统计证据表明两条生存曲线存在差异。

除了对数秩检验,还有其他变体,如Wilcoxon检验,它在求和时会给较早的事件时间赋予更多权重。Wilcoxon检验的p值为0.0989,与对数秩检验提供的关于生存曲线差异的证据量大致相同。

2. 生存分析中的实际问题与思考
2.1 删失问题

在生存分析中,一个难以回答的问题是删失患者退出研究是否与他们的结局有关。例如,他们是因为病情好转而离开,还是因为治疗无效而放弃?一个重要的假设是删失与最终生存时间无关,但有时我们无法确定这个答案。

2.2 生存曲线比较的难题

当生存曲线交叉时,对数秩检验只能告诉我们曲线是否不同,但无法指出哪条曲线更好,这需要我们自己做出艰难的决策。

2.3 实际案例分析
  • 胆管癌治疗 :胆管癌是一种严重的疾病,大多数患者在确诊后一年内死亡。一组患者被随机分为两组,一组接受放疗和5 - 氟尿嘧啶(5 - FU)治疗,另一组接受安慰剂治疗。比较两组生存曲线的形状是否有差异,哪一组有生存优势是我们关注的问题。同时,当积极治疗效果并不比不治疗好很多时,给对照组使用安慰剂是否符合伦理也是我们在医学研究中需要考虑的难题。
  • 百岁老人的生存 :研究百岁老人的生存数据可以帮助我们探讨人类寿命的极限。以下是一组关于百岁老人生存情况的数据:
    | 最后生日年龄 | 处于风险的人数 | 死亡人数 | 删失人数 |
    | — | — | — | — |
    | 100 | 52,947 | 20,845 | 2256 |
    | 101 | 29,846 | 12,213 | 1317 |
    | 102 | 16,316 | 6799 | 716 |
    | 103 | 8801 | 3852 | 392 |
    | 104 | 4557 | 2030 | 193 |
    | 105 | 2334 | 1169 | 103 |
    | 106 | 1062 | 500 | 63 |
    | 107 | 499 | 271 | 9 |
    | 108 | 219 | 129 | 16 |
    | 109 | 74 | 46 | 1 |
    | 110 | 27 | 24 | 0 |
    | 111 | 3 | 2 | 0 |
    | 112 | 1 | 1 | 0 |

根据这些数据构建生存曲线,我们会发现生存曲线下降很快。思考是否应该对生存比例轴取对数,以及事件发生概率随时间的变化趋势,这些概率可以估计危险函数,对后续建模很重要。同时,我们也会思考是否能从这些数据中估计人类寿命的极限,以及是否可以在不进行外推的情况下完成估计。

3. 比例风险回归

生存分析的很多术语可以追溯到17世纪的荷兰早期贸易商。当时,为了分散长途贸易中的风险,催生了保险业。生存分析借鉴了很多人寿保险的术语,精算师会评估风险并为保险公司设定费率。

3.1 危险函数

危险函数(也称为失败率)是一个条件概率,它表示在某一时刻,一个尚未发生事件的个体在下一时刻发生事件的概率。例如,人寿保险销售人员想知道一个人在年初存活的情况下,在接下来一年死亡的概率。

危险函数的数学定义为:$hazard(t)=\lim_{\Delta\rightarrow0}\frac{Pr[event\ happens\ between\ t\ and\ t + \Delta]}{\Delta\times Pr[event\ has\ not\ happened\ by\ time\ t]}$。

直观上,危险函数值大意味着事件很可能很快发生,生存曲线下降得更快;反之,生存曲线下降缓慢则危险函数值低。需要注意的是,危险函数不是我们活到某个年龄的概率,而是在当前时刻之后的一个小时间段内发生事件的概率。

人类一生的危险函数在不同年龄段有不同的表现。例如,婴儿期危险函数较高,随后下降,在10 - 11岁左右达到最低,之后随着年龄增长,由于各种疾病风险增加,危险函数又上升。

3.2 比例风险回归模型

比例风险回归模型假设每个个体的危险函数是一个共同的基线危险函数的常数倍。即第 $i$ 个个体的危险函数 $h_{i}(t)=C_{i}h(t)$,其中 $C_{i}$ 是一个正数,取决于第 $i$ 个个体的风险因素,且不随时间变化,基线危险函数 $h(t)$ 对所有个体相同。

当 $C_{i}>1$ 时,表明该个体的事件发生风险比基线危险函数描述的风险高;当 $0 < C_{i}<1$ 时,表明风险降低。

比例风险回归(有时也称为Cox回归)通过协变量来建模 $C_{i}$。通常假设一个对数链接函数:$\log C_{i}=\beta_{1}x_{1}+\cdots+\beta_{k}x_{k}$,其中 $\beta_{1},\cdots,\beta_{k}$ 是由软件估计的回归系数。

例如,如果 $\beta_{1}$ 为正,增加 $x_{1}$ 的值会导致危险函数增加,相应的生存时间或事件发生时间会缩短。这与我们的直觉有些相反,因为我们建模的是生存时间的危险函数,而不是生存时间本身,危险函数越大,生存时间越短。在SAS中,可以使用 proc phreg 进行比例风险回归分析。

综上所述,生存分析和比例风险回归在医学、保险等多个领域都有重要的应用。对数秩检验可以帮助我们比较不同组的生存曲线,而比例风险回归则可以进一步考虑协变量对生存时间的影响。在实际应用中,我们需要综合考虑各种因素,如删失问题、伦理问题等,以做出合理的决策。

生存分析与比例风险回归:从理论到应用

4. 比例风险回归的应用与操作流程
4.1 比例风险回归在SAS中的操作

在SAS中进行比例风险回归分析,我们使用 proc phreg 过程步。以下是一个简单的示例,假设我们有一些生存数据,包含生存时间 surv 、删失变量 cens 以及一些协变量 x1 x2 等。

data survival_data;
    input surv cens x1 x2;
    datalines;
    10 1 2 3
    15 0 1 4
    20 1 3 2
    ...
    ;
run;

proc phreg data = survival_data;
    model surv*cens(0) = x1 x2;
run;

在上述代码中:
- data survival_data :创建一个名为 survival_data 的数据集,输入生存时间、删失变量和协变量的数据。
- proc phreg data = survival_data :调用 phreg 过程步,并指定使用 survival_data 数据集。
- model surv*cens(0) = x1 x2 :定义模型, surv*cens(0) 表示生存时间和删失变量, x1 x2 是协变量。

4.2 操作流程总结

下面是在SAS中进行比例风险回归分析的详细操作流程:
1. 数据准备 :确保数据集中包含生存时间变量、删失变量以及需要分析的协变量。
2. 数据输入 :使用 data 步将数据输入到SAS中。
3. 调用 proc phreg :使用 proc phreg 过程步进行比例风险回归分析。
4. 定义模型 :在 model 语句中指定生存时间、删失变量和协变量。
5. 运行分析 :执行 run 语句,SAS会输出回归结果,包括回归系数、标准误、p值等。

5. 生存分析与比例风险回归的综合应用案例
5.1 案例背景

假设我们要研究某种疾病患者的生存情况,考虑患者的年龄、性别、治疗方式等因素对生存时间的影响。我们收集了一组患者的数据,包含生存时间、删失情况以及上述协变量。

5.2 数据整理

首先,我们将数据整理成适合分析的格式,如下表所示:

患者编号 生存时间(天) 删失情况(1 = 事件发生,0 = 删失) 年龄(岁) 性别(1 = 男,0 = 女) 治疗方式(1 = A治疗,0 = B治疗)
1 120 1 55 1 1
2 200 0 45 0 0
3 150 1 60 1 1
5.3 分析步骤
  1. 数据输入 :将上述数据输入到SAS中。
data patient_data;
    input id surv cens age gender treatment;
    datalines;
    1 120 1 55 1 1
    2 200 0 45 0 0
    3 150 1 60 1 1
    ...
    ;
run;
  1. 对数秩检验 :使用 proc lifetest 进行对数秩检验,比较不同治疗方式下的生存曲线。
proc lifetest plots =(s) data = patient_data;
    time surv*cens(0);
    strata treatment;
run;
  1. 比例风险回归分析 :使用 proc phreg 进行比例风险回归分析,考虑年龄、性别和治疗方式等协变量。
proc phreg data = patient_data;
    model surv*cens(0) = age gender treatment;
run;
5.4 结果解读
  • 对数秩检验结果 :如果p值小于设定的显著性水平(如0.05),则表明不同治疗方式下的生存曲线存在显著差异。
  • 比例风险回归结果 :回归系数的正负和大小表示协变量对生存时间的影响方向和程度。例如,如果年龄的回归系数为正,说明年龄越大,患者的危险函数越高,生存时间越短。
6. 总结与展望

生存分析和比例风险回归是研究事件发生时间的重要统计方法。对数秩检验可以帮助我们比较不同组的生存曲线,而比例风险回归则可以进一步考虑协变量对生存时间的影响。在实际应用中,我们需要注意删失问题、生存曲线交叉的解读以及伦理问题等。

未来,随着数据量的不断增加和数据分析技术的不断发展,生存分析和比例风险回归将在医学、保险、社会学等多个领域发挥更加重要的作用。例如,在精准医学中,我们可以利用比例风险回归模型预测患者的生存时间,为个性化治疗提供依据;在保险行业,精算师可以使用这些方法评估风险,制定更加合理的保险费率。

通过不断深入研究和应用这些方法,我们可以更好地理解事件发生的规律,为决策提供更加科学的依据。

以下是一个简单的mermaid流程图,展示了生存分析和比例风险回归的主要步骤:

graph LR
    A[数据准备] --> B[对数秩检验]
    A --> C[比例风险回归分析]
    B --> D[生存曲线比较]
    C --> E[协变量影响分析]
    D --> F[结果解读]
    E --> F

这个流程图清晰地展示了生存分析和比例风险回归的主要流程,从数据准备开始,分别进行对数秩检验和比例风险回归分析,最后进行结果解读。通过这种方式,我们可以系统地分析生存数据,挖掘其中的信息。

内容概要:本文详细介绍了“秒杀商城”微服务架构的设计实战全过程,涵盖系统从需求分析、服务拆分、技术选型到核心功能开发、分布式事务处理、容器化部署及监控链路追踪的完整流程。重点解决了高并发场景下的超卖问题,采用Redis预减库存、消息队列削峰、数据库乐观锁等手段保障数据一致性,并通过Nacos实现服务注册发现配置管理,利用Seata处理跨服务分布式事务,结合RabbitMQ实现异步下单,提升系统吞吐能力。同时,项目支持Docker Compose快速部署和Kubernetes生产级编排,集成Sleuth+Zipkin链路追踪Prometheus+Grafana监控体系,构建可观测性强的微服务系统。; 适合人群:具备Java基础和Spring Boot开发经验,熟悉微服务基本概念的中高级研发人员,尤其是希望深入理解高并发系统设计、分布式事务、服务治理等核心技术的开发者;适合工作2-5年、有志于转型微服务或提升架构能力的工程师; 使用场景及目标:①学习如何基于Spring Cloud Alibaba构建完整的微服务项目;②掌握秒杀场景下高并发、超卖控制、异步化、削峰填谷等关键技术方案;③实践分布式事务(Seata)、服务熔断降级、链路追踪、统一配置中心等企业级中间件的应用;④完成从本地开发到容器化部署的全流程落地; 阅读建议:建议按照文档提供的七个阶段循序渐进地动手实践,重点关注秒杀流程设计、服务间通信机制、分布式事务实现和系统性能优化部分,结合代码调试监控工具深入理解各组件协作原理,真正掌握高并发微服务系统的构建能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值