Chapter 5 因果推断

5.1 探寻可能的影响因素(经典先单因素后多因素分析,所有因素分析结果列入表格)

探索性影响因素研究,即探索对某个临床结局(事件)有影响的关联因素,属于病因学的范畴,探索对结局有影响的可能原因。

所谓”探索性”,是指研究开始没有固定某些感兴趣的影响因素,而是在一堆可能的因素里,探索性挖掘可能有意义的独立影响因素。

主要特点:

  1. 根据上传的科研数据,简单点击设置后,系统探寻结局的可能影响因素,遵循临床研究中常见的流程:先单因素(univariate)筛查 → 再多因素(multivariable)建模

  2. 支持多种回归家族:

  • 二分类结局:Logistic(输出 OR),Log-Binomial(输出 RR)

  • 有序多分类结局:Ordered Logistic(输出 OR,支持 clmpolr

  • 连续结局:线性回归(输出回归系数 β)

  • 生存结局:Cox 回归(输出 HR)

  • 计数/率:Poisson(输出 IRR);Poisson+offset(适用于率、分数、比值

  1. 自动合并单因素和多因素分析结果

  2. 支持人工纳入多因素变量、逐步回归纳入多因素变量

  3. 支持一键自动进行缺失数据多重填补(Multiple imputation)

  4. 支持一键自动把连续性变量拆分成分类变量

  5. 自动生成新英格兰医学杂志风格的华丽森林图

  6. 自动批量生成生存曲线图

  7. 生成 word 统计报告,自动生成 Title, Objective, Methods 和 Results, 生成 SCI 期刊标准统计表格

核心产物:投稿用表格(单因素/多因素/多重填补三栏合并)、回归系数表拟合与共线性诊断森林图批量生存曲线一键下载 Word/PPT 报告可复现的 R 源代码

Logistic 回归:

Log-Binomial 回归:

Linear 回归:

Cox 回归:

Poisson 回归:

多重填补:

回归森林图:

5.1.1 准备数据

首先务必按照下面的格式准备数据(网站上可下载,下载后在此基础上修改):

下载csv样例数据(右击另存为)

打开如下图:

本样例数据的规则:

  1. 一个患者一行(这是准备数据最重要的前提)。

  2. 每个患者准备两大类数据,影响因素变量和结局变量:

如图所示,hospital, treatment, age, age2, sex, obstruct, prfor, adhear, differ, extent 为影响因素(自变量),而blood, effect, status, time, occurrence在本例中是结局变量。

  1. 影响因素变量有两种,连续性变量(值是连续数据,它可以在变量值所属区间内任意进行取值,如年龄(岁)、血糖值、人的身高、智商等)以及分类变量(是说明事物类别的一个名称,其取值是分类数据。如”性别”就是一个分类变量,其变量值为”男”或”女”;“行业”也是一个分类变量,其变量值可以为”零售业”、“旅游业”、“汽车制造 业”等),在本例中 age是连续性变量(numeric), 其他的是分类变量(factor)。age单位为”岁”时为连续变量,而age2为年龄段分组,这时候为分类变量。

以上概念很重要,后面有一个页面专门设置连续变量和分类变量。

  1. 结局变量在本工具中分为几类:
  • 连续型结局变量

如本例中的blood(某血液检测指标)

  • 二分类结局变量

如本例中的 effect(疗效)为二分类变量(Good,Bad)

  • 有序分类结局变量

如本例中的 differ 为有序分类变量(Poor, Moderate, Well)

  • 生存型结局变量

需要用两个变量组合来表示,如本例中的status和time。

status代表患者在研究结束时的状态,在本工具中只能取0和1两个数字,不要用字符文本,否则会出错。0 代表没观察到事件发生(如没死或者失访),1 代表观察到了事件发生(如已经死亡且录入了死亡日期)。

time代表从开始日期(开始日期的定义由你的研究目的决定,如随机对照研究往往取随机化入组的那一天为开始日期,而观察性研究可以取首次诊断日期或首次治疗日期等等根据研究目的而定)到结局日期的时间差。当status=1时,结局日期为发生事件(如死亡)的日期,当status=0时,结局日期为最后一次活着的日期(如研究结束日,或随后一次随访日)。

总之,time是一个数值型变量,您需要填入患者从开始到死亡或者随后一次随访时,一共活着的天数。如time为56,status为1时代表患者从开始到死亡活了56天;当time为56,status为0时代表患者没观察到死亡,从开始到最后一次随访,活了56天。

准备数据时,time填入一个非负的整数,status填入0或1,time和status都不能为空,每个患者都必须填入数字。time或status不确定(缺失)时,该患者最好不要放入本数据库。

5.1.2 进入模块

接下来我们进入模块,点击软件顶部菜单的“因果推断”,然后点击“探寻可能的影响因素(经典先单因素后多因素分析,所有因素分析结果列入表格)” 进入模块:

5.1.3 前提条件

  1. 已在前面的 “数据导入/定义字段” 完成:变量类型设定、必要的重编码与命名(并点击应用更改直至按钮变绿)。

  2. 如需排除异常/限定亚组,建议先在 “患者筛选和亚组选择” 完成筛选。

  3. 结局变量准备:

  • Logistic/Log-Binomial:确保结局只有两个水平,并在本页明确选择“事件”所对应的水平

  • Cox:提供 time(时间,数值型)与 status(状态,二分类;1=事件、0=删失),并在本页指定哪个水平为事件

  • Poisson/offset:应变量(分子/计数)与 offset(分母)应为非负整数;分母>0。

5.1.4 页面结构与导航

本页包含 6 个页签(Tab):

  1. 使用说明

  2. 单因素多因素分析:本模块的核心设置与表格输出。

  3. 生成森林图:基于回归结果绘制单因素/多因素森林图。

  4. 批量生成生存曲线:仅当上一步做的是生存分析时可用。

  5. 下载所有 Word 图表和统计报告:生成表格、图形、英文/中文报告、PPT。

  6. 查看 R 源代码和原始输出:导出可复现的数据与注释版源代码。


5.1.5 选择结局类型与模型(Family)

在左侧面板 “选择结局变量的类型及相应的模型种类”

  • Logistic / Log-Binomial(二分类):先在 “应变量(二分类)” 选择结局,再在 “发生事件的水平” 指定哪一水平为“1(事件)”。

  • Ordered Logistic(有序多分类):先将结局在“定义字段”页设为有序因子(按从低到高排序),本页可在 clm/polr 两种实现间切换(推荐 clm,若报错可用 polr)。

  • Linear(连续):结局需为数值型。

  • Cox(生存):选择 timestatus 两列,并在 “发生事件的水平” 指定事件值。

  • Poisson(计数):选择非负整数的应变量。

  • Poisson+offset(率/比):分别选择分子分母(系统自动取 log(分母) 作为 offset)。

务必注意: - “发生事件的水平”选错,会导致 OR/HR/RR/IRR 方向完全相反。 - Poisson/offset 中,分子与分母不能是同一变量;分母需为正数

5.1.6 选择候选自变量(Explanatory)

“候选影响因素/自变量” 中多选变量。系统自动:

  • 排除没有变异(只有一个水平)或全缺失的变量;

  • 对字符型/高水平数的变量做合理过滤;

  • Cox 会自动排除 time/status;offset 会排除 分子/分母

若某变量在因变量缺失删行后只剩单一取值,会被自动排除。

5.1.7 多因素纳入策略(Multi-method)

  • Full model:全部候选变量进入多因素(注意 EPV ≈ 事件数/变量数 ≥ 10)。

  • Reduced model(推荐):基于文献与专业知识手工勾选进入多因素的变量。

  • 按单因素 P 值筛选(不推荐):仅纳入单因素 P < 阈值(如 0.05/0.1)的变量。

  • 逐步回归(stepAIC, backward):从全模型开始按 AIC 后退筛选,可在 “强制入选” 中指定必保留变量(如年龄、性别)。

经验提示:逐步回归结果不稳定、对样本敏感;推荐先用“因果推断/自动筛选”模块完成稳健筛选,再回到此处用 Reduced model 手工指定。

5.1.8 设定分类变量的参照组

“设置分类变量的参照组” 盒子中,为每个分类自变量选择参考组(默认取第一个水平)。

5.1.9 连续变量的处理

  • 标准化/变换:在 “对连续性变量进行标准化处理” 中为每个数值型变量按需选择:

  • 不处理 / 中心化(减去均值)/ 标准化(中心化后除以标准差)/ log 变换

  • 按分位数离散化(可选):勾选 “将连续性变量根据分位数转换成 n 等分”,选择待转换变量与分组数(常用 2–4 组),可选择是否显示切点范围。

提醒:将连续变量分组会损失信息、降低功效,除非确有临床意义或用于图表展示,一般不建议过度分箱。

5.1.10 缺失值处理(可选:多重插补 MI)

勾选 “对自变量缺失值进行多重填补”,设定 seed 与数据集个数 m(默认 5)。系统会:

  • 通过 mice 生成多套数据、分别建模并自动合并(pool)估计;

  • 合并结果在第三栏“Multiple Imputation”中展示,同时提供合并后的拟合指标表(glance)。

重要:若勾选 MI不要再选择 profile likelihood CI(该方法对 MI 无效)。

5.1.11 表格展示与统计选项

  • 置信区间Wald(与传统软件一致)或 profile likelihood(更精确,勿与 MI 同用)。

  • 是否显示 N/Event是否附加模型拟合指标(glance 底注)。

  • 分类自变量 P 值类型:每个亚组 vs 参照组的 P(哑变量法,期刊常见)或 Global P

  • P 值展示:原始 P / P+星号 / 仅星号。

  • 小数位:效应量 digits 与 P 值 p_digits

  • 设置完毕,点击 “生成/更新影响因素分析表” 执行分析。

5.1.12 查看与解读结果

  • 投稿用表格:左栏单因素,中栏多因素,若启用 MI,右栏显示 多重填补 结果。若 OR/HR/IRR 极大或 CI 为 NA/Inf,请参考“问题排查”。

  • 显示回归系数的表格:输出估计值与标准误等(便于附录/补充材料)。

  • 模型拟合评价/优度排序/多重共线诊断:展示 glance 系列指标;Ordered Logistic 的 clm 另有专门的拟合表。


5.1.13 生成森林图

进入 “生成森林图”

  1. 点击按钮分别生成单因素多因素森林图(MI 时会提供合并后图)。

  2. 若图中 OR/HR/IRR 或其 CI 出现极大(>999)或极小(≈0),坐标会被压缩,请在左侧手动设置横轴上下限(如 0.1–10)与刻度。

  3. 若结果出现 0 或 Inf,系统会自动将其截断为极小/极大值以便绘图,并用带箭头的线表示越界;此时亦需手动设置坐标


5.1.14 批量生成生存曲线(仅生存分析)

  1. 确认上一页选择的是 Cox

  2. 选择时间单位与换算(1 年=365.25 天,1 月=30.4375 天)。

  3. 点击 “生成/更新生存曲线” 预览;根据需要调节图像宽高与字体X 轴最小刻度等,直至不拥挤。

  4. 右击图片可另存为 PNG。


5.1.15 下载:表格、报告与 PPT

“下载所有 Word 图表和统计报告”

  • 仅图表(速度快):下载 Word 版表格与图。

  • 英文/中文统计报告(含标题、方法、软件版本、结果描述、表图):

  • 英文报告(推荐);中文报告为辅助(可能有个别用语不够地道)。

  • 重要提示:若数据库仍用 0/1 表示“否/是”、1/2 表示“男/女”,请先回到重编码改成有意义的文字,否则自动撰写部分将难以阅读。

  • PPT 报告:英文/中文两种(适合汇报)。

报告生成需时间,请等待下载完成;建议用 Microsoft Word 打开,WPS 可能导致表头与脚注错位。


5.1.16 R 源代码与可复现性

“查看 R 源代码和原始输出”

  1. 先点击 下载 data_frame.RData,在 R 中 load('你的下载路径/data_frame.RData') 或直接双击用 RStudio 打开。

  2. 选择源代码注释语言(中文/英文),点击 下载 R 源代码文件

  3. 重要:下载代码前,请保持本模块选项固定不再改动,否则代码与数据不一致会报错。


5.1.17 常见问题与排查

  • OR/HR/IRR 极端或 CI 为 NA/Inf

  • 亚组样本太少 → 合并相邻水平;

  • 某亚组事件数为 0 → 合并水平或更换参照组;

  • 多因素时有效样本骤减(因协变量缺失多)→ 考虑 多重填补

  • 协变量间共线性严重 → 变量筛选/降维;

  • Log-Binomial 不收敛时可改用 Logistic 报 OR。

  • “need at least two non-NA values to interpolate”

  • 某自变量与结局完美相关/重复信息,或同一变量的不同衍生形态同时入模(如 ageage_group 同时进入);去掉其中之一。

  • Ordered Logistic 报错

  • 尝试在 clm/polr 间切换;确认结局为有序因子且顺序正确。

  • Poisson/offset 报错

  • 确认应变量/分母均为非负整数且分母>0;避免将同一列同时作为分子与分母。

  • Cox 报错

  • time正数status 明确事件水平;避免负时间或全删失。

  • MI 与 CI 方法冲突

  • 启用 MI 时,请使用 Wald CI,不要选 profile likelihood。


5.1.18 质量核对清单(提交前必看)

  • 结局类型选择正确,并已指定事件水平(Logistic/Cox)。

  • 分类自变量均已设定合适参照组,稀有水平已适度合并。

  • 连续变量是否被不必要地离散化?若已分组,是否同时保留原始连续变量用于建模或敏感性分析?

  • EPV 原则:事件数/自变量数 ≥ ~10,避免过拟合;共线性已检查。

  • Poisson/offset:分子/分母为非负整数,分母>0。

  • 报告前核对:CI 方法、P 值展示方式、小数位、是否显示 N/Event 与拟合指标。


5.1.19 完成标志

  • “投稿用表格”成功生成,必要时附 MI拟合指标

  • 森林图能清晰展示(必要时已手动设置坐标轴);

  • 需要时已生成生存曲线;

  • 已成功下载 Word/PPT 报告与 R 源代码。

5.1.20 小贴士

  • 长时计算属正常现象;变量多/样本大时可先做变量筛选再运行。

  • 避免在同一模型里放入同源衍生变量(如原值与分组、或高度相关的两列);

  • 逐步回归仅作参考,结论应以临床合理性与先验证据为主;

  • 若需更稳健的变量筛选,可在“因果推断”菜单使用 lasso/弹性网络/随机森林/Boruta 等方法后,再回到此处做多因素回归。

5.2 探寻可能的影响因素(增加交互作用项的多因素分析)

5.2.1 什么是交互作用(Interaction / Effect Modification)?

当自变量 A 对结局的影响取决于另一变量 B 的取值时,A 与 B 之间存在交互作用。统计建模里通常用乘积项(例如 A*B 或 A:B)表示。在不同模型中,这个“依赖关系”是在不同刻度上体现的:

线性回归:在原始数值刻度上(加法刻度)体现。

Logistic / Poisson 回归:在 log(OR)/log(IRR) 的对数刻度上体现(乘法刻度)。

Cox 回归:在 log(HR) 的对数刻度上体现。

5.2.2 与混杂(confounding)的区别:

混杂是“第三个变量同时影响自变量与结局,导致关联被扭曲”,需要控制;

交互作用是“某变量改变了另一变量的效应大小”,需要显式建模并报告分层或条件效应。

5.2.3 为什么在医学研究中重要?

揭示异质性治疗效应(HTE),支持更贴近临床的个体化医疗与分层决策;

解释“为什么在不同人群/不同亚组效果不同”;

指导靶向治疗或风险分层策略。

5.2.4 医学示例:

肿瘤学:治疗 × 基因型 靶向药对 EGFR 突变阳性患者显著有效,但对阴性患者无明显获益。模型里可加入 treatment × EGFR,在 Cox 回归(HR)或 Logistic 回归(OR)上检验交互。

心血管:治疗 × 年龄 一种抗血小板药物对年轻患者降低再梗死风险更明显,而对高龄患者效果减弱。用 age × treatment 检验是否存在年龄相关的效应差异。

呼吸:吸烟 × 粉尘暴露 工业粉尘对慢阻肺发病的影响在吸烟者中更强(IRR 更高),在不吸烟者中相对较弱。用 Poisson(或负二项)回归设置 dust × smoking 检验交互。

代谢:运动干预 × BMI(连续变量) 运动干预对血糖(线性回归中的 β)下降幅度,随 BMI 增加而更明显。将 BMI(建议先中心化/标准化)与 intervention 做乘积项 BMI × intervention。

5.2.5 建模与解读要点

务必包含主效应: 建议将参与交互的每个变量的主效应(如 A、B)与交互项(A:B)一并纳入模型。

连续变量先做尺度处理更稳健: 对参与交互的连续自变量,建议中心化或标准化后再与其他变量相乘,可提升数值稳定性、降低多重共线性。

功效与事件数: 交互项会显著增加参数个数。遵循 EPV(events per variable)经验法则,确保样本量/事件数足够。

报告方式: 若交互显著(常用 P_interaction < 0.05 作为线索),需给出分层/条件效应(例如分别给出男性与女性的 OR/HR,或在不同 BMI 水平的效应曲线),并辅以森林图/分层曲线帮助阅读。

避免冗余与共线性: 避免一个变量与它的派生变量(如 age 与 age_group)同时放入同一模型;必要时对高基数分类变量合并水平。

5.2.6 模块概述

本模块用于多因素影响因素分析,本质为多种回归分析,可以添加自变量间的交互作用项,并生成可直接用于科研论文发表的高质量统计表格和报告。

5.2.7 主要功能

  • 多种回归模型支持:线性回归、Logistic 回归、有序 Logistic 回归、无序分类多项式回归,Cox 回归、Poisson 回归等

  • 交互作用分析:支持多变量交互作用项的灵活添加

  • 分类变量参照组设置:可自定义分类变量的参照组

  • 连续变量标准化:支持中心化、标准化、Log 变换等处理

  • 结果可视化与导出:生成标准化统计表格,支持 Word 报告导出

  • R 代码生成:自动生成可复现的 R 代码

5.2.8 准备数据

首先务必按照下面的格式准备数据(网站上可下载,下载后在此基础上修改):

下载csv样例数据(右击另存为)

打开如下图:

本样例数据的规则:

  1. 一个患者一行(这是准备数据最重要的前提)。

  2. 每个患者准备两大类数据,影响因素变量和结局变量:

如图所示,hospital, treatment, age, age2, sex, obstruct, prfor, adhear, differ, extent 为影响因素(自变量),而blood, effect, status, time, occurrence在本例中是结局变量。

  1. 影响因素变量有两种,连续性变量(值是连续数据,它可以在变量值所属区间内任意进行取值,如年龄(岁)、血糖值、人的身高、智商等)以及分类变量(是说明事物类别的一个名称,其取值是分类数据。如”性别”就是一个分类变量,其变量值为”男”或”女”;“行业”也是一个分类变量,其变量值可以为”零售业”、“旅游业”、“汽车制造 业”等),在本例中 age是连续性变量(numeric), 其他的是分类变量(factor)。age单位为”岁”时为连续变量,而age2为年龄段分组,这时候为分类变量。

以上概念很重要,后面有一个页面专门设置连续变量和分类变量。

  1. 结局变量在本工具中分为几类:
  • 连续型结局变量

如本例中的blood(某血液检测指标)

  • 二分类结局变量

如本例中的 effect(疗效)为二分类变量(Good,Bad)

  • 有序分类结局变量

如本例中的 differ 为有序分类变量(Poor, Moderate, Well)

  • 生存型结局变量

需要用两个变量组合来表示,如本例中的status和time。

status代表患者在研究结束时的状态,在本工具中只能取0和1两个数字,不要用字符文本,否则会出错。0 代表没观察到事件发生(如没死或者失访),1 代表观察到了事件发生(如已经死亡且录入了死亡日期)。

time代表从开始日期(开始日期的定义由你的研究目的决定,如随机对照研究往往取随机化入组的那一天为开始日期,而观察性研究可以取首次诊断日期或首次治疗日期等等根据研究目的而定)到结局日期的时间差。当status=1时,结局日期为发生事件(如死亡)的日期,当status=0时,结局日期为最后一次活着的日期(如研究结束日,或随后一次随访日)。

总之,time是一个数值型变量,您需要填入患者从开始到死亡或者随后一次随访时,一共活着的天数。如time为56,status为1时代表患者从开始到死亡活了56天;当time为56,status为0时代表患者没观察到死亡,从开始到最后一次随访,活了56天。

准备数据时,time填入一个非负的整数,status填入0或1,time和status都不能为空,每个患者都必须填入数字。time或status不确定(缺失)时,该患者最好不要放入本数据库。

5.2.9 进入模块

接下来我们进入模块,点击软件顶部菜单的“因果推断”,然后点击“探寻可能的影响因素(仅多因素分析,支持增加交互作用项)” 进入模块:

5.2.10 模型选择

“选择结局变量的类型及相应的模型种类” 部分,用户可选择不同的回归模型:

模型类型 适用场景 R 函数
线性回归 连续型结局变量(如 BMI、血压等) glm(family = gaussian)
Logistic 回归 二分类结局变量(如 有效/无效、阳性/阴性) glm(family = binomial)
Log-Binomial 回归 二分类结局变量(如 有效/无效、阳性/阴性) glm(family = binomial(link="log"))
有序 多分类 Logistic 回归 有序多分类结局变量(如 轻度/中度/重度) ordinal::clm()
无序多分类 Logistic 回归 无序多分类结局变量(如 肿瘤分型、职业类别) nnet::multinom()
Cox 回归 生存数据(如 OS、PFS) survival::coxph()
Poisson 回归 计数型结局变量(如 发作次数、细胞计数) glm(family = poisson)
Poisson + offset 比例型结局变量(如 受精率、有效率) glm(family = poisson, offset = log(...))

5.2.11 影响因素(自变量)

  • 可多选,支持分类变量和连续变量

  • 系统自动排除高基数分类变量(>30 类)

5.2.12 交互作用分析(重点)

5.2.12.1 如何添加交互作用项

  1. 点击 “增加交互作用项” 按钮,可多次点击,每点击一次,添加一项新的交互作用

  2. 在每个选择器中勾选 2 个或更多变量(如 agesex

  3. 系统自动生成交互作用公式(如 age:sex

5.2.12.2 交互作用公式

  • 最终公式会显示在 “最终纳入模型的交互作用项” 下方

  • 例如:

age:sex + bmi:smoking

表示同时分析 age × sexbmi × smoking 的交互作用

5.2.12.3 注意事项

  • 必须包含主效应:如果模型中包含 age:sex,建议同时包含 agesex 的主效应

  • 避免多重共线性:交互作用项可能导致共线性问题,需检查模型诊断

  • 结果解读:交互作用显著时,说明两个变量的联合效应不同于单独效应

5.2.13 分类变量参照组设置

  • 系统自动检测分类变量,并允许用户指定参照组

  • 例如:

  • 变量 smoking 的参照组默认是第一个水平(如 never

  • 可手动更改为 formercurrent

5.2.14 连续变量标准化

  • 支持 中心化(centered)标准化(standardized)Log 变换

  • 适用于:

  • 消除量纲影响(如 BMI 和年龄的单位不同)

  • 改善模型收敛性

5.2.15 统计选项

5.2.15.1 置信区间计算方法

  • Wald CI(传统方法,与 SPSS/STATA 一致)

  • Profile Likelihood CI(R 默认方法,更精确)

5.2.15.2 P 值显示方式

  • 原始 P 值(如 P = 0.023

  • 星号标注(如 * P < 0.05

5.2.15.3 表格定制

  • 是否显示 N/Event 列

  • 是否显示模型拟合指标(如 AIC、BIC)

5.2.16 生成森林图

5.2.17 结果输出

5.2.17.1 统计表格

  • 主表格:回归系数、OR/HR、95% CI、P 值

  • 有序 Logistic 回归额外输出:截距项(thresholds)

  • 回归系数表格(附录):显示原始回归系数

5.2.17.2 报告导出

  • Word 报告(中英文可选)

  • R 代码(可复现分析)

5.2.18 常见问题

Q1: 交互作用项如何解释?

  • 例如 age:sex 显著,说明年龄对结局的影响因性别不同而异

Q2: 分类变量的参照组如何选择?

  • 通常选择对照组(如 non-smoker)或最常见组

Q3: 为什么我的模型不收敛?

  • 可能原因:

  • 样本量不足

  • 变量间高度相关

  • 某个自变量和应变量呈 100% 相关

5.2.19 总结

本模块提供了一套完整的回归分析流程,特别适合医学、生物统计等领域的研究人员。其核心优势包括:

  1. 交互作用分析:灵活添加多变量交互项

  2. 参照组自定义:优化分类变量分析

  3. 标准化处理:提升模型稳定性

  4. 一键导出:直接生成投稿级表格

点击 “开始进行多因素影响因素分析” 即可运行分析!

5.3 根据多因素不同自变量组合的多模型批量比较及拟合优度评价

5.3.1 一键生成多模型(不同自变量组合)比较的表格:

5.3.2 一键完成多模型评价指标(拟合优度、多重共线性分析)比较:

5.3.3 引言

在医学统计分析中,我们经常要评估各种因素如何影响某个特定的健康结局。这些因素可以是生活习惯(如抽烟、饮酒)、遗传倾向、疾病状态(如心脏病)、环境暴露或者医疗干预(如药物治疗)。为了理解这些影响因素(或自变量)与健康结局(或因变量)之间的关系,研究者会运用多种统计回归模型来分析数据。

回归分析是一种强大的统计工具,它可以揭示一个或多个自变量对一个因变量的影响。根据因变量的类型和研究的需求,可以选择不同类型的回归分析:

  • 逻辑回归(Logistic regression)适用于二分类结果变量,如疾病有无。

  • 线性回归(Linear regression)适合连续结果变量,如血压或胆固醇水平。

  • Cox回归(Cox proportional hazards regression)用于分析生存时间数据,即时间到一个事件(如死亡或复发)的发生。

  • Poisson 回归 适用于计数数据或事件发生率的分析。

在医学研究中,多因素回归模型是一种常用的统计方法,用来评估多个自变量(即独立变量)如何同时影响一个因变量(即依赖变量)。拟合多个模型的目的是为了寻找解释因变量变化的最佳自变量组合。通过比较不同模型的拟合优度,研究者可以评估哪个模型最能准确描述数据。同时,分析模型的共线性可以发现自变量之间是否存在高度相关的问题,这可能会影响模型的稳定性和解释性。

例如研究心血管疾病的风险因素。研究者可能会建立一个多因素回归模型,将年龄、性别、血压、胆固醇水平、吸烟状态等自变量纳入模型,来探索心血管疾病事件(心脏病发作、中风等)的独立影响因素。通过构建不同的模型组合,比如一个模型只包括年龄和性别,另一个模型加入了血压和胆固醇水平,研究者可以判断哪些因素是心血管疾病的独立影响因子,以及它们的相对重要性。

5.3.4 准备数据

首先务必按照下面的格式准备数据(网站上可下载,下载后在此基础上修改):

下载csv样例数据(右击另存为)

打开如下图:

本样例数据的规则:

  1. 一个患者一行(这是准备数据最重要的前提)。

  2. 每个患者准备两大类数据,影响因素变量和结局变量,影响因素和结局分别都可以有多个变量。

如图所示,hospital, treatment, age, age2, sex, obstruct, prfor, adhear, differ, extent 为影响因素(自变量),而blood, effect, status, time, occurrence在本例中是结局变量。

  1. 影响因素变量有两种,连续性变量(值是连续数据,它可以在变量值所属区间内任意进行取值,如年龄(岁)、血糖值、人的身高、智商等)以及分类变量(是说明事物类别的一个名称,其取值是分类数据。如”性别”就是一个分类变量,其变量值为”男”或”女”;“行业”也是一个分类变量,其变量值可以为”零售业”、“旅游业”、“汽车制造 业”等),在本例中 age是连续性变量(numeric), 其他的是分类变量(factor)。age单位为”岁”时为连续变量,而age2为年龄段分组,这时候为分类变量。

以上概念很重要,后面有一个页面专门设置连续变量和分类变量。

  1. 结局变量在本工具中分为几类:
  • 连续型结局变量

如本例中的blood(某血液检测指标)

  • 二分类结局变量

如本例中的effect(疗效)为二分类变量(Good,Bad)

  • 生存型结局变量

需要用两个变量组合来表示,如本例中的status和time。

status代表患者在研究结束时的状态,在本工具中只能取0和1两个数字,不要用字符文本,否则会出错。0 代表没观察到事件发生(如没死或者失访),1 代表观察到了事件发生(如已经死亡且录入了死亡日期)。

time代表从开始日期(开始日期的定义由你的研究目的决定,如随机对照研究往往取随机化入组的那一天为开始日期,而观察性研究可以取首次诊断日期或首次治疗日期等等根据研究目的而定)到结局日期的时间差。当status=1时,结局日期为发生事件(如死亡)的日期,当status=0时,结局日期为最后一次活着的日期(如研究结束日,或随后一次随访日)。

总之,time是一个数值型变量,您需要填入患者从开始到死亡或者随后一次随访时,一共活着的天数。如time为56,status为1时代表患者从开始到死亡活了56天;当time为56,status为0时代表患者没观察到死亡,从开始到最后一次随访,活了56天。

准备数据时,time填入一个非负的整数,status填入0或1,time和status都不能为空,每个患者都必须填入数字。time或status不确定(缺失)时,该患者最好不要放入本数据库。

  • 计数型结局变量

计数型的结局变量为一个非负的整数,如本例中occurrence,是急性发作次数,无法取负数,也不可能取小数。

  • 分数型结局变量

当结局变量为一个分数,如发病率、患病率、受精率等,结局包含一个分子和一个分母。如要研究全国各地疾病患病率的影响因素时,按照每个地区一行来准备数据,分子和分母设置成两个变量(列),如分子为患病人数,分母为地区人口数。

准备数据的规则是:分子和分母都是非负整数,不允许填入负数,也不允许填入小数,分子的数值不能大于分母。

5.3.5 操作步骤

步骤 1: 数据准备

  • 在开始之前,请确保您已经在软件的“数据准备”页面上传了您的数据集,并在“定义字段”选项卡检查并应用了更改。

步骤 2: 等待数据转换

  • 打开页面后,请耐心等待半分钟让系统处理并加载您的数据。如果您的数据库较大,这个过程可能需要更长时间。系统会自动把水平数低于6的数值型变量转换为分类变量,当然您也可以手动改回来不做转换

步骤 3: 选择模型类型

  • 接下来,您需要根据结局变量的类型选择合适的模型。可选的模型包括二分类变量(Logistic回归)、连续性变量(线性回归)、生存变量(Cox回归)、计数变量(Poisson回归)等。

步骤 4: 选择结局变量

  • 根据您选择的模型类型,系统会要求您从数据库中选择相应的结局变量。例如,如果您选择了Logistic回归,就需要选择一个二分类的结局变量。

步骤 5: 定义模型自变量

  • 确定您想要在模型中放入哪些自变量。

步骤 6: 模型比较

  • 您可以建立并比较多个模型。选择要比较的模型数量,并为每个模型选择要放入的自变量。请确保不同模型之间的自变量选择不完全相同。

步骤 7: 分类变量参照组设定

  • 对于非数值型的分类变量,您需要为每个变量选择一个参照组。

步骤 8: 结果呈现

  • 确定您如何呈现结果数据,包括是否显示N和Event值,以及效应量和P值的小数位数。

步骤 9: 生成结果

  • 完成上述设置后,点击相应的按钮生成影响因素分析表。

在整个过程中,如果您在某个步骤遇到了问题,系统可能会提供警告或错误信息。请按照提示进行相应的修改。如果一切顺利,您将能够生成反映不同影响因素对结果影响的统计模型比较表格。

5.4 探寻可能的影响因素(混合效应模型,多水平模型,Mixed model)

混合效应模型是一类非常重要的统计模型,它广泛应用于各种科学研究领域。混合效应模型是线性模型的推广,它引入了固定效应和随机效应。固定效应通常是我们主要关注并且在所有个体或样本中都相同或者类似的因素,如年龄、性别等。固定效应参数是常数,不随个体或样本的不同而变化。

相反,随机效应则是指影响结果的因素在不同的个体或样本之间具有差异性,这种差异性通常是随机的,无法用固定的数值来描述。随机效应在个体或样本之间是变化的,并且通常假设服从正态分布。

医学中混和效应模型常见的场景有:多水平模型和重复测量模型

1) 多水平模型主要是患者之间有地区聚集性,导致个体之间并不独立,例如多中心研究中,每个中心的患者的环境有相似性,每个不同医生治疗的患者也有相似性。

举例:

在医学研究中,比如我们想研究心脏病的发病率与吸烟、年龄、性别等因素的关系。这些吸烟、年龄、性别就是固定效应,因为我们假设这些因素的效应是在所有个体之间都保持不变的。

然而,如果我们的数据来自不同的医院或者不同的城市,我们可能会考虑到医院或者城市对疾病发生率的影响。这种影响可能是由于各个医院或者城市的医疗条件、生活环境、生活习惯等多种因素造成的。这时,医院和城市就可以被看作是随机效应。我们无法具体衡量每个医院或者城市对疾病发生率的具体影响,但是我们可以假设这种影响在各个医院或者城市之间是存在差异的,并且这种差异是随机的。

因此,通过引入随机效应,混合效应模型可以更好地拟合这种数据,并且可以更准确地估计固定效应(如吸烟、年龄、性别)对疾病发生率的影响。

混合效应模型可以用于更加复杂的场景,例如研究对象之间存在群体差异(如不同医院的病人、不同地区的居民等)或者观测数据存在时间序列关系(如对同一病人多次进行的观测)等情况。

例如,在医学研究中,我们可能关注某种疾病的发生率是否与特定的风险因素有关,同时考虑到各个医院的影响。此时,我们的因变量是二项分布(患病与否),自变量是风险因素(如年龄、性别、吸烟与否等),随机效应可以是医院(即不同医院可能会对疾病的发生率产生不同的影响)。通过混合效应模型,我们可以有效地建立因变量、自变量和随机效应之间的关系,从而更准确地探索特定风险因素对疾病发生的影响。

2) 重复测量模型

在医学研究中,混合效应模型通过引入固定效应和随机效应,可以有效处理多次重复测量数据,例如在一年内每月对一组糖尿病患者的血糖水平进行监测。

固定效应是我们关心的、并且在所有个体或样本中都相同或类似的因素,如饮食控制和运动治疗。这些因素是我们想要研究其对血糖水平影响的主要变量。

然而,每个患者的血糖水平并不是只受固定效应影响,他们的基线健康状况、生活习惯、遗传背景等个体特性也会对血糖水平产生影响。同一患者在不同时间的血糖水平测量值之间往往存在一定的相关性,即他们具有聚集性,这是由于他们受到同一个个体特定特性的影响。这种在个体间的测量值的聚集性或相关性,可以通过引入随机效应来进行建模。

具体来说,我们可以假设每个患者都有自己的随机效应,这个效应对该患者所有的测量值都有影响。引入随机效应后,我们就可以在模型中同时考虑到个体间的差异(即随机效应)和治疗效应(即固定效应)。

因此,混合效应模型可以更好地处理这种重复测量数据,可以更准确地估计固定效应对血糖水平的平均影响,并且可以更好地预测每个患者在未来的血糖变化趋势。这在医学研究中具有重要的应用价值,对于疾病的治疗和预防提供了重要的参考依据。

本软件提供了混合效应模型模块,可以用于估计具有类别和/或连续因变量和自变量的混合效应模型,还提供了各种选项来方便用户估计交互作用、简单斜率、简单效应等。

本软件可以估计多种线性模型,包括固定效应和随机效应模型。公式的写法和R中lme4包相同,例如 (1|hospital) 表示将医院作为随机效应。

5.4.1 混和效应模型分析

本模块专门用于进行混合效应模型(Mixed Effects Models)的影响因素(多因素)分析。混合效应模型是一种同时包含固定效应和随机效应的统计模型,适用于处理具有层级结构或重复测量的数据。

5.4.2 主要功能

  • 支持多种类型的混合效应模型:线性混合模型、Logistic混合模型、Poisson混合模型、有序Logistic混合模型和Cox混合模型

  • 提供交互式操作界面,无需编程即可完成复杂分析

  • 自动生成符合学术规范的统计表格

  • 支持多种数据预处理选项

  • 一键生成可下载的Word格式分析报告

5.4.3 数据准备

在使用本软件前,请确保您的数据已经完成以下准备工作:

  1. 数据已经导入到系统中

  2. 变量类型已正确设置(连续变量设为numeric,分类变量设为factor)

  3. 有序分类变量已按从低到高顺序排列

  4. 数据中不包含异常值或错误值

首先务必按照下面的格式准备数据(网站上可下载,下载后在此基础上修改):

下载csv样例数据(右击另存为)

打开如下图:

本样例数据的特点:

  1. 表示群组(聚集)的变量,如 Hospital,Province

  2. 代表结局的应变量:例如上图中的Effectiveness,是一个二分类变量,代表疗效。

  3. 解释变量(自变量):例如上图中的Age、Sex、Treatment等等一系列指标,应当设置成固定效应

5.4.4 进入模块

接下来我们进入模块,点击软件顶部菜单的“因果推断”,然后点击“探寻可能的影响因素(多因素分析),所有因素分析结果列入表格(混合效应模型,多水平模型,Mixed model)” 进入模块:

5.4.5 模型选择

  1. 选择模型类型
  • 根据您的因变量类型,从下拉菜单中选择合适的模型:

  • 连续性变量:选择”线性混合效应模型”(如生物标志物等)

  • 二分类变量:选择”Logistic混合效应模型”(统计OR值)或”Poisson混合效应模型”(统计RR值)

  • 有序多分类变量:选择”有序Logistic混合效应模型”

  • 生存变量:选择”Cox混合效应模型”(如OS、PFS等)

  • 计数变量:选择”Poisson混合效应模型”

  • 分数、率或比值:选择”Poisson混合效应模型+offset”

  1. 选择因变量
  • 根据所选模型类型,系统会自动筛选出符合条件的变量供您选择

  • 点击下拉菜单选择您的因变量

5.4.6 特殊设置(根据模型类型)

5.4.6.1 对于Cox模型:

  1. 选择时间变量:选择代表时间的变量(如从开始到死亡的时间)

  2. 选择状态变量:选择代表最终状态的二分类变量(如1=死亡,0=存活)

  3. 设置事件水平:选择哪个水平代表发生事件(如选择”死亡”作为事件)

5.4.6.2 对于二分类模型:

  1. 设置事件水平:选择哪个水平代表发生事件(系统会自动将选中的水平设为1)

5.4.6.3 对于Poisson offset模型:

  1. 选择分母变量:选择结局变量的分母(如总人数、卵子总数等)

5.4.7 选择自变量(固定效应)

  1. 选择固定效应变量
  • 从变量列表中选择您想研究的自变量

  • 可以多选,系统会自动排除与因变量高度相关的变量

  1. 添加交互作用项(可选):
  • 点击”增加交互作用项”按钮

  • 从弹出的菜单中选择至少2个变量组合成交互项

  • 可以多次点击添加多个交互项

  • 点击”重置清零”可以清除所有交互项

5.4.8 设置随机效应

  1. 选择群组变量
  • 选择用于生成随机效应的群组变量(如患者ID、医院、中心等)

  • 可以多选,系统最多支持4个群组变量

  1. 指定群组关系(当选择多个群组变量时):
  • 如果是层级嵌套关系(如国家→城市→医院),选择”层级(嵌套)关系”

  • 如果是平行关系(如医院和医生),选择”平行关系”

  1. 选择随机效应项
  • 系统会根据您选择的群组变量自动生成可能的随机效应组合

  • 选择您需要的随机效应:

  • 随机截距模型:选择”Intercept | 群组变量”

  • 随机斜率模型:选择”固定效应 | 群组变量”

  • 可以同时选择随机截距和随机斜率

5.4.9 模型参数设置

  1. 设置分类变量参照组
  • 对于每个分类自变量,从下拉菜单中选择参照组(基线组)

  • 系统默认选择第一个水平作为参照组

  1. 连续变量标准化处理(可选):
  • 对于每个连续变量,可以选择:

  • 不做处理

  • 中心化处理(减去均值)

  • 标准化处理(中心化后除以标准差)

  • Log变换

  1. 表格显示选项
  • 选择是否显示N、Event列

  • 选择是否显示模型拟合参数

  • 选择P值显示方式:

  • 原始P值

  • 原始P值加星号标注

  • 仅星号标注

  • 调整效应量的小数位数

  • 调整P值的小数位数

5.4.10 运行分析

  1. 点击”开始进行多因素混合效应模型分析”按钮

  2. 系统将开始拟合模型,可能需要几秒到几分钟时间,取决于数据规模和模型复杂度

5.4.11 查看结果

分析完成后,系统会显示以下结果:

  1. 模型信息
  • 模型类型

  • R调用公式

  1. 主要结果表格
  • 固定效应估计值、置信区间和P值

  • 随机效应方差成分

  1. 有序Logistic模型特有结果
  • 模型截距/阈值表
  1. 单因素和多因素合并表格(可选)

  2. R原始输出

  • 完整的模型摘要信息

5.4.12 下载报告

  1. 点击”点此下载word文档”按钮

  2. 系统将生成并下载一个Word格式的分析报告

  3. 请使用Microsoft Word打开文档,WPS可能会有兼容性问题

5.4.13 原理说明

5.4.13.1 混合效应模型简介

混合效应模型是传统回归模型的扩展,它同时包含:

  • 固定效应:代表总体平均效应,与研究问题直接相关

  • 随机效应:代表个体或群组间的变异,通常不是直接的研究兴趣

5.4.13.2 模型公式

混合效应模型的一般公式为:
Y = Xβ + Zγ + ε
其中:

  • Y是因变量

  • X是固定效应设计矩阵

  • β是固定效应系数

  • Z是随机效应设计矩阵

  • γ是随机效应系数

  • ε是残差项

5.4.13.3 模型选择指南

  1. 线性混合模型:适用于连续型因变量,假设残差服从正态分布

  2. Logistic混合模型:适用于二分类因变量,使用logit链接函数

  3. Poisson混合模型:适用于计数型因变量,使用log链接函数

  4. 有序Logistic混合模型:适用于有序分类因变量

  5. Cox混合模型:适用于生存时间数据,可以处理删失数据

5.4.13.4 随机效应设置原则

  1. 随机截距:允许不同群组的基线水平不同

  2. 随机斜率:允许不同群组的效应大小不同

  3. 层级嵌套:适用于具有明确层级结构的数据(如学生嵌套在班级中)

  4. 平行结构:适用于交叉分类数据(如患者同时属于不同医院和不同医生)

5.4.14 常见问题解答

Q1: 如何确定是否需要混合效应模型?
A: 如果您的数据具有层级结构或重复测量,或者您预期不同群组间存在变异,则应考虑使用混合效应模型。

Q2: 如何选择随机效应?
A: 根据研究设计和数据结构决定。通常,将可能引起变异的群组变量(如研究中心、医生等)设为随机效应。

Q3: 模型不收敛怎么办?
A: 可以尝试:

  • 简化模型结构

  • 改变优化算法

  • 增加样本量

Q4: 如何解释有序Logistic模型的结果?
A: 有序Logistic模型给出的是累积概率的log odds。正系数表示该变量增加时,因变量倾向于更高类别。

5.4.15 注意事项

  1. 确保数据质量:异常值和缺失值可能影响模型结果

  2. 模型假设检验:线性模型需检验残差正态性,Logistic模型需检验线性假设

  3. 多重比较:当进行大量检验时,考虑P值校正

  4. 样本量要求:混合模型通常需要较多样本,特别是当随机效应复杂时

5.5 探寻可能的影响因素(竞争风险模型 Competing Risks Regression)

5.5.1 竞争风险模型简介

竞争风险模型是一种统计方法,用于分析多个互相排斥的事件发生时间的数据。与传统的生存分析不同,竞争风险模型考虑了一个事件的发生会影响其他事件的发生概率。在医学、流行病学和公共卫生研究中,竞争风险模型广泛应用于多种结局的分析。

5.5.2 定义与出处

竞争风险模型最早由 Gray 和 Fine & Gray 等学者提出,他们的方法论在各类统计学和生存分析的经典著作中得到了广泛讨论和应用。Gray 提出的累积发病率函数 (CIF) 及其相关的 Fine & Gray 竞争风险回归模型为这一领域奠定了基础。

5.5.3 适用范围

竞争风险模型主要适用于以下几类研究:

  • 多种互相排斥的疾病结局(如死于癌症或死于其他疾病)的研究

  • 不同治疗方案对多种结局影响的比较

  • 长期随访数据中的多事件分析

5.5.4 互斥事件的概念

在竞争风险模型中,互斥事件指的是一个事件的发生会排除其他事件的发生。例如,在一项研究中,如果患者可以因不同原因死亡(如死于癌症或死于其他疾病),一旦某个患者因癌症去世,他便不可能再死于其他疾病。因此,这些结局是互斥的。竞争风险模型正是通过考虑这些互斥事件的相互排斥关系来进行分析的。

5.5.5 传统生存分析的弊端

如果在存在竞争结局的情况下仍然使用传统的生存分析方法(如Kaplan-Meier法或Cox回归模型),会存在以下弊端:

  1. 高估事件发生概率:传统生存分析会假设所有其他竞争事件不存在,这会导致对目标事件发生概率的高估。

  2. 错误的风险估计:忽略竞争事件的影响,会导致风险因子的估计值偏差,从而无法准确识别真正的危险因素。

  3. 误导的研究结论:由于未考虑竞争风险,研究结论可能会具有误导性,不利于临床决策和公共卫生政策的制定。

5.5.6 医学研究应用示例

在一项关于癌症患者的研究中,研究者可能会关心患者的不同结局,如死于癌症和死于其他疾病。假设在这项研究中有一部分患者死于癌症,而另一部分患者死于其他疾病。如果仅使用传统生存分析方法,会忽略死于其他疾病的竞争风险,导致对死于癌症的概率估计过高。

通过使用竞争风险模型,研究者能够分别估计患者死于癌症和死于其他疾病的累积发病率,精确识别影响这些结局发生的危险因素。这对于临床决策制定和个体化治疗方案的选择具有重要意义。

本软件提供了便捷的工具,帮助您进行竞争风险模型的单因素和多因素分析,使您能够在复杂的数据中挖掘出有价值的信息,为您的研究提供强有力的支持。

5.5.7 准备数据

首先务必按照下面的格式准备数据(网站上可下载,下载后在此基础上修改):

下载csv样例数据(右击另存为)

打开如下图:

该数据集包含了一组患者的临床信息及其随访结果,主要用于竞争风险模型的分析。数据集中包含了患者的治疗方案、年龄、生物标志物、疾病分期、病理等级、治疗响应、死亡情况及随访时间等变量。以下是各变量的详细说明:

  • trt: 患者接受的治疗方案(Drug A 或 Drug B)

  • age: 患者的年龄

  • marker: 生物标志物水平

  • stage: 疾病分期(T1, T2, T3, T4)

  • grade: 等级(I, II, III)

  • response: 对治疗的响应情况(0:无响应,1:有响应)

  • death: 死亡情况(0:存活,1:死亡)

  • death_cr: 死亡的具体原因(censor:无事件,death from cancer:死于癌症,death other causes:死于其他原因)

  • ttdeath: 发生事件的时间(以月为单位)

5.5.8 数据准备指导

用户在准备自己的数据集进行竞争风险分析时,需要特别注意结局变量和时间变量的构建。以下是具体的准备步骤和要求:

  1. 结局变量(Outcome Variable)
  • 事件类型变量:如上述数据集中的 death_cr,该变量应明确标识出每个样本的结局类型。通常包含以下几种情况:

  • 主要事件:用户关心的主要事件,例如死于癌症。

  • 竞争事件:可能影响主要事件分析的其他事件,例如死于其他疾病。

  • 删失(censoring):随访结束时未发生任何事件。

  1. 时间变量(Time Variable)
  • 随访时间:如上述数据集中的 ttdeath,该变量应记录从基线时间(如诊断日期、治疗开始日期等)到事件发生或随访结束的时间。时间单位可以是天、月或年,但需在分析前明确说明。

  • 如果发生了事件,则填发生事件的时间,如果没有发生事件(censor),则填最后一次随访时间。

5.5.9 进入模块

接下来我们进入模块,点击软件顶部菜单的“因果推断”,然后点击“探寻可能的影响因素(多因素分析),所有因素分析结果列入表格(竞争风险模型 Competing Risks Regression)” 进入模块:

5.5.10 影响因素分析

下一步就是影响因素分析啦:

5.5.11 选择时间变量

进入竞争风险分析页面,系统将自动检测数据中的数值型变量。请选择代表时间的变量(如从开始到发生事件的时间,或从开始到末次随访时间)。

5.5.12 选择状态变量

在选择了时间变量后,系统将自动检测数据中水平数较多的分类变量。请选择代表患者最终状态的变量。该变量需要在数据准备阶段被设置为因子型,且至少有三个取值,例如“未发生事件(censor)”,“死于癌症”,“死于其他疾病”。

5.5.13 选择未发生事件的状态

从状态变量的不同水平中选择一个表示未发生事件(censor)的状态。请确保选择正确,因为这将影响分析结果的准确性。

5.5.14 选择感兴趣的事件

从状态变量的不同水平中选择一个表示感兴趣的事件(如“死于癌症”)。系统会将剩余的其他事件自动设为竞争风险。如果需要,您可以分别选择不同的事件进行多次分析。

5.5.15 选择影响因素/自变量

系统将自动检测数据中的数值型和分类变量。请选择您感兴趣的候选影响因素/自变量,可以多选。系统支持拖拽和移除按钮以方便操作。

5.5.16 设定分类变量的参照组

对于每一个选择的分类变量,选择其参照组。这一步有助于确定分析时的比较基准。

5.5.17 标准化连续变量

系统支持对连续变量进行尺度转换或标准化处理。您可以选择不做处理、中心化、标准化或进行Log变换。

5.5.18 选择纳入多因素分析的变量

系统提供三种选择方式:

  • 全部变量纳入多因素分析

  • 自主选择部分变量纳入多因素分析

  • 使用逐步回归法选择模型变量(推荐先利用“自动变量筛选”模块完成变量筛选)

5.5.19 设置其他选项

可以选择是否将取值范围较少的数值型变量转换为分类变量。将连续变量根据分位数转换为n等分的分类变量。选择是否显示N、Event列,设置P值显示方式,调整效应量和P值的小数位数。

5.5.20 生成影响因素分析表

点击“生成/更新影响因素分析表”按钮,系统将根据您的设置生成竞争风险分析表。

5.5.21 生成森林图

5.5.22 批量生成累积发生率曲线:

5.5.23 累积发生率分析

5.5.23.1 选择时间变量单位

在进行累积发生率分析之前,首先需要明确您原始数据中的时间变量每 1 个单位代表的时间长度。请根据实际情况在以下选项中进行选择:

5.5.23.2 选择累积发生率表的时间单位

为了生成累积发生率表,您需要选择结果展示的时间单位。系统会根据您的选择自动进行时间单位转换,具体转换规则如下:

  • 1 年 = 365.25 天

  • 1 月 = 30.4375 天

  • 1 周 = 7 天

请在以下选项中进行选择:

5.5.23.3 输入累积发生率时间点

根据您选择的累积发生率表的时间单位,输入您希望统计的累积发生率时间点。例如,如果选择的单位是“月”,您可以输入“3, 6, 12”表示计算3个月、6个月和12个月的累积发生率。不同时间单位的示例如下:

  • 天:30天、90天、180天

  • 周:6周、12周、24周

  • 月:3月、6月、12月

  • 年:1年、3年、5年

注意:累积发生率时间点不应超过数据集的最大随访时间。

5.5.23.4 设置小数位数

您可以通过滑动条选择累积发生率结果需要保留的小数位数,范围为0到2位小数。

5.5.23.5 生成累积发生率分析结果

在完成以上所有设置后,点击“生成/更新累积发生率分析结果”按钮,系统将根据您的设置生成累积发生率分析结果。

5.6 有明确的感兴趣的研究因素,而混杂因素调整仅在表格底注(一般线性/Logistic/Cox/Poisson回归)

本模块适合做验证性影响因素研究,验证某个影响因素(如治疗分组、或者是否饮酒等)对某个临床结局(事件)的影响,并控制混杂因素或协变量(如性别、年龄、基线血糖等等)。

所谓 “验证性”,是指研究开始已经有明确的目的,特定要研究某个固定的感兴趣的影响因素,而其他影响因素仅作为协变量处理,不展开讨论。

主要特点:

  • 根据上传的科研数据,简单点击设置后,自动完成不调整协变量和调整协变量的回归分析

  • 支持线性回归、Logistic 回归、Cox 回归、Poisson 回归

  • 支持一键自动把连续性变量拆分成分类变量,如 Q1、Q2、Q3、Q4 等

  • 支持一键把连续性变量做标化、取对数等

  • 生成 word 统计报告,自动生成 Title, Objective, Methods 和 Results, 生成 SCI 期刊标准统计表格

5.6.1 准备数据

首先务必按照下面的格式准备数据(网站上可下载,下载后在此基础上修改):

下载csv样例数据(右击另存为)

打开如下图:

本样例数据的规则:

  1. 一个患者一行(这是准备数据最重要的前提)。

  2. 每个患者准备两大类数据,影响因素变量和结局变量,影响因素和结局分别都可以有多个变量。

如图所示,hospital, treatment, age, age2, sex, obstruct, prfor, adhear, differ, extent 为影响因素(自变量),而blood, effect, status, time, occurrence在本例中是结局变量。

  1. 影响因素变量有两种,连续性变量(值是连续数据,它可以在变量值所属区间内任意进行取值,如年龄(岁)、血糖值、人的身高、智商等)以及分类变量(是说明事物类别的一个名称,其取值是分类数据。如”性别”就是一个分类变量,其变量值为”男”或”女”;“行业”也是一个分类变量,其变量值可以为”零售业”、“旅游业”、“汽车制造 业”等),在本例中 age是连续性变量(numeric), 其他的是分类变量(factor)。age单位为”岁”时为连续变量,而age2为年龄段分组,这时候为分类变量。

以上概念很重要,后面有一个页面专门设置连续变量和分类变量。

  1. 结局变量在本工具中分为几类:
  • 连续型结局变量

如本例中的blood(某血液检测指标)

  • 二分类结局变量

如本例中的effect(疗效)为二分类变量(Good,Bad)

  • 生存型结局变量

需要用两个变量组合来表示,如本例中的status和time。

status代表患者在研究结束时的状态,在本工具中只能取0和1两个数字,不要用字符文本,否则会出错。0 代表没观察到事件发生(如没死或者失访),1 代表观察到了事件发生(如已经死亡且录入了死亡日期)。

time代表从开始日期(开始日期的定义由你的研究目的决定,如随机对照研究往往取随机化入组的那一天为开始日期,而观察性研究可以取首次诊断日期或首次治疗日期等等根据研究目的而定)到结局日期的时间差。当status=1时,结局日期为发生事件(如死亡)的日期,当status=0时,结局日期为最后一次活着的日期(如研究结束日,或随后一次随访日)。

总之,time是一个数值型变量,您需要填入患者从开始到死亡或者随后一次随访时,一共活着的天数。如time为56,status为1时代表患者从开始到死亡活了56天;当time为56,status为0时代表患者没观察到死亡,从开始到最后一次随访,活了56天。

准备数据时,time填入一个非负的整数,status填入0或1,time和status都不能为空,每个患者都必须填入数字。time或status不确定(缺失)时,该患者最好不要放入本数据库。

  • 计数型结局变量

计数型的结局变量为一个非负的整数,如本例中occurrence,是急性发作次数,无法取负数,也不可能取小数。

  • 分数型结局变量

当结局变量为一个分数,如发病率、患病率、受精率等,结局包含一个分子和一个分母。如要研究全国各地疾病患病率的影响因素时,按照每个地区一行来准备数据,分子和分母设置成两个变量(列),如分子为患病人数,分母为地区人口数。

准备数据的规则是:分子和分母都是非负整数,不允许填入负数,也不允许填入小数,分子的数值不能大于分母。

5.6.2 进入模块

接下来我们进入模块,点击软件顶部菜单的“因果推断”,然后点击“有明确的感兴趣的研究因素,而混杂因素调整仅在表格底注(一般线性/Logistic/Cox/Poisson回归)” 进入模块:

5.6.3 选择结局变量

机器人根据结局变量的类型来选择分析方法。二分类变量,系统会选择logistic回归,如果是连续性变量,系统会选择一般线性回归。如果是生存变量Time和Status的组合,系统会采用Cox回归。如果是计次计数变量,系统会选择Poisson回归,当然如果是率或者百分比,也会采用Poisson/负二项回归。

5.6.4 选择影响因素变量

根据提示选择影响因素变量,这里的影响因素是指研究的主要目的,感兴趣的研究变量,论文标题里的主要因素。

5.6.5 选择混杂因素/协变量变量

根据提示选择混杂因素/协变量变量,这里主要指需要调整的其他变量,不是研究主要目的,不感兴趣的自变量,如性别、年龄、是否高血压、糖尿病等。

5.6.6 连续性变量拆成分类变量

连续性变量需要拆成分类变量的场景有:

  1. 本身就是一个分类变量,如 I 期,II 期,III 期,IV 期等,只不过用了数字1,2,3,4来表示,这可以在前面筛选变量的界面直接把它设置为分类变量(factor)即可。

前面如果忘记了,或者不方便,这里提供了一个功能,可以设置唯一取值数小于多少个水平的变量,全部转换成分类变量。例如只有5个取值 (比如只有数字1-5可取)以下的变量,全部批量转换成分类变量;

如上图,对于只能取值6以下的变量,统统变成分类变量。

  1. 本身是连续性变量,例如年龄、血糖等等,但需要转换成 低、高的二分类变量,或低、中、高的三分类变量,或Q1,Q2,Q3,Q4的四分位数分类变量,这里也提供了一个自动化转换工具,可以根据患者数量,平均拆分成N个组。

如上图,将blood和occurrence两个连续性变量,切成三等分的分类变量

显示了切割分界点的界值。

多大支持切割成20组,因为更多分组没有太大医学价值。

如果需要更强大的分组功能呢,例如自定义切割点,如<10岁,>65岁等,或者用K-means 聚类分组等,可以去本软件的 准备数据 模块,选择”数据离散化” 模块进行复杂的分组操作。

5.6.7 下载word文件

最后进入”下载word文件”

生成文字版的报告。

5.7 有明确的感兴趣的研究因素,调整不同个数混杂因素,进行多模型比较的套路分析(一般线性/Logistic/Cox/Poisson回归)

5.7.1 一键生成多模型(调整不同的协变量)比较的论文发表级(Publication - ready) 表格:

5.7.2 一键完成多模型评价指标(拟合优度、多重共线性分析)比较:

5.7.3 引言

在医学统计分析中,我们经常要评估各种因素如何影响某个特定的健康结局。这些因素可以是生活习惯(如抽烟、饮酒)、遗传倾向、疾病状态(如心脏病)、环境暴露或者医疗干预(如药物治疗)。为了理解这些影响因素(或自变量)与健康结局(或因变量)之间的关系,研究者会运用多种统计回归模型来分析数据。

回归分析是一种强大的统计工具,它可以揭示一个或多个自变量对一个因变量的影响。根据因变量的类型和研究的需求,可以选择不同类型的回归分析:

  • 逻辑回归(Logistic regression)适用于二分类结果变量,如疾病有无。

  • 线性回归(Linear regression)适合连续结果变量,如血压或胆固醇水平。

  • Cox回归(Cox proportional hazards regression)用于分析生存时间数据,即时间到一个事件(如死亡或复发)的发生。

  • Poisson 回归 适用于计数数据或事件发生率的分析。

研究者会拟合多个模型来比较的原因是,这可以帮助他们理解在控制了其他变量(如性别、年龄等)后,主要自变量(如抽烟)的独立效应是否仍然显著。这也有助于识别和校正混杂因子的影响,这些混杂因子可能扭曲了主要自变量和结果变量之间的真实关系。

例如,在研究抽烟是否增加心脏病风险的研究中,一个简单的模型可能只考虑抽烟的影响。而更复杂的模型可能会加入年龄、性别、饮食和运动等协变量。通过比较这些模型,研究者可以更好地了解在不同情境下抽烟和心脏病风险之间的关系。

为了判断模型的效度,研究者会查看比值比(Odds Ratio)、风险比(Hazard Ratio)或回归系数,以及它们的统计显著性(p-value)和置信区间(Confidence Interval, CI)。如果在多个模型中,这些统计量保持稳定,这增加了研究结果的可靠性。

综上所述,通过拟合和比较多个模型,研究者可以更全面地评估影响因素对健康结局的影响,这为制定预防策略和治疗干预提供了科学依据。

5.7.4 准备数据

首先务必按照下面的格式准备数据(网站上可下载,下载后在此基础上修改):

下载csv样例数据(右击另存为)

打开如下图:

本样例数据的规则:

1.  一个患者一行(这是准备数据最重要的前提)。
  1. 每个患者准备两大类数据,影响因素变量和结局变量,影响因素和结局分别都可以有多个变量。

如图所示,hospital, treatment, age, age2, sex, obstruct, prfor, adhear, differ, extent 为影响因素(自变量),而blood, effect, status, time, occurrence在本例中是结局变量。

  1. 影响因素变量有两种,连续性变量(值是连续数据,它可以在变量值所属区间内任意进行取值,如年龄(岁)、血糖值、人的身高、智商等)以及分类变量(是说明事物类别的一个名称,其取值是分类数据。如”性别”就是一个分类变量,其变量值为”男”或”女”;“行业”也是一个分类变量,其变量值可以为”零售业”、“旅游业”、“汽车制造 业”等),在本例中 age是连续性变量(numeric), 其他的是分类变量(factor)。age单位为”岁”时为连续变量,而age2为年龄段分组,这时候为分类变量。

以上概念很重要,后面有一个页面专门设置连续变量和分类变量。

  1. 结局变量在本工具中分为几类:
  • 连续型结局变量

如本例中的blood(某血液检测指标)

  • 二分类结局变量

如本例中的effect(疗效)为二分类变量(Good,Bad)

  • 生存型结局变量

需要用两个变量组合来表示,如本例中的status和time。

status代表患者在研究结束时的状态,在本工具中只能取0和1两个数字,不要用字符文本,否则会出错。0 代表没观察到事件发生(如没死或者失访),1 代表观察到了事件发生(如已经死亡且录入了死亡日期)。

time代表从开始日期(开始日期的定义由你的研究目的决定,如随机对照研究往往取随机化入组的那一天为开始日期,而观察性研究可以取首次诊断日期或首次治疗日期等等根据研究目的而定)到结局日期的时间差。当status=1时,结局日期为发生事件(如死亡)的日期,当status=0时,结局日期为最后一次活着的日期(如研究结束日,或随后一次随访日)。

总之,time是一个数值型变量,您需要填入患者从开始到死亡或者随后一次随访时,一共活着的天数。如time为56,status为1时代表患者从开始到死亡活了56天;当time为56,status为0时代表患者没观察到死亡,从开始到最后一次随访,活了56天。

准备数据时,time填入一个非负的整数,status填入0或1,time和status都不能为空,每个患者都必须填入数字。time或status不确定(缺失)时,该患者最好不要放入本数据库。

  • 计数型结局变量

计数型的结局变量为一个非负的整数,如本例中occurrence,是急性发作次数,无法取负数,也不可能取小数。

  • 分数型结局变量

当结局变量为一个分数,如发病率、患病率、受精率等,结局包含一个分子和一个分母。如要研究全国各地疾病患病率的影响因素时,按照每个地区一行来准备数据,分子和分母设置成两个变量(列),如分子为患病人数,分母为地区人口数。

准备数据的规则是:分子和分母都是非负整数,不允许填入负数,也不允许填入小数,分子的数值不能大于分母。

5.7.5 进入模块

接下来我们进入模块,点击软件顶部菜单的“因果推断”,然后点击“有明确的感兴趣的研究因素,调整不同个数混杂因素,进行多模型比较的套路分析(一般线性/Logistic/Cox/Poisson回归)” 进入模块

5.7.6 操作步骤

5.7.6.1 数据准备

  • 在开始之前,请确保您已经在软件的“数据准备”页面上传了您的数据集,并在“定义字段”选项卡检查并应用了更改。

5.7.6.2 等待数据转换

  • 打开页面后,请耐心等待半分钟让系统处理并加载您的数据。如果您的数据库较大,这个过程可能需要更长时间。系统会自动把水平数低于6的数值型变量转换为分类变量,当然您也可以手动改回来不做转换

5.7.6.3 选择模型类型

  • 接下来,您需要根据结局变量的类型选择合适的模型。可选的模型包括二分类变量(Logistic回归)、连续性变量(线性回归)、生存变量(Cox回归)、计数变量(Poisson回归)等。

5.7.6.4 选择结局变量

  • 根据您选择的模型类型,系统会要求您从数据库中选择相应的结局变量。例如,如果您选择了Logistic回归,就需要选择一个二分类的结局变量。

5.7.6.5 定义模型协变量

  • 确定您想要在模型中调整哪些协变量。协变量可以帮助控制混杂因素,提高模型的准确性。

  • 如果选择了连续性变量,还可以选择仅按照连续性变量进行回归分析,还是进行标准化,或者转换成分类变量(例如 Q1/Q2/Q3/Q4 四分位数等)同时进行多种分析

5.7.6.6 模型比较

  • 您可以建立并比较多个模型。选择要比较的模型数量,并为每个模型选择要调整的协变量。请确保不同模型之间的协变量选择不完全相同。

5.7.6.7 分类变量参照组设定

  • 对于非数值型的分类变量,您需要为每个变量选择一个参照组。

5.7.6.8 结果呈现

  • 确定您如何呈现结果数据,包括是否显示N和Event值,以及效应量和P值的小数位数。

5.7.6.9 生成结果

  • 完成上述设置后,点击相应的按钮生成影响因素分析表。

在整个过程中,如果您在某个步骤遇到了问题,系统可能会提供警告或错误信息。请按照提示进行相应的修改。如果一切顺利,您将能够生成反映不同影响因素对结果影响的统计模型比较表格。

5.8 回归分析的亚组(分层)分析

应变量为是否恶化,自变量为 A 组 B 组:

![](images/clipboard-283233380.png){width="700px"}

应变量为是否恶化,自变量为 连续性变量(年龄):

![](images/clipboard-2946350569.png){width="700px"}

应变量为是否缓解,自变量为治疗分组(三个组):

![](images/clipboard-4160252241.png){width="700px"}

5.8.1 亚组(分层)分析的定义和概念

亚组分析是指在总体研究样本中,根据某些特征将样本划分为若干亚组,并在每个亚组内进行独立的分析。其目的是探讨不同亚组在某些特定特征下的差异,揭示出整体分析中可能被忽视的细节。亚组分析通常应用于回归分析之后,以进一步细化研究结果,使其更具针对性和实用性。

5.8.2 为什么回归分析之后要做亚组分析?

虽然回归分析可以揭示总体样本的趋势和关系,但不同特征(如年龄、性别、疾病分期等)可能对结果有不同的影响。通过亚组分析,我们可以:

  1. 识别异质性:揭示不同亚组之间的差异,识别是否存在某些亚组对治疗或干预有不同的反应。

  2. 提高结果的外推性:通过细分亚组,研究结果更能代表不同特征人群,提高其外推性。

  3. 制定个性化治疗策略:在医学研究中,不同亚组的患者可能需要不同的治疗方法,亚组分析可以帮助制定更为精准的治疗策略。

5.8.3 医学研究的例子

5.8.3.1 自变量为二分类变量的例子

例如,在一项研究中,探讨两种药物(药物A和药物B)对某种疾病的治疗效果。研究者首先进行总体样本的回归分析,得出药物A和药物B在总体人群中的效果。然而,考虑到疾病的分期和等级可能影响药物效果,研究者进一步进行亚组分析,将样本根据疾病的分期(如T1、T2、T3、T4)和等级(如I、II、III)分为不同亚组,分别分析各亚组内两种药物的效果。

通过亚组分析,研究者发现:

  • 在疾病分期为T1的亚组中,药物A的效果优于药物B。

  • 在等级为I的亚组中,药物B的效果显著优于药物A。 这种细化的分析结果可以帮助医生根据患者的具体情况选择更合适的药物。

5.8.3.2 自变量为连续变量的例子

例如,在一项研究中,探讨患者的血糖水平(一个连续变量)对心脏病风险的影响。研究者首先进行总体样本的回归分析,得出血糖水平与心脏病风险之间的关系。然而,考虑到不同性别和年龄段可能影响血糖水平与心脏病风险之间的关系,研究者进一步进行亚组分析。

研究者将样本按性别(男性和女性)和年龄段(如年轻组、中年组和老年组)分为不同亚组,然后分别分析在不同亚组中,血糖水平对心脏病风险的影响。

通过这种分析,研究者可能会发现:

  • 在男性老年组中,血糖水平较高与心脏病风险显著增加相关。

  • 在女性年轻组中,血糖水平与心脏病风险之间没有显著相关性。

这种分析有助于了解在不同性别和年龄段中,血糖水平对心脏病风险的具体影响,从而帮助制定更加个性化的预防和治疗策略。

5.8.3.3 自变量为多分类变量的例子

例如,在一项研究中,探讨不同类型的饮食干预(素食饮食、地中海饮食和高蛋白饮食)对糖尿病患者血糖控制的影响。研究者首先进行总体样本的回归分析,得出三种饮食干预在总体人群中的整体效果。然而,考虑到患者的体质指数(BMI)和生活方式可能影响饮食干预的效果,研究者进一步进行亚组分析,将样本根据BMI水平(如正常体重、超重和肥胖)和生活方式(如久坐型、适度活跃型和高活跃型)分为不同亚组,分别分析各亚组内三种饮食干预的效果。

通过亚组分析,研究者发现:

  • 在BMI为肥胖的亚组中,地中海饮食的效果优于其他两种饮食。

  • 在生活方式为久坐型的亚组中,高蛋白饮食的效果显著优于素食饮食和地中海饮食。这种细化的分析结果可以帮助营养师和医生根据患者的体质和生活习惯选择更合适的饮食方案,从而提升血糖管理的针对性和有效性。

5.8.4 P 值和 P for interaction 的意义

在亚组分析中,P 值和 P for interaction 是两个重要的统计指标:

  1. P 值:在每个亚组内,P值用于检验在该亚组中自变量(如血糖水平)与结果变量(如心脏病风险)之间的关系是否显著。P值越小,说明关系越显著。通常,P值小于0.05被认为有统计学显著性。

  2. P for interaction:P for interaction用于检验不同亚组之间的效果是否有显著差异。它衡量的是自变量(如血糖水平)与亚组变量之间的交互作用。如果P for interaction值小于0.05,说明不同亚组间的效果差异具有统计学显著性,这意味着血糖水平对心脏病风险的影响在不同亚组中有显著差异。

总之,亚组分析通过细化研究对象,揭示了不同特征人群的差异,帮助制定更为精准的治疗策略。P值和P for interaction则为这种差异提供了统计学依据,使研究结果更为可靠和科学。

5.8.5 关于多重比较的补充与如何调整

在事后(post-hoc)进行亚组分析、且一次性做了多种亚组或多次检验时,第一类错误(把原本不存在的差异误判为显著)的总体概率会被放大。此时,单纯以“P < 0.05”为阈值不再稳妥,应进行多重比较调整。需要考虑校正的情形包括:

  • 同一结局下同时考察多个亚组(年龄、性别、合并症、分期……);

  • 对同一亚组变量做了多个切点/多种分组方式(如三分位、四分位、不同阈值);

  • 同时做了多个交互作用检验(多个潜在效应修饰因子);

  • 多个结局/多个时间点的并行比较。

5.8.5.1 目标与对象

  • 组内效应的 P 值(每个亚组内的“主效应”检验)。

  • P for interaction(当你对多个“潜在效应修饰因子”分别做交互检验时,同样存在多重性)。

5.8.5.2 常用调整策略

  1. Bonferroni:将显著性水平按检验次数 m 均分(α* = α / m),或报告 p* = p × m。简单但偏保守。

Holm(顺序 Bonferroni):按 P 值从小到大排序,逐步比较阈值 α/(m−i+1)。通常优于简单 onferroni。

Hochberg:类似顺序法(对部分情形更有力),但使用条件略严苛。

  1. FDR 控制(错误发现率):适合探索性亚组筛查、亚组数量较多的情形。

  2. Benjamini–Hochberg(BH):输出 q 值(FDR-adjusted P)。常用阈值 q < 0.05 或 0.10。

相比 FWER,FDR 更容易发现真正阳性,但允许一定比例的“发现”为假阳性。

5.8.5.3 报告与解释建议

同时给出未校正 P与已校正 P(或 q 值),并明确采用的方法(Holm / BH 等)。

若做的是探索性亚组分析,应在文稿中清晰标注“探索性/事后”,把结论定位为提示性而非确证性。

不以单一阈值“二分法”解读;强调效应量与置信区间,辅以一致性、生物学合理性与外部证据。

若采用区间法,也可用多重比较调整后的置信区间(例如 Bonferroni 使每个区间的置信度提高到 1−α/m)。

5.8.5.4 一个快速算例

你对10 个潜在亚组分别做了“P for interaction”→ m = 10。

Bonferroni:名义 α = 0.05 → 阈值变为 0.005;

Holm:对排好序的第 i 个 P 值,用阈值 0.05/(10−i+1) 逐一比较;

BH-FDR:给出 q 值(如 q < 0.10)更利于探索阶段发现信号。

5.8.6 准备数据

首先务必按照下面的格式准备数据(网站上可下载,下载后在此基础上修改):

下载csv样例数据(右击另存为)

打开如下图:

本样例数据的规则:

1.  一个患者一行(这是准备数据最重要的前提)。
  1. 每个患者准备两大类数据,影响因素变量和结局变量,影响因素和结局分别都可以有多个变量。

如图所示,hospital, treatment, age, age2, sex, obstruct, prfor, adhear, differ, extent 为影响因素(自变量),而blood, effect, status, time, occurrence在本例中是结局变量。

  1. 影响因素变量有两种,连续性变量(值是连续数据,它可以在变量值所属区间内任意进行取值,如年龄(岁)、血糖值、人的身高、智商等)以及分类变量(是说明事物类别的一个名称,其取值是分类数据。如”性别”就是一个分类变量,其变量值为”男”或”女”;“行业”也是一个分类变量,其变量值可以为”零售业”、“旅游业”、“汽车制造 业”等),在本例中 age是连续性变量(numeric), 其他的是分类变量(factor)。age单位为”岁”时为连续变量,而age2为年龄段分组,这时候为分类变量。

以上概念很重要,后面有一个页面专门设置连续变量和分类变量。

  1. 结局变量在本工具中分为几类:
  • 连续型结局变量

如本例中的blood(某血液检测指标)

  • 二分类结局变量

如本例中的effect(疗效)为二分类变量(Good,Bad)

  • 生存型结局变量

需要用两个变量组合来表示,如本例中的status和time。

status代表患者在研究结束时的状态,在本工具中只能取0和1两个数字,不要用字符文本,否则会出错。0 代表没观察到事件发生(如没死或者失访),1 代表观察到了事件发生(如已经死亡且录入了死亡日期)。

time代表从开始日期(开始日期的定义由你的研究目的决定,如随机对照研究往往取随机化入组的那一天为开始日期,而观察性研究可以取首次诊断日期或首次治疗日期等等根据研究目的而定)到结局日期的时间差。当status=1时,结局日期为发生事件(如死亡)的日期,当status=0时,结局日期为最后一次活着的日期(如研究结束日,或随后一次随访日)。

总之,time是一个数值型变量,您需要填入患者从开始到死亡或者随后一次随访时,一共活着的天数。如time为56,status为1时代表患者从开始到死亡活了56天;当time为56,status为0时代表患者没观察到死亡,从开始到最后一次随访,活了56天。

准备数据时,time填入一个非负的整数,status填入0或1,time和status都不能为空,每个患者都必须填入数字。time或status不确定(缺失)时,该患者最好不要放入本数据库。

  • 计数型结局变量

计数型的结局变量为一个非负的整数,如本例中occurrence,是急性发作次数,无法取负数,也不可能取小数。

  • 分数型结局变量

当结局变量为一个分数,如发病率、患病率、受精率等,结局包含一个分子和一个分母。如要研究全国各地疾病患病率的影响因素时,按照每个地区一行来准备数据,分子和分母设置成两个变量(列),如分子为患病人数,分母为地区人口数。

准备数据的规则是:分子和分母都是非负整数,不允许填入负数,也不允许填入小数,分子的数值不能大于分母。

5.8.7 进入模块

接下来我们进入模块,点击软件顶部菜单的“因果推断”,然后点击“回归分析的亚组(分层)分析(支持连续性或二分类的自变量)(一般线性/Logistic/Cox/Poisson回归)” 进入模块:

5.8.8 选择结局变量的类型

  1. 进入软件后,选择“回归分析”模块。

  2. 在“选择结局变量的类型”部分,根据您的研究需求,选择适合的回归模型:

  • 二分类变量(Logistic回归),例如是否转移、是否客观缓解等,统计OR值。

  • 二分类变量(Log-Binomial回归),例如是否转移、是否缓解等,统计RR值。

  • 连续性变量(线性回归),例如生物标志物值等。

  • 生存变量(Cox回归),例如总生存期(OS)、无进展生存期(PFS)、无病生存期(DFS)等。

  • 计数变量(Poisson回归),例如发作次数、卵裂数等。

  • 计数变量(Quasi-Poisson回归),例如过分散的计数数据等。

5.8.9 选择结局变量/应变量

根据您在第一步选择的结局变量类型,进行相应的操作:

Logistic回归:

  • 系统会自动筛选数据库中所有的二分类变量。

  • 在“请选择结局变量/应变量”下拉菜单中,选择您的结局变量。

  • 在“请选择结局变量的哪个水平表示发生事件”下拉菜单中,选择表示发生事件的水平(如“Bad”),系统会将该水平设定为1,其余水平设定为0。

Log-Binomial回归:

  • 系统会自动筛选数据库中所有的二分类变量。

  • 在“请选择结局变量/应变量”下拉菜单中,选择您的结局变量。

  • 在“请选择结局变量的哪个水平表示发生事件”下拉菜单中,选择表示发生事件的水平(如“Bad”),系统会将该水平设定为1,其余水平设定为0。

线性回归:

  • 系统会自动筛选数据库中所有的连续性变量。

  • 在“请选择结局变量/应变量”下拉菜单中,选择您的结局变量。

Cox回归:

  • 系统会自动筛选数据库中所有的连续性变量。

  • 在“请选择代表时间的变量”下拉菜单中,选择表示时间的变量(如从开始到死亡的时间,或从开始到末次随访时间)。

  • 系统会自动筛选数据库中所有的二分类变量。

  • 在“请选择代表患者最终状态的变量”下拉菜单中,选择表示患者最终状态的变量(如1代表发生事件,0代表删失)。

Poisson回归:

  • 系统会自动筛选数据库中所有的计数变量(如整数型变量)。

  • 在“请选择结局变量/应变量”下拉菜单中,选择您的结局变量。

Quasi-Poisson回归:

  • 系统会自动筛选数据库中所有的计数变量(如整数型变量),特别适用于过分散数据。

  • 在“请选择结局变量/应变量”下拉菜单中,选择您的结局变量。

5.8.10 选择结局变量的水平

  • Logistic回归和Cox回归
  1. 系统会自动检测结局变量的所有水平。

  2. 在“请下拉选择结局变量的哪个水平表示发生事件”下拉菜单中,选择表示发生事件的水平(注意:选中的水平在建模时系统会设定为1,剩下的水平会设定为0)。

5.8.11 选择解释变量/自变量

  1. 在“要研究的解释变量/自变量的类型”部分,选择变量类型:
  • 二分类变量

  • 连续性变量

  • 多分类变量

  1. 系统会根据您的选择筛选相应的变量。

  2. 在“请点击选择要研究的解释变量/自变量”下拉菜单中,选择您的解释变量/自变量。

5.8.12 选择参照组和观察/试验组(仅针对二分类解释变量)

  1. 系统会自动检测解释变量的所有水平。

  2. 在“请下拉选择参照组”下拉菜单中,选择参照组。

  3. 在“请下拉选择观察/试验组”下拉菜单中,选择观察/试验组。

5.8.13 选择混杂因素(协变量)

  1. 系统会自动筛选数据库中所有的变量。

  2. 在“请点击选择需要调整的混杂因素(协变量)”下拉菜单中,选择需要调整的混杂因素(协变量),可多选。

5.8.14 对连续变量进行尺度转换或标准化处理

  1. 系统会列出所有连续性变量。

  2. 根据需要,对每个连续性变量选择相应的处理方法:

  • 不做处理

  • 中心化处理(centered)

  • 标准化处理(standardized)

  • 进行Log变换

5.8.15 选择亚组分析字段

  1. 系统会自动筛选数据库中所有的分类变量。

  2. 在“请点击空白框选择代表亚组的字段”下拉菜单中,选择代表亚组的字段,可多选。

5.8.16 生成/更新亚组分析结果

  1. 点击“生成/更新亚组分析结果”按钮,系统会根据您的选择进行亚组分析,并展示结果。

亚组分析结果:

生成森林图:

![](images/clipboard-37777965.png){width="700px"}

5.9 将一个连续性变量的不同取值设为分割点进行分层,进行敏感性亚组(分层)分析

设定不同的分割点,用一个连续性变量的值(例如年龄),将数据分成几个亚组,做回归分析的亚组(分层)分析:

5.9.1 亚组(分层)分析的定义和概念

亚组分析是指在总体研究样本中,根据某些特征将样本划分为若干亚组,并在每个亚组内进行独立的分析。其目的是探讨不同亚组在某些特定特征下的差异,揭示出整体分析中可能被忽视的细节。亚组分析通常应用于回归分析之后,以进一步细化研究结果,使其更具针对性和实用性。

5.9.2 为什么回归分析之后要做亚组分析?

虽然回归分析可以揭示总体样本的趋势和关系,但不同特征(如年龄、性别、疾病分期等)可能对结果有不同的影响。通过亚组分析,我们可以:

  1. 识别异质性:揭示不同亚组之间的差异,识别是否存在某些亚组对治疗或干预有不同的反应。

  2. 提高结果的外推性:通过细分亚组,研究结果更能代表不同特征人群,提高其外推性。

  3. 制定个性化治疗策略:在医学研究中,不同亚组的患者可能需要不同的治疗方法,亚组分析可以帮助制定更为精准的治疗策略。

5.9.3 当分组变量不是一个现成的分类变量,而是一个连续性变量,怎么做亚组(分层)分析?

例如,在一项研究中,探讨两种药物(药物A和药物B)对某种疾病的治疗效果。研究者首先进行总体样本的回归分析,得出药物A和药物B在总体人群中的效果。然而,考虑到疾病的分期和等级可能影响药物效果,研究者进一步进行亚组分析,如果已经有现成的分类变量,例如疾病的分期(如T1、T2、T3、T4)和等级(如I、II、III),则可以直接用这样的亚组,分别分析各亚组内两种药物的效果。

当分组变量是一个连续性变量,例如年龄(岁),而不是年龄组,则需要人为将年龄离散化为年龄分组,才能进行亚组分析,而取什么年龄做为分割点(例如分为<18岁,≥18岁,还是<30, 30-60, ≥60岁),可能导致的亚组分析结果不同。取什么分割点主要和研究设计、指标选择等相关,一般可以采用学科共识、前人经验,临床约定,或者统计学里的曲线观察(例如交互作用RCS曲线、广义添加模型)等方式确定。而本模块则给用户提供了一个不同切割点进行亚组分析的测试平台,可以快速地得到不同切割点设置后的亚组分析结果。可以用于自己非正式测试,或者用于敏感性分析。

5.9.4 准备数据

首先务必按照下面的格式准备数据(网站上可下载,下载后在此基础上修改):

下载csv样例数据(右击另存为)

打开如下图:

本样例数据的规则:

1.  一个患者一行(这是准备数据最重要的前提)。
  1. 每个患者准备两大类数据,影响因素变量和结局变量,影响因素和结局分别都可以有多个变量。

如图所示,hospital, treatment, age, age2, sex, obstruct, prfor, adhear, differ, extent 为影响因素(自变量),而blood, effect, status, time, occurrence在本例中是结局变量。

  1. 影响因素变量有两种,连续性变量(值是连续数据,它可以在变量值所属区间内任意进行取值,如年龄(岁)、血糖值、人的身高、智商等)以及分类变量(是说明事物类别的一个名称,其取值是分类数据。如”性别”就是一个分类变量,其变量值为”男”或”女”;“行业”也是一个分类变量,其变量值可以为”零售业”、“旅游业”、“汽车制造 业”等),在本例中 age是连续性变量(numeric), 其他的是分类变量(factor)。age单位为”岁”时为连续变量,而age2为年龄段分组,这时候为分类变量。

以上概念很重要,后面有一个页面专门设置连续变量和分类变量。

  1. 结局变量在本工具中分为几类:
  • 连续型结局变量

如本例中的blood(某血液检测指标)

  • 二分类结局变量

如本例中的effect(疗效)为二分类变量(Good,Bad)

  • 生存型结局变量

需要用两个变量组合来表示,如本例中的status和time。

status代表患者在研究结束时的状态,在本工具中只能取0和1两个数字,不要用字符文本,否则会出错。0 代表没观察到事件发生(如没死或者失访),1 代表观察到了事件发生(如已经死亡且录入了死亡日期)。

time代表从开始日期(开始日期的定义由你的研究目的决定,如随机对照研究往往取随机化入组的那一天为开始日期,而观察性研究可以取首次诊断日期或首次治疗日期等等根据研究目的而定)到结局日期的时间差。当status=1时,结局日期为发生事件(如死亡)的日期,当status=0时,结局日期为最后一次活着的日期(如研究结束日,或随后一次随访日)。

总之,time是一个数值型变量,您需要填入患者从开始到死亡或者随后一次随访时,一共活着的天数。如time为56,status为1时代表患者从开始到死亡活了56天;当time为56,status为0时代表患者没观察到死亡,从开始到最后一次随访,活了56天。

准备数据时,time填入一个非负的整数,status填入0或1,time和status都不能为空,每个患者都必须填入数字。time或status不确定(缺失)时,该患者最好不要放入本数据库。

  • 计数型结局变量

计数型的结局变量为一个非负的整数,如本例中occurrence,是急性发作次数,无法取负数,也不可能取小数。

  • 分数型结局变量

当结局变量为一个分数,如发病率、患病率、受精率等,结局包含一个分子和一个分母。如要研究全国各地疾病患病率的影响因素时,按照每个地区一行来准备数据,分子和分母设置成两个变量(列),如分子为患病人数,分母为地区人口数。

准备数据的规则是:分子和分母都是非负整数,不允许填入负数,也不允许填入小数,分子的数值不能大于分母。

5.9.5 进入模块

接下来我们进入模块,点击软件顶部菜单的“因果推断”,然后点击“将一个连续性变量的不同取值设为分割点进行分层,进行敏感性亚组(分层)分析” 进入模块:

5.9.6 选择结局变量的类型

  1. 进入软件后,选择“回归分析”模块。

  2. 在“选择结局变量的类型”部分,根据您的研究需求,选择适合的回归模型:

  • 二分类变量(Logistic回归,例如是否转移,是否客观缓解等)

  • 连续性变量(线性回归,例如生物标志物值等)

  • 生存变量(Cox回归,例如总生存期(OS),无进展生存期(PFS),无病生存期(DFS)等)

5.9.7 选择结局变量/应变量

根据您在第一步选择的结局变量类型,进行相应的操作:

  • Logistic回归
  1. 系统会自动筛选数据库中所有的二分类变量。

  2. 在“请选择结局变量/应变量”下拉菜单中,选择您的结局变量。

  • 线性回归
  1. 系统会自动筛选数据库中所有的连续性变量。

  2. 在“请选择结局变量/应变量”下拉菜单中,选择您的结局变量。

  • Cox回归
  1. 系统会自动筛选数据库中所有的连续性变量。

  2. 在“请选择代表时间的变量”下拉菜单中,选择表示时间的变量(如从开始到死亡的时间,或从开始到末次随访时间)。

  3. 系统会自动筛选数据库中所有的二分类变量。

  4. 在“请选择代表患者最终状态的变量”下拉菜单中,选择表示患者最终状态的变量(如1代表发生事件,0代表删失)。

5.9.8 选择结局变量的水平

  • Logistic回归和Cox回归
  1. 系统会自动检测结局变量的所有水平。

  2. 在“请下拉选择结局变量的哪个水平表示发生事件”下拉菜单中,选择表示发生事件的水平(注意:选中的水平在建模时系统会设定为1,剩下的水平会设定为0)。

5.9.9 选择解释变量/自变量

  1. 在“要研究的解释变量/自变量的类型”部分,选择变量类型:
  • 二分类变量

  • 连续性变量

  1. 系统会根据您的选择筛选相应的变量。

  2. 在“请点击选择要研究的解释变量/自变量”下拉菜单中,选择您的解释变量/自变量。

5.9.10 选择参照组和观察/试验组(仅针对二分类解释变量)

  1. 系统会自动检测解释变量的所有水平。

  2. 在“请下拉选择参照组”下拉菜单中,选择参照组。

  3. 在“请下拉选择观察/试验组”下拉菜单中,选择观察/试验组。

5.9.11 选择混杂因素(协变量)

  1. 系统会自动筛选数据库中所有的变量。

  2. 在“请点击选择需要调整的混杂因素(协变量)”下拉菜单中,选择需要调整的混杂因素(协变量),可多选。

5.9.12 对连续变量进行尺度转换或标准化处理

  1. 系统会列出所有连续性变量。

  2. 根据需要,对每个连续性变量选择相应的处理方法:

  • 不做处理

  • 中心化处理(centered)

  • 标准化处理(standardized)

  • 进行Log变换

5.9.13 选择亚组分析字段

  1. 选择一个连续性变量,例如年龄;

  2. 选择要根据年龄,将整个数据集分为几个亚组,例如选 3;

  3. 输入分割点,例如 40,60,系统会自动把数据库根据年龄分为 3 个组。

5.9.14 生成/更新亚组分析结果

  1. 点击“生成/更新亚组分析结果”按钮,系统会根据您的选择进行亚组分析,并展示结果。

亚组分析结果:

\

生成森林图:

![](images/clipboard-1703756201.png){width="700px"}

5.10 自动筛选从单因素分析进入多因素分析的变量(逐步回归/最优子集/Lasso/岭回归/弹性网络/随机森林/Boruta法)

本指南介绍 自动变量筛选 模块的原理与使用方法,帮助你在进入正式的多因素建模前,从候选自变量中高效筛选出一组稳定、可解释、可复现的变量组合。

主要特点:

-   根据上传的科研数据,简单点击设置后,全自动完成从单因素到多因素的变量筛选
  • 支持一般线性回归、Logistic回归、Cox回归、Poisson回归

  • 支持穷举最优子集、逐步 AIC 回归、Lasso、岭回归、弹性网络、随机森林、Boruta 等方法

  • 自动作图,自动给出图表,生成单因素和多因素分析可供投稿的最终图表结果。

AIC 逐步回归

![](images/clipboard-1670510814.png){width="700px"}

Lasso、Ridge、Elastic Net

![](images/clipboard-1810149132.png){width="700px"}

随机森林 SHAP

![](images/clipboard-294631637.png){width="700px"}

Boruta

![](images/clipboard-3693892713.png){width="700px"}

5.10.1 背景与定义

5.10.1.1 什么是变量筛选(Feature/Variable Selection)

变量筛选指在既定的结局(应变量)与候选自变量集合中,通过统计学或机器学习方法,选出对模型预测或解释最有价值的一组变量,以提高模型稳定性、泛化能力,并降低多重共线性与过拟合风险。

常见动机:

  • 解释/因果:在控制混杂的前提下,得到更稳健的效应估计(OR/HR/Beta 等)。
  • 预测/建模:提升泛化性能,减少冗余特征,提高计算效率。
  • 展示/发表:在结果表中保留更有意义、更易解释的一组变量。

5.10.1.2 方法速览与取舍

  • 逐步回归(AIC 导向,MASS::stepAIC:以 AIC 最小为准选择模型,便于叙述与复现;
  • 提醒:不推荐以 P 值阈值(如 P<0.1)作为筛选规则——这是过时做法,为之前的主流,大量见于旧的统计教材和前些年的论文,但已经得不到目前世界主流统计学家的认可,易导致偏误;本模块不采用 p 值来筛选变量,采用 AIC/BIC 等信息准则。
  • 最优子集(Best Subsets):穷举或近似穷举寻找若干优选模型,计算量大;本模块目前暂停此功能以保护服务器资源。
  • 正则化(Lasso / Ridge / Elastic Net)
  • Lasso(α=1):可将部分系数压缩为 0 → 自动筛选变量
  • Ridge(α=0):系数不会为 0,不自动筛选,但可缓解共线性
  • Elastic Net(α在0到1之间):可取0.5,表示 L1+L2 折中,适合存在组相关性的特征。
  • 随机森林变量重要性(VIP)
  • 分类(如 Logistic):常见重要性指标 MeanDecreaseAccuracy/MeanDecreaseGini
  • 回归(如 线性/Poisson):常见重要性指标 %IncMSE/IncNodePurity
  • 生存(Cox,randomForestSRC):使用 VIMP 指标。
  • Boruta(VIP):相对“伪造特征(shadow)”的稳健重要性检验,能识别非线性/交互贡献;高维时建议先 Lasso 再 Boruta,以提升效率。

实践建议:若候选变量 >50–100(甚至上百),建议跳过单因素与逐步回归,先用 Boruta 初筛,再结合 Lasso/专业知识做二次筛选。

5.10.1.3 数据质量与常见风险

  • 事件编码错误:Logistic/Cox 中务必正确指定“哪个水平是事件=1”。
  • 完全/准完全分离:出现 OR/HR/RR=0、Inf 或极端大(>1000),多为分离、编码或小样本引起;应合并稀有水平、检查数据、或放弃该变量。
  • 多重共线性:VIF≥10 表示严重共线性;可用 Lasso/Elastic Net 缓解;Ridge 仅缩小系数,不做筛选。
  • 缺失处理:本模块多处会整行剔除缺失;建议在“数据准备”中先做缺失填补/删除高缺失变量

5.10.2 准备数据

首先务必按照下面的格式准备数据(网站上可下载,下载后在此基础上修改):

下载csv样例数据(右击另存为)

打开如下图:

本样例数据的规则:

1.  一个患者一行(这是准备数据最重要的前提)。
  1. 每个患者准备两大类数据,影响因素变量和结局变量,影响因素和结局分别都可以有多个变量。

如图所示,hospital, treatment, age, age2, sex, obstruct, prfor, adhear, differ, extent 为影响因素(自变量),而blood, effect, status, time, occurrence在本例中是结局变量。

  1. 影响因素变量有两种,连续性变量(值是连续数据,它可以在变量值所属区间内任意进行取值,如年龄(岁)、血糖值、人的身高、智商等)以及分类变量(是说明事物类别的一个名称,其取值是分类数据。如”性别”就是一个分类变量,其变量值为”男”或”女”;“行业”也是一个分类变量,其变量值可以为”零售业”、“旅游业”、“汽车制造 业”等),在本例中 age是连续性变量(numeric), 其他的是分类变量(factor)。age单位为”岁”时为连续变量,而age2为年龄段分组,这时候为分类变量。

以上概念很重要,后面有一个页面专门设置连续变量和分类变量。

  1. 结局变量在本工具中分为几类:
  • 连续型结局变量

如本例中的blood(某血液检测指标)

  • 二分类结局变量

如本例中的effect(疗效)为二分类变量(Good,Bad)

  • 生存型结局变量

需要用两个变量组合来表示,如本例中的status和time。

status代表患者在研究结束时的状态,在本工具中只能取0和1两个数字,不要用字符文本,否则会出错。0 代表没观察到事件发生(如没死或者失访),1 代表观察到了事件发生(如已经死亡且录入了死亡日期)。

time代表从开始日期(开始日期的定义由你的研究目的决定,如随机对照研究往往取随机化入组的那一天为开始日期,而观察性研究可以取首次诊断日期或首次治疗日期等等根据研究目的而定)到结局日期的时间差。当status=1时,结局日期为发生事件(如死亡)的日期,当status=0时,结局日期为最后一次活着的日期(如研究结束日,或随后一次随访日)。

总之,time是一个数值型变量,您需要填入患者从开始到死亡或者随后一次随访时,一共活着的天数。如time为56,status为1时代表患者从开始到死亡活了56天;当time为56,status为0时代表患者没观察到死亡,从开始到最后一次随访,活了56天。

准备数据时,time填入一个非负的整数,status填入0或1,time和status都不能为空,每个患者都必须填入数字。time或status不确定(缺失)时,该患者最好不要放入本数据库。

  • 计数型结局变量

计数型的结局变量为一个非负的整数,如本例中occurrence,是急性发作次数,无法取负数,也不可能取小数。

  • 分数型结局变量

当结局变量为一个分数,如发病率、患病率、受精率等,结局包含一个分子和一个分母。如要研究全国各地疾病患病率的影响因素时,按照每个地区一行来准备数据,分子和分母设置成两个变量(列),如分子为患病人数,分母为地区人口数。

准备数据的规则是:分子和分母都是非负整数,不允许填入负数,也不允许填入小数,分子的数值不能大于分母。

5.10.3 进入模块

接下来我们进入模块,点击软件顶部菜单的“因果推断”,然后点击“自动筛选从单因素分析进入多因素分析的变量(逐步回归/最优子集/Lasso/岭回归/弹性网络/随机森林/Boruta法)” 进入模块:

5.10.4 设置结局类型与变量(必做)

左侧依次完成:

  1. 选择结局类型(family)
  • 二分类(Logistic)、连续(线性)、生存(Cox)、计数(Poisson)。
  1. 选择结局(Y)
  • Logistic:选择二分类变量,并在“事件水平”中慎选为 1;
  • 线性:选择数值且去重>2的连续变量;
  • Cox:选择 time(非负数值)status(仅两类),并指定 status 的事件水平=1
  • Poisson:选择非负整数的计数变量。
  1. 选择候选自变量(X,多选,至少 2 个):系统会排除高基数(>30 水平)的因子,以及已选的 Y/time/status。
  2. 设置 95%CI 计算方法(影响后续所有回归表):
  • Wald CI(与 SPSS/STATA 一致;confint.default());
  • Profile likelihood CI(R 更精确;confint();极端情况下与 Wald P 值略有不一致,可优先报道 CI)。
  1. 点击 “生成下一步所需的数据集”:生成并预览 “原始数据概览” 与 “剔除缺失值后数据”。

排错清单(强烈建议在此步完成):若 Logistic/Cox/Poisson 里出现 OR/HR/RR=0、Inf、或极端大值,请: 1) 检查是否将同一信息以不同形式同时作为 Y 与 X(如年龄与年龄分组); 2) 合并事件全无/全有或样本极少的类别水平; 3) 处理缺失(建议删除缺失>20%的变量或先做填补)。

5.10.5 单因素分析(可选)

点击 “开始/刷新单因素分析”,系统使用 gtsummary::tbl_uvregression 逐一评估每个 X 与 Y 的关系(仅单因素)。 - Logistic/Cox/Poisson 输出 OR/HR/RR 与 95%CI,并显示 N/事件数; - 适合做快速体检,识别分离问题与异常值,但请勿将其与多因素结果比较

5.10.6 多重共线性诊断(可选)

点击 “开始/刷新共线性分析”,返回 VIF/Tolerance 与诊断图(performance::check_collinearity)。 - 经验阈值:vif < 5(较低)5–10(一定共线性)≥10(严重); - 此步会整行剔除缺失,建议在“数据准备”先完成缺失填补。


5.10.7 多因素变量筛选(核心)

5.10.7.1 逐步回归(AIC,MASS::stepAIC)

思路:以 AIC 最小为目标,按 后向 / 前向 / 双向 路径搜索模型。

设置: - 方向后向(backward)(文献中使用最广)、前向(forward)双向(both); - 强制纳入变量:常用于公认混杂因子(如年龄、性别等); - 双向时的起始模型:可指定起始变量集(需包含强制变量)。

运行:点击 “开始变量筛选”

输出: - 逐步过程表(ANOVA 风格)与最终系数表; - 最终入选变量清单(请记下变量名,便于去到其他模块复用); - 使用入选变量回代原始回归模型gtsummary 表(可在前面“定义字段”调整因子参照组后重算)。

下载:支持 Word(.docx)导出。

注:逐步回归以 AIC 而非 P 值阈值作为准则,更符合当前共识;若样本量对缺失较敏感,可先在“数据准备”做缺失填补。


5.10.7.2 最优子集(Best Subsets)

状态:由于穷举带来巨大的计算量,本模块当前暂停此功能以保护服务器资源。


5.10.7.3 正则化(Lasso / Ridge / Elastic Net)

选择方法: - Lasso(α=1):自动筛选(系数可为 0),缓解共线性; - Elastic Net(α=0.5):兼顾 L1/L2,适合组相关特征; - Ridge(α=0):仅收缩,不筛选(系数不为 0)。

运行:在“选择正则回归的方法”中选择算法并开始;

结果解释: - 非零系数的变量即入选变量; - 模块会用入选变量回代至原始(非正则)回归并输出 gtsummary 表,便于期刊解释; - 需要可在“定义字段”中调整分类变量参照组后再重跑。

下载:支持 Word(.docx)导出。

小贴士:若变量很多或共线性明显,先用 Lasso 可以显著提速并稳定后续分析;Ridge 仅用于稳定估计,不做自动筛选。


5.10.7.4 随机森林变量重要性(SHAP)

思路:用随机森林对结局进行预测,依据模型对每个自变量的重要性排序; - Logistic/分类:关注 MeanDecreaseAccuracy / MeanDecreaseGini; - 线性/Poisson 回归:关注 %IncMSE / IncNodePurity; - Cox 生存:randomForestSRCVIMP 指标。

主要设置: - 随机种子(请记录以复现); - 图像风格:条图/点线图/数字图; - 期刊风格:黑白(simple)/彩色(color),并可选择多种期刊配色方案; - 数字颜色/字号、小数位、画布大小等; - 点击 “随机森林变量重要性排序” 开始。

输出: - 可发布的重要性排序图表格; - 图表与表格均支持下载(Word 与高分辨率图片)。

建议:若你将筛选结果用于传统回归而非机器学习,随机森林不考虑共线性,排序后可再用 Lasso 做二次筛选以减轻共线性。


5.10.7.5 Boruta

原理:将每个真实变量与相应的“影子变量(随机洗牌版本)”比较重要性,只有显著强于影子的变量被标记为 Confirmed,显著弱于的为 Rejected,其余为 Tentative

使用建议: - 高维/高通量时,先 Lasso 再 Boruta,能大幅提升速度与稳定性; - 生存结局(Cox)计算量更大,更加推荐先做 Lasso 预筛。

输出: - 变量重要性分组(Confirmed/Rejected/Tentative)与可下载表格/图形; - 可据此形成一套“核心变量”(Confirmed)清单,再结合临床常识与文献决定是否保留 Tentative。


5.10.8 导出与复现

  • 表格均支持 Word(.docx) 下载;图形支持 PNG/PDF 下载。
  • 首次生成或刷新图表后,建议等待 10–15 秒再点击下载,避免下载到旧文件(下载后也请对照页面核对)。
  • 记录:随机种子最终入选变量名单模型设定,以保证结果的可复现与可溯源。

5.10.9 常见问题(FAQ)

  • 模型不收敛/出现 OR/HR/RR=0、Inf、极大值:检查事件编码;合并稀有或全 0/全 1 的类别;减少或替换问题变量;必要时改用机器学习预测而非因果推断。
  • VIF 很高:使用 Lasso/Elastic Net;或移除/合并高度相关变量。
  • 样本量骤减:多因“整行剔除缺失”,请在“数据准备”先做缺失填补,或剔除高缺失变量。
  • VIP 功能不可用:需要在 VIP 版本中使用随机森林与 Boruta。

5.10.10 完成后的标志

  • 你已得到一份清晰的入选变量清单(逐步回归/Lasso/Boruta/随机森林等途径之一或组合);
  • 回代原始回归后的统计表可直接用于论文草稿;
  • 变量名、事件编码、参照组、CI 方法等设定均已确认,并可在其他模块中复用。

5.11 阈值效应和 sengmented / piecewise 分段/断点回归

在医学和流行病学等领域,研究者常常关注某个连续性自变量(例如年龄、BMI、血糖、血压、某生化指标等)与结局变量之间是否存在“阈值效应”或“拐点”。若真的存在这样一个或多个临界点,自变量在不同区间对结局的影响强度(斜率)往往并不相同。此时,传统的线性假设可能会低估或忽视这种非线性变化,难以准确反映真实的生物学机制。

分段回归(Piecewise Regression,也称为“分段线性回归”或“分段广义线性回归”)正是为应对上述情形而设计的一种分析方法。它允许研究者在一个或多个拐点处人为(或自动)地将连续自变量拆分为若干区段,然后在每个区段内假设自变量与结局之间呈线性关系,从而更清晰地捕捉到潜在的拐点或阈值效应。

下文将从以下几个方面介绍分段回归的方法、应用场景、操作流程以及软件实现细节。

Piecewise 线性回归 | Piecewise Cox 回归 | Piecewise Poisson 回归 | ======================================+======================================+======================================+ | |

5.11.1 基本思想

在医学研究中,当我们怀疑某生理指标(例如血压、血糖或 BMI)过低或过高都可能导致不良结局时,则可考虑使用分段回归(Piecewise Regression)来刻画这种潜在的“U 型”或“J 型”关系。

这种做法让我们能够分别估计 X 在不同区间对 Y 的影响斜率,从而精准捕捉到在拐点处风险或效应发生转折的现象。

5.11.2 常见的应用场景

  1. 阈值或临床拐点探索
    例如,血压或血糖若高过某一点会急剧增加心血管事件风险;也可能在过低时对某些人群不利。通过分段回归,可准确定位该“临界值”。

  2. 剂量-反应或剂量-毒性研究
    药物剂量与疗效/毒性的关系可能在特定区间内线性增加,但超过某个阈值后毒副作用会显著提升。分段回归有助于找出合理的剂量范围。

  3. 生物学上明显分区间的指标
    某些指标如 BMI、某些激素水平、实验室指标等,往往有文献或先验信息提示潜在的“安全区间”。使用分段回归能将这些先验的区间或阈值纳入定量模型中。

  4. 替代无脑分组
    以往研究中常将连续变量简单地分为“高、中、低”三组进行卡方检验或Log-rank 检验,这样容易损失信息。分段回归则在不随意多级分组的前提下,灵活又有 interpretability。

5.11.3 与其他方法的对比

  • 与线性回归相比
    分段回归更能捕捉不同区间的差异,适合怀疑有明显阈值的情形;若根本不存在拐点或非线性,分段回归就不会比简单的线性回归更有优势,且增加了模型复杂度。

  • 与多项式回归、样条回归相比
    多项式回归或样条回归(如限制性立方样条 RCS)在对连续变量进行拟合时较平滑,能在整体上刻画更复杂的曲线形状。
    分段回归则更强调“在拐点之前是一种趋势,拐点之后换另一种趋势”,并且在拐点处会有比较明显的线性拼接。对于某些存在“阈值”或“转折”概念的研究更直观。

5.11.4 分段回归在医学科研中的优势

  1. 能够更直观地解释阈值效应
    一旦在模型中估计出ψ等拐点位置,就可清晰指出“某一数值是转折点”,并量化其在不同区间的斜率或风险比。

  2. 减少信息损耗
    与将连续变量硬性分组相比(如三组或四组),分段回归最大程度保留了连续信息,只是在可能出现转折的地方做局部处理。

  3. 便于个体化指导
    如果在 BMI、血糖或血压的分段回归中发现了确切的高风险段,临床上就可以根据该阈值更精准地干预或随访。

  4. 可辅助其他统计方法或生物学假说
    分段回归的结果也能与线性回归、Loess 平滑、甚至是样条回归的结果进行对比验证。若各方法都发现同样的转折点或阈值,就能更有信心地发表或应用。

5.11.5 常见的分段回归类型

在广义线性模型(GLM)框架下,几乎所有常用的回归都可做“分段”处理,只要我们将自变量增加一个或多个“截断”函数即可:

  1. Piecewise 线性回归
    适用于连续型结局。示例:研究实验室某连续指标(如血清酶浓度)随温度或时间的转折关系。

  2. Piecewise Logistic 回归
    适用于二分类结局(如疾病发生与否、疗效好坏)。示例:将某炎症指标作为连续自变量,检验其在不同区段时对二分类结局的 OR 是否明显变化。

  3. Piecewise Cox 回归
    适用于生存数据(需 time 和 status 两个变量),常用于找出生存风险在不同区间的变化。示例:年龄在某个区段内对死亡风险的影响相对平稳,但超过一定岁数时风险陡增。

  4. Piecewise Poisson / Quasipoisson 回归
    适用于计数型数据(如某项事件的发生次数),检验在某个区间后是否出现跳变或陡增趋势。

5.11.6 自动或手动确定拐点

5.11.6.1 手动指定拐点

当研究者已有临床或文献证据,或从可视化图上已肉眼观察到比较明显的转折位置时,可直接在模型中指定拐点 ψ的数值。
例如,设置血糖 = 7 mmol/L 作为拐点,模型就会根据在 <7 mmol/L 和 ≥7 mmol/L 两段上分别拟合斜率,并估计是否存在显著差异。

5.11.6.2 使用 segmented 包自动搜索拐点

在 R 语言中,segmented 包提供了一套迭代算法,通过给定初始值(或由软件自行猜测)来逐步调整拐点的位置,使模型的整体拟合优度最好(通常用残差最小、似然最大、AIC 最小等标准)。
研究者可以设定需要搜索的拐点个数(如 1~2 个),该包就会输出最优拐点值并给出各区间的斜率估计。

注意:

  • 若拐点个数设置太多,容易导致过拟合;

  • 如果数据量较小或噪音较大,自动搜索拐点可能会得出不稳定或不易解释的结果。

  • 最终是否采用自动搜索结果还需结合生物学、临床意义等进行判断。

5.11.7 准备数据

首先务必按照下面的格式准备数据(网站上可下载,下载后在此基础上修改):

下载csv样例数据(右击另存为)

打开如下图:

本样例数据的规则:

  1. 一个患者一行(这是准备数据最重要的前提)。

  2. 每个患者准备两大类数据,影响因素变量和结局变量,影响因素和结局分别都可以有多个变量。

如图所示,hospital, treatment, age, age2, sex, obstruct, prfor, adhear, differ, extent 为影响因素(自变量),而blood, effect, status, time, occurrence在本例中是结局变量。

  1. 影响因素变量有两种,连续性变量(值是连续数据,它可以在变量值所属区间内任意进行取值,如年龄(岁)、血糖值、人的身高、智商等)以及分类变量(是说明事物类别的一个名称,其取值是分类数据。如”性别”就是一个分类变量,其变量值为”男”或”女”;“行业”也是一个分类变量,其变量值可以为”零售业”、“旅游业”、“汽车制造 业”等),在本例中 age是连续性变量(numeric), 其他的是分类变量(factor)。age单位为”岁”时为连续变量,而age2为年龄段分组,这时候为分类变量。

以上概念很重要,后面有一个页面专门设置连续变量和分类变量。

  1. 结局变量在本工具中分为几类:
  • 连续型结局变量

如本例中的blood(某血液检测指标)

  • 二分类结局变量

如本例中的effect(疗效)为二分类变量(Good,Bad)

  • 生存型结局变量

需要用两个变量组合来表示,如本例中的status和time。

status代表患者在研究结束时的状态,在本工具中只能取0和1两个数字,不要用字符文本,否则会出错。0 代表没观察到事件发生(如没死或者失访),1 代表观察到了事件发生(如已经死亡且录入了死亡日期)。

time代表从开始日期(开始日期的定义由你的研究目的决定,如随机对照研究往往取随机化入组的那一天为开始日期,而观察性研究可以取首次诊断日期或首次治疗日期等等根据研究目的而定)到结局日期的时间差。当status=1时,结局日期为发生事件(如死亡)的日期,当status=0时,结局日期为最后一次活着的日期(如研究结束日,或随后一次随访日)。

总之,time是一个数值型变量,您需要填入患者从开始到死亡或者随后一次随访时,一共活着的天数。如time为56,status为1时代表患者从开始到死亡活了56天;当time为56,status为0时代表患者没观察到死亡,从开始到最后一次随访,活了56天。

准备数据时,time填入一个非负的整数,status填入0或1,time和status都不能为空,每个患者都必须填入数字。time或status不确定(缺失)时,该患者最好不要放入本数据库。

  • 计数型结局变量

计数型的结局变量为一个非负的整数,如本例中occurrence,是急性发作次数,无法取负数,也不可能取小数。

  • 分数型结局变量

当结局变量为一个分数,如发病率、患病率、受精率等,结局包含一个分子和一个分母。如要研究全国各地疾病患病率的影响因素时,按照每个地区一行来准备数据,分子和分母设置成两个变量(列),如分子为患病人数,分母为地区人口数。

准备数据的规则是:分子和分母都是非负整数,不允许填入负数,也不允许填入小数,分子的数值不能大于分母。

5.11.8 进入模块

接下来我们进入模块,点击软件顶部菜单的“因果推断”,然后点击“阈值效应和 sengmented / piecewise 分段/断点回归” 进入模块。

5.11.9 进入“阈值效应和 piecewise 回归”界面

  1. 在软件左侧或顶部标签栏找到“阈值效应和 piecewise 回归”Tab。

  2. 该界面通常分为左侧侧边栏右侧主显示区两部分:

  • 侧边栏:包含模型类型、结局变量选择、自变量选择、协变量选择、以及“Piecewise 回归设置”等输入控件。

  • 主显示区:在您点击“生成/更新 piecewise 回归分析结果”后,右侧会显示分段回归的表格结果与图形。

5.11.10 选择回归类型与变量

在侧边栏的“模型设置”区域:

  1. 回归类型(family)
  • 例如:二分类结局选 Logistic 回归(OR)或 Poisson/Quasipoisson 回归(RR);生存分析选 Cox 回归(HR);计数结局则选 Poisson/Quasipoisson(RR),等等。

  • 您只需按照自己研究的结局类型选择对应的方法即可。

  1. 选择结局变量
  • Logistic 回归:指定二分类变量,并选择哪个水平代表“事件=1”;

  • Logistic 回归:指定二分类变量,并选择哪个水平代表“事件=1”;

  • Cox 回归:指定 time 和 status;

  • Poisson / Quasipoisson:指定一个非负整数的计数变量;

  • Linear 回归:指定一个连续型结局等等。

  1. 选择自变量(predictor)
  • 即在图中和模型中将做分段的“连续变量”。若下拉菜单找不到某变量,可能是它未被设置为 numeric(在“数据准备”模块中可切换变量类型)。
  1. 选择协变量(covariates)
  • 若需做多因素调整,可在此多选一个或多个;若不需调整协变量,可留空。

5.11.11 选择分段回归方法

在侧边栏下方“Piecewise 回归设置”区域中,您将看到以下三个选项,可根据研究需要任选其一:

  1. 自动寻找折点(segmented 包)
  • (A)“设置折点数量(npsi)自动搜索”

  • 例如 npsi=1 即寻找 1 个折点,将自变量分成 2 段;若怀疑有 2 个拐点,可设 npsi=2,以此类推。

  • (B)“指定一个折点起始值(psi)再自动搜索”

  • 当对折点大致所在范围已有先验认识时,可输入一个起始数值,软件将从此数值附近开始迭代搜索最优折点。

  • 该方法基于 R 包 segmented 的迭代算法,可给出最优的折点位置及对应区段的回归系数与显著性。

  1. 人为指定折点(固定值)
  • 直接手动输入折点,如“43”,或多个折点用英文逗号分隔,如“43, 60”。

  • 适用于已有较多文献或临床先验信息,或从其它方法(如可视化)已清晰识别到具体的拐点位置。

提示:如果对拐点所在位置完全没有想法,可先尝试自动搜索模式;若搜索到的折点有明确临床意义,也可在后续分析中将其作为“固定折点”写入论文。

5.11.12 其他选项设置

  • 保留小数位数:可调节效应量(OR/HR/RR/Coefficient)和 P 值的小数位,以满足期刊格式要求(常见:OR/HR/RR 保留 2~3 位小数)。

  • 图像尺寸:可调节宽度和高度,使结果图在网页预览或下载时适配不同的大小。

5.11.13 生成和查看结果

  1. 点击“生成/更新 piecewise 回归分析结果”
  • 软件将自动执行后端运算,完成分段回归的拟合。

  • 若选择自动搜索折点方式,软件会输出搜索到的最佳折点位置。

  1. 右侧主显示区
  • 将显示一份分段回归表格,列示各区段的回归系数(或 OR/HR/RR 及其 95% CI)与相应的 P 值等统计信息。

  • 同时会生成一张可视化的分段曲线图(针对可绘制出拟合线的情况,例如线性回归,或用特定可视化方式展现 Cox/Logistic 之分段结果),并在图中标出折点位置。

  1. 结果解读要点
  • 折点:在输出的表格里若看到“Break-points = 42.7”之类,说明自变量在值为 42.7 附近时出现明显的风险转折。

  • 各区段斜率/效应量:表中会显示不同区间内自变量与结局的关联强度;例如区间 1(X < 42.7)时 OR=1.02,区间 2(X ≥ 42.7)时 OR=1.10,暗示在第二区段中自变量单位变化对结局的影响更大。

5.11.14 下载 Word 报告

在“下载 word 报告”页面:

  1. 点击“点此下载 word 文档”按钮,软件会自动打包当前 piecewise 分段回归的结果、模型参数表格、方法学描述等,形成一份可读性较好的 Word 文件。

  2. Word 文件可在后续论文写作或组内讨论时直接引用;请用微软 Word 打开,避免在 WPS 等软件中出现格式错乱。

5.11.15 查看/下载原始输出和 R 源代码

在“查看 R 源代码和原始输出”页面:

  1. 可以一键下载当前分析所使用的 dt.RData 数据集。

  2. 可以查看或下载自动生成的 R 代码与回归输出,以便您或审稿人复现结果。

  3. 若您不熟悉 R 语言,可忽略此步骤;软件已在后台帮您完成这些运算。

5.11.16 常见问题与注意事项

  1. 折点数量过多
  • 理论上可设置多个折点,但在医学研究中,通常只考虑 1~2 个拐点。拐点过多不仅会使模型复杂、解释困难,还可能导致过拟合。
  1. 自动搜索到的折点无临床意义
  • 当自动搜索到的折点不符合生理或临床常识时,需谨慎解释。可以再尝试人工指定或者进一步核对数据分布。统计结果必须与临床背景相结合。
  1. 分段回归 vs. 亚组分析
  • 分段回归是将“连续变量”在同一个模型中通过截断函数进行分段,区段之间是拼接且连续的;

  • 亚组分析通常是把人群完全拆分为“不同子人群”后做平行分析,其方法学与分段回归不同,得到的结果也不可简单等同。

  1. 拐点与线性假设
  • 当无显著非线性或模型诊断认为折点不必要时,完全可以回到简单线性回归 / Cox / Logistic 模型。
  1. 数据分布极端不平衡
  • 若某段区间样本数极少,会导致估计不稳定,置信区间极宽或无法收敛。建议保证各区间有足够样本量。

5.11.17 总结

分段回归(Piecewise Regression)在医学与流行病学研究中具有重要应用价值,尤其适用于发现和量化自变量在某些关键阈值或转折点前后的差异性影响。本软件在“阈值效应和 piecewise 回归”模块中,为用户提供了易于操作的一站式分段分析功能,包括:

  • 自动 / 人工确定折点

  • 多种回归类型(Logistic、Cox、Poisson 等)适配

  • 分段结果与可视化图形自动生成

  • 一键导出报告R 源代码以便复现

通过以上功能,研究者无需自行编写复杂的统计脚本,即可高效完成对连续变量的阈值探索与分段拟合,并在论文和报告中直观呈现各段的回归系数、P 值以及折点位置,从而为临床诊疗和公共卫生决策提供更精准的证据。

5.12 限制性立方样条图 RCS

限制性立方样条(Restricted Cubic Spline, RCS)用于回答一个很常见的医学研究问题:一个连续变量和结局之间,是否真的可以用一条直线来描述?例如年龄、BMI、血糖、血压、肿瘤标志物、炎症指标等变量,和死亡、复发、疗效、并发症之间的关系,常常不是简单的“越高越好”或“越高越差”。RCS 的价值,是在不把连续变量粗暴分组的前提下,用一条平滑曲线展示可能存在的非线性关系。

这类分析的推荐顺序是:先用 RCS 观察曲线形状和非线性检验,再决定是否需要进一步做阈值效应或 Piecewise 分段回归。不要一上来就把连续变量按中位数、四分位数或所谓“最佳截断值”分组;这样会损失信息,也可能制造不稳定的结论。Harrell 的 rms 建模体系和 Desquilbet、Mariotti 关于公共卫生研究中剂量反应分析的论文,都强调了用样条函数描述连续暴露变量的重要性。

5.12.1 开始前先看三种图像风格

本模块会同时生成三种风格的 RCS 图。正式操作前,先看下面三张示例图,理解三种输出各自适合什么场景。

风格一是 Base R Graphics 图,画面朴素,适合快速核对曲线形状和非线性趋势。

风格一:Base R Graphics RCS 曲线
风格一:Base R Graphics RCS 曲线

风格二是华丽版 ggplot2 图,带半透明置信区间和直方图,适合论文作图、组会汇报和对外展示。

风格二:华丽版 ggplot2 RCS 曲线
风格二:华丽版 ggplot2 RCS 曲线

风格三是朴素版 ggplot2 图,配色更克制,同时保留数据分布信息,适合黑白期刊或希望图像更简洁的论文。

风格三:朴素版 ggplot2 RCS 曲线
风格三:朴素版 ggplot2 RCS 曲线

5.12.2 R 包 rms 和 RCS 方法简介

rms 是 Frank E. Harrell Jr. 开发的回归建模策略包,完整名称来自 Regression Modeling Strategies。它不是单纯的绘图包,而是一整套回归建模、模型摘要、非线性检验、预测和可视化工具。rms 文档中常用的函数包括:

函数 作用 本模块中的意义
lrm() Logistic 回归 二分类结局,通常报告 OR
cph() Cox 比例风险回归 生存结局,通常报告 HR
Glm() 广义线性模型 Poisson、Quasipoisson、线性模型等
rcs() 构造限制性立方样条项 把连续变量加入模型时允许非线性
datadist() 保存变量分布、参考值和显示范围 Predict() 知道协变量如何固定、参考点在哪里
Predict() 生成模型预测结果 计算曲线每个点相对于参考点的 OR/HR/RR 或 log 效应量
anova.rms() 检验变量整体效应和非线性部分 生成 P-overallP-nonlinear

rms::rcs() 本质上是把一个连续变量转换成若干个基函数,再和其他协变量一起放入回归模型。它的优势不是“自动找一个神奇截断值”,而是让模型在数据密集区域有足够灵活性,在两端样本稀少区域保持线性尾部,从而减少边缘区间过度摆动。

5.12.3 RCS 的原理、公式和 Knot 定义

普通线性模型假设连续变量 \(x\) 对结局的影响是一条直线:

\[ g\{E(Y \mid x, Z)\} = \alpha + \beta x + \gamma^T Z \]

其中 \(g(\cdot)\) 是连接函数,Logistic 回归中是 logit,Cox 模型中对应对数风险,Poisson 模型中通常是 log。\(Z\) 表示协变量。这个模型只能描述“每增加 1 个单位,效应固定变化多少”。

RCS 放宽了这个假设。设连续变量 \(x\)\(K\) 个 Knot,记为

\[ \xi_1 < \xi_2 < \cdots < \xi_K \]

RCS 可以写成:

\[ g\{E(Y \mid x, Z)\} = \alpha + \beta_1 x + \sum_{j=1}^{K-2}\theta_j h_j(x) + \gamma^T Z \]

其中 \(h_j(x)\) 是由 Knot 构造出来的非线性基函数。常见的一种截断幂基函数写法是:

\[ h_j(x) = (x-\xi_j)_+^3 - (x-\xi_{K-1})_+^3\frac{\xi_K-\xi_j}{\xi_K-\xi_{K-1}} + (x-\xi_K)_+^3\frac{\xi_{K-1}-\xi_j}{\xi_K-\xi_{K-1}} \]

这里 \((u)_+ = u\)\(u > 0\),否则为 0。初学者不需要手算这些基函数,软件会自动完成;真正需要理解的是下面几件事:

  1. Knot 是曲线允许改变弯曲方式的位置,不是 Piecewise 回归里的“断点”。
  2. RCS 曲线在相邻 Knot 之间用三次多项式连接,所以曲线平滑。
  3. “限制性”指曲线在最左侧 Knot 之前、最右侧 Knot 之后被限制为线性尾部,避免两端样本少时乱摆。
  4. 如果有 \(K\) 个 Knot,一般会产生 \(K-1\) 个自变量项,其中包括 1 个线性项和 \(K-2\) 个非线性项。

Durrleman 和 Simon 早期系统介绍了临床与流行病学中用 cubic spline 进行灵活回归建模的思路;Harrell 的 Regression Modeling Strategiesrms/Hmisc 文档进一步将这种方法整理成了常用的医学统计工作流。

5.12.4 Knot 应该怎么设置

Knot 数量决定曲线的灵活程度。Knot 太少,曲线可能过于僵硬,看不到真实弯曲;Knot 太多,曲线可能过拟合,把随机波动也画成“趋势”。医学论文中最常见的是 3 到 5 个 Knot。

本模块允许在 3 到 7 个 Knot 之间选择。下表是 Hmisc::rcspline.eval() / rms::rcs() 底层默认放置 Knot 时对应的精确分位点,也就是本模块生成 RCS 模型时使用的分位点规则。

Knot 数 常见分位点位置 适用场景
3 个 Knot 10%、50%、90% 样本量较小,或只希望允许一个简单弯曲
4 个 Knot 5%、35%、65%、95% 最常用的平衡选择,本模块默认推荐
5 个 Knot 5%、27.5%、50%、72.5%、95% 样本量较大,且怀疑曲线更复杂
6 个 Knot 5%、23%、41%、59%、77%、95% 很少作为主分析使用,可用于样本量较大时的敏感性分析
7 个 Knot 2.5%、18.33%、34.17%、50%、65.83%、81.67%、97.5% 曲线自由度很高,需谨慎,通常仅用于探索或敏感性分析

这些位置来自 Harrell 常用的分位点建议,目的不是把人群分成几组,而是让曲线的“可弯曲位置”覆盖整个连续变量分布。Hmisc::rcspline.eval() 文档也说明了默认 Knot 会基于变量分布自动确定,并会处理极端值大量重复时的情况。模块结果页、帮助弹窗和本说明书均按上表的精确分位点规则展示。

本模块提供两种设置方式:

  1. 手工设置 Knot 数:推荐作为论文主要结果使用。常见做法是先用 4 个 Knot,如果曲线非常简单可试 3 个,如果样本量足够且曲线明显复杂可试 5 个。
  2. 根据最小 AIC 自动计算:软件在候选 Knot 数之间比较 AIC,AIC 越小代表模型拟合与复杂度之间的折中越好。它适合探索,但不建议机械地把 AIC 最小当成唯一标准;最终仍要看曲线是否稳定、是否符合临床常识、是否有足够样本支撑。

论文中可以这样描述:

We modeled the continuous exposure using restricted cubic splines with 4 knots placed at the 5th, 35th, 65th, and 95th percentiles. Overall and nonlinear associations were tested using the Wald test from the rms model.

5.12.5 参考点 Reference value 的意义

RCS 图的纵轴通常不是绝对风险,而是“相对于参考点”的效应量。例如横轴是 Age,参考点设在 62 岁,那么图中 50 岁、70 岁、80 岁的 OR/HR/RR 都是在和 62 岁比较。

rms 工作流中,datadist() 会记录连续变量的中位数、显示范围和协变量默认调整值。本模块会把用户设置的参考点写入 datadistAdjust to 位置,再用 Predict(..., ref.zero = TRUE) 生成以参考点为 0 的 log 效应量曲线。如果选择 OR/HR/RR 原值,则软件再把 log 效应量指数化。

参考点设置的常识:

  1. 默认使用中位数或 50% 分位数最稳妥,因为它通常位于样本分布中心,估计更稳定。
  2. 如果临床上有公认参考值,可以把参考点设置到该位置,例如 BMI 取 24、血压取 120 mmHg、某检验指标取正常上限。
  3. 参考点会改变纵轴数值和“相对于谁”的表达,但不会改变曲线本身的弯曲形状。
  4. 不要为了让某一段看起来更显著而反复移动参考点。参考点应由临床意义或预先设定的分析计划决定。

5.12.6 RCS 图像的纵轴如何理解

RCS 图的横轴是研究的连续自变量,例如 Age、BMI 或某个检验指标。纵轴根据模型类型不同而变化:

模型 原值纵轴 log 纵轴 含义
Logistic OR log(OR) 相对于参考点的优势比
Cox HR log(HR) 相对于参考点的风险比
Poisson / Quasipoisson RR log(RR) 相对于参考点的率比
线性回归 beta beta 连续结局的均值差异

本模块默认使用 log(OR)/log(HR)/log(RR)。这样视觉上更对称:参考线为 0,曲线高于 0 表示相对风险升高,低于 0 表示相对风险降低。例如 OR = 0.5 和 OR = 2 在 log 尺度上距离参考线相同,只是方向相反。面向临床读者解释具体倍数时,可以切换到 OR/HR/RR 原值;但原值尺度上下不对称,视觉解读要更谨慎。

图上的两类 P 值需要分开理解:

  1. P-overall:检验这个连续变量整体上是否与结局有关,包含线性和非线性部分。
  2. P-nonlinear:检验曲线是否明显偏离直线。

如果 P-overall 不显著,说明整体关联证据不足;如果 P-nonlinear 不显著,说明即使存在关联,也未必需要用复杂的非线性曲线解释。

5.12.7 Piecewise 回归和阈值效应的原理

Piecewise 回归也叫分段回归、broken-line regression 或 segmented regression。它回答的问题和 RCS 不完全一样。RCS 用平滑曲线描述连续变量和结局的整体形状;Piecewise 回归进一步把曲线分成若干区间,分别估计每个区间内的线性斜率或效应量。

最常见的一个折点模型可以写成:

\[ g\{E(Y \mid x, Z)\} = \alpha + \beta_1 x + \beta_2 (x-c)_+ + \gamma^T Z \]

其中 \(c\) 是折点,\((x-c)_+ = x-c\)\(x>c\),否则为 0。这个公式的含义很直观:

  1. \(x < c\) 时,\((x-c)_+=0\),左侧斜率是 \(\beta_1\)
  2. \(x \ge c\) 时,右侧斜率是 \(\beta_1+\beta_2\)
  3. Logistic、Cox、Poisson 模型中,把斜率指数化即可得到每增加 1 单位时的 OR、HR 或 RR。
  4. 如果要计算右侧斜率的置信区间,需要用协方差矩阵:
    \(\mathrm{Var}(\beta_1+\beta_2)=\mathrm{Var}(\beta_1)+\mathrm{Var}(\beta_2)+2\mathrm{Cov}(\beta_1,\beta_2)\)

Muggeo 的 segmented 包实现了未知折点的估计。它先给一个初始折点或折点数量,然后通过迭代算法同时估计折点、斜率和协方差矩阵。Muggeo 2008 的 R News 论文用母亲年龄和唐氏综合征风险的例子说明了这种 broken-line 模型在流行病学和毒理学中的应用,也强调了自动估计折点和人为固定折点的标准误可能不同。

本模块提供三种 Piecewise 方法:

方法 R 包实现 适合场景 需要注意
设置折点数量自动寻找 segmented::segmented(..., npsi = ) 探索性寻找 1 到 2 个可能折点 折点是估计出来的,CI 和 P 值会考虑更多不确定性
设置折点起始值后自动寻找 segmented::segmented(..., psi = ) 已知大致阈值范围,希望软件在附近优化 起始值不能太离谱,否则可能不收敛
人为指定折点精确值 普通 glm/coxph 加截断变量 折点来自指南、文献、临床经验或预设方案 折点被当作固定值,不包含折点估计不确定性

重要提醒:Piecewise 回归不是亚组分析。它不是把数据按折点切成两组后分别做两次回归,而是在同一个模型中加入截断函数,估计折点前后不同斜率。这样可以保持模型连续,也更便于比较分段模型和普通线性模型。

5.12.8 本模块能完成什么

本模块围绕临床论文里的 RCS 和阈值效应分析流程组织,而不是只画一张图。主要功能包括:

  1. 支持 Logistic、Cox、Poisson、Quasipoisson、Ordered Logistic、线性回归等多种模型类型。
  2. 支持手工设置 Knot 数,也支持根据最小 AIC 在候选 Knot 数中自动选择。
  3. 支持三种 RCS 图像风格:Base R Graphics、华丽版 ggplot2、朴素版 ggplot2。
  4. 三种图像都可以选择纵轴显示 OR/HR/RR 原值log(OR)/log(HR)/log(RR),默认使用 log 效应量。
  5. ggplot2 风格图可以选择显示或隐藏直方图;显示直方图时,才显示直方图高度和条数菜单。
  6. 直方图高度为 0 到 100 的百分比尺度,0 对应 Y 轴最低处,100 对应 Y 轴最高处;默认高度会让最高的直方条接近纵轴高度的 70%。直方图条数默认固定为 25。
  7. 图像宽度和高度由统一的图像渲染模块提供,在图像下方调整,不再放在右侧外观面板。
  8. 可以在折点观察页用滑块和数字输入框同步设置手工折点。
  9. Piecewise 回归结果和 R 源代码分开显示,RCS 建模源码和 Piecewise 源码分别放在各自结果页内部,便于复现。
  10. 左侧每个重要菜单标题右侧有问号图标,点击后会弹出科普说明,帮助理解 family/link、事件水平、Knot、参考点、协变量和 Piecewise 参数。
  11. 可以下载 Word 报告、PNG/TIFF/SVG/PDF 图像,以及可复现的 R 源代码。

5.12.9 准备数据

RCS 分析要求数据是一行一个研究对象。最常见的数据结构如下:

数据角色 例子 软件中如何使用
结局变量 Y 是否复发、是否死亡、血压、发作次数 根据结局类型选择 Logistic、Cox、线性或计数模型
主要自变量 X 年龄、BMI、血糖、肿瘤标志物 必须是连续型 numeric 变量,只能选择一个作为 RCS 横轴
协变量 性别、分期、治疗方式、合并症 可多选,用于多因素调整
权重变量 抽样权重、倾向评分权重 可选,仅在确实需要加权分析时使用

本模块示例数据可从这里下载:

下载 csv 样例数据(右击另存为)

使用前要先在数据准备模块确认变量类型。横轴自变量必须是连续型变量;如果 Age 被设置成 factor,模块不会把它当作 RCS 横轴使用。二分类结局如果存在“未知”“不详”“Don’t know”等水平,应先在数据准备阶段处理好,不要把它们当成真正的事件或非事件。

5.12.10 操作步骤一:进入模块并完成建模设置

进入 MSTATA 后,点击顶部菜单“因果推断”,再选择“限制性立方样条图 RCS”。模块顶部按分析流程分为几个标签页:

  1. “使用说明”:阅读当前说明。
  2. “生成限制性立方样条图”:完成 RCS 建模和三种风格图像。
  3. “观察图像肉眼寻找折点的粗略位置”:在曲线明显弯曲时,用于初步判断折点位置。
  4. “阈值效应和 piecewise 回归”:基于自动或手工折点做分段回归。
  5. “下载 word 报告”:导出报告。

点击“生成限制性立方样条图”后,左侧是建模设置,右侧是结果区。左侧现在按照分析顺序分成三张卡片。

第一张卡片是“选择回归类型和结局 Y”。先根据结局变量选择模型类型,再选择结局变量。二分类结局要特别注意“事件水平”:你选中的水平会在建模时设为 1,其他水平设为 0。例如结局变量是 Sex,如果选中 Male,模型解释的就是“发生 Male 这个事件”的相对效应;如果选反,OR 的方向也会反过来。因此事件水平紧跟在结局变量下面,方便设置时立即核对。

第二张卡片是“选择自变量 X 和协变量”。横轴变量 X 必须是连续变量,例如 Age。协变量菜单支持多选、全选、清空和拖拽排序;如果不想调整协变量,可以留空。权重变量是可选项,普通分析通常选择“无”。

第三张卡片是“设置 Knot、参考点并运行”。Knot 可以手工设置,也可以根据最小 AIC 自动选择。参考点类似分类变量回归里的参照组,只不过连续变量的参照是一个具体数值点。改变参考点会改变纵坐标的基准,但不会改变曲线形状。

左侧设置面板截图如下:

RCS 建模左侧设置:回归类型、事件水平、X、协变量、Knot 和参考点
RCS 建模左侧设置:回归类型、事件水平、X、协变量、Knot 和参考点

5.12.11 操作步骤二:查看 RCS 模型结果主面板

点击“生成/更新限制性立方样条图”后,右侧主面板会显示 RCS 模型结果。这里包括 Knot 数选择、RCS 公式、模型拟合结果和拟合优度。先核对这些结果是否正常,再继续看下面的曲线。

RCS 模型结果主面板
RCS 模型结果主面板

主面板中的几类结果要这样看:

  1. “Knot 数的选择”用于确认当前模型用了几个 Knot。
  2. “RCS 公式”用于复现模型,例如 Sex ~ rms::rcs(Age, 4)
  3. 模型拟合表中会列出线性项和非线性项的系数,但 RCS 的单个系数通常不直接解释,重点看曲线和整体/非线性检验。
  4. 拟合优度表用于检查模型是否正常拟合,不等于论文结论本身。

5.12.12 操作步骤三:查看和调整三种 RCS 图像

RCS 图像有三种风格:

  1. 风格一:Base R Graphics,朴素、稳定,适合快速核对曲线形状。
  2. 风格二:华丽版 ggplot2,带半透明置信区间和数据分布,适合论文或汇报展示。
  3. 风格三:朴素版 ggplot2,视觉克制,适合黑白印刷或需要简洁风格的场景。

三种图都支持纵轴显示方式选择。默认是 log(OR)/log(HR)/log(RR);如果切换为 OR/HR/RR 原值,才需要考虑原值坐标下的视觉尺度问题。

风格一主面板如下,适合快速确认曲线是否近似直线、U 型、J 型或 L 型:

风格一主面板:Base R Graphics 图像和统一图像尺寸调整
风格一主面板:Base R Graphics 图像和统一图像尺寸调整

右侧外观面板用于控制纵轴显示值、颜色风格和坐标轴标题:

风格一右侧图像外观设置面板
风格一右侧图像外观设置面板

风格二主面板如下,适合论文和展示使用。图中直方图用于提醒读者数据主要集中在哪些横轴范围:

风格二主面板:华丽版 ggplot2 RCS 曲线
风格二主面板:华丽版 ggplot2 RCS 曲线

风格二右侧外观设置如下。对于带直方图的 ggplot2 图,右侧有“是否显示直方图”的开关。选择“不显示直方图”时,只保留曲线、置信区间和边框;选择“显示直方图”时,才显示直方图高度和条数两个菜单。直方图高度现在是 0 到 100 的百分比尺度,向右滑动表示更高,条数默认 25。图像宽度和高度在图像下方统一调整,由软件统一渲染模块提供。

风格二右侧图像外观设置:log 效应量、直方图开关、高度百分比和颜色风格
风格二右侧图像外观设置:log 效应量、直方图开关、高度百分比和颜色风格

5.12.13 操作步骤四:观察图像肉眼寻找折点的粗略位置

这一步不是必需步骤。只有当 RCS 曲线有明显折点或弯曲时,才建议进入“观察图像肉眼寻找折点的粗略位置”。如果曲线接近直线,或者斜率没有明显变化,用上一页的 RCS 图和常规回归结果即可,不要为了做 Piecewise 而强行寻找折点。

本页左侧可以选择折点策略:

  1. 不设置折点:适用于近似直线或没有明确拐点的曲线。
  2. 将曲线最低点设置为折点:适用于 U 型曲线,但前提是最低点确实位于数据分布较可靠的中间区域。
  3. 将曲线最高点设置为折点:适用于倒 U 型曲线。
  4. 手工设置折点:适用于 J 型、L 型、多段变化,或已有文献/临床经验支持某个阈值。

手工设置折点时,滑块和数字输入框是同步的。拖动滑块会更新数字输入框,直接输入数字也会同步移动滑块。小数位数菜单用于控制图中标注和结果中保留的小数位。

左侧折点设置面板:

折点观察页左侧设置:滑块和数字输入框同步设置手工折点
折点观察页左侧设置:滑块和数字输入框同步设置手工折点

右侧主面板会在图中标出当前选择的折点位置,方便和曲线最低点、最高点或斜率改变区域对照:

折点观察页主面板:在 RCS 曲线上标注手工折点
折点观察页主面板:在 RCS 曲线上标注手工折点

5.12.14 操作步骤五:运行阈值效应和 Piecewise 回归

如果 RCS 曲线提示明显弯曲,或者研究方案预先关注某个临床阈值,可以进入“阈值效应和 piecewise 回归”标签页。左侧提供三种分段方式:

  1. 设置折点数量,由 segmented 包自动寻找折点并进行 Piecewise 回归。适合探索性分析,但需要先指定折点数量,通常 1 到 2 个折点已经足够。
  2. 设置折点起始值,由 segmented 包从起始值附近迭代寻找折点。适合已经知道大致阈值范围,但希望软件进一步优化折点位置的情况。
  3. 人为指定折点精确值并进行传统 Piecewise 回归。适合折点来自既往文献、指南界值、临床经验或上一页肉眼判断的结果。

左侧还可以设置协变量、小数位数、P 值保留位数、Break-Points 保留位数,以及 Piecewise 图像宽度和高度。底部按钮用于生成或更新 Piecewise 结果。

Piecewise 左侧设置:自动寻点、起始值寻点和人为指定折点
Piecewise 左侧设置:自动寻点、起始值寻点和人为指定折点

右侧主面板会显示标准模型、分段模型、每个区间的 OR/HR/RR 或 beta、95% CI、P 值,以及似然比检验结果。

Piecewise 结果主面板:分段效应量、P 值、似然比检验和分段图像
Piecewise 结果主面板:分段效应量、P 值、似然比检验和分段图像

如果自动寻点和人为指定折点得到的点估计接近,但 95% CI 或 P 值不同,不一定是软件错误。自动寻点会把折点位置的不确定性纳入估计过程,而人为指定折点把折点当作已经确定的数值处理,两者的标准误可能不同。

5.12.15 操作步骤六:查看 R 源代码和原始输出

新版界面不再把“查看 R 源代码和原始输出”作为顶部单独标签页,而是放在对应结果页内部:

  1. RCS 建模页面内部有“查看 R 源代码和原始输出”,只展示 RCS 建模、预测数据和 RCS 绘图相关代码。
  2. Piecewise 回归页面内部也有“查看 R 源代码和原始输出”,只展示 Piecewise 回归、分段效应量和表格数字计算相关代码。

这样做的好处是 RCS 和 Piecewise 两段代码不会混在一起。复现时先下载配套的 dt.RData,再运行当前页面提供的 R 源代码。注意:生成源代码后不要再修改前面菜单里的模型设置,否则页面结果和源代码可能不一致。

RCS 建模源码主面板如下:

RCS 建模源代码和原始输出
RCS 建模源代码和原始输出

Piecewise 源码主面板会展示从斜率到表格数字的计算逻辑。自动寻点时通常先用 segmented::slope() 获得分段斜率和置信区间,再把 log 尺度斜率转换为 OR/HR/RR;人为指定折点时,则通过截断变量和协方差矩阵计算左右两段斜率、95% CI 和 P 值。

Piecewise 回归源代码和原始输出
Piecewise 回归源代码和原始输出

5.12.16 操作步骤七:下载 Word 报告

完成 RCS 建模或 Piecewise 回归后,可以进入“下载 word 报告”导出文档。报告会整理模型设置、RCS 曲线、主要统计结果、图像描述和可用于论文初稿的文字。

本模块的图像描述已经按 Word 友好的纯文本方式生成,不再使用 **加粗** 这类 Markdown 标记,避免在 Word 中显示为原始符号。下载后仍建议人工复核报告中的研究对象、变量名称、临床解释和统计术语,尤其是事件水平、参考点和非线性 P 值。

下载 Word 报告页面:RCS 报告和 Piecewise 报告分别下载
下载 Word 报告页面:RCS 报告和 Piecewise 报告分别下载

5.12.17 如何解读 RCS 图像

解读 RCS 图像时,不要只盯着某一个点。建议按下面顺序写:

  1. 先说横轴和纵轴:例如“横轴为 Age,纵轴为相对于参考年龄的 log(OR)”。
  2. 再说曲线形状:近似直线、U 型、倒 U 型、J 型、L 型,还是先下降后上升。
  3. 再说参考线:log 尺度下 0 表示与参考点风险相同;OR/HR/RR 原值尺度下 1 表示与参考点风险相同。
  4. 再看置信区间:置信区间越宽,说明该范围数据越少或估计越不稳定。
  5. 再看直方图:确认曲线转折处是否有足够样本支持,不要过度解释数据很少的两端。
  6. 最后报告 P-overallP-nonlinear

示例解读:

RCS 曲线显示,Age 与结局之间呈先下降后上升的趋势,曲线最低点大约位于 60 岁附近,整体形状接近 U 型。然而 P-overall = 0.306,提示 Age 与结局的总体关联证据不足;P-nonlinear = 0.658,提示没有明确非线性证据。因此该曲线更适合描述性展示,不宜过度强调阈值效应。

如果纵轴是 log(OR)、log(HR) 或 log(RR),可以这样换算:

log 效应量 原值效应量 解读
0 1.00 与参考点相同
0.69 2.00 大约是参考点的 2 倍
-0.69 0.50 大约是参考点的一半

论文结果部分可以先报告 P 值,再描述曲线趋势;讨论部分再结合临床意义解释可能机制。不要把曲线上肉眼看到的每个小波动都解释成真实生物学现象,尤其是直方图很低或置信区间很宽的区域。

5.12.18 如何解读 Piecewise 结果

Piecewise 表格通常包含四层信息:

  1. 标准模型:假设整个横轴范围内只有一条线性斜率。
  2. 分段模型:在折点前后分别估计斜率或效应量。
  3. Break-Point:折点位置。如果是 segmented 自动寻找,这是模型估计出来的;如果是人为指定,这是用户输入的固定值。
  4. Log likelihood ratio:比较分段模型和标准线性模型是否有明显改进。

以示例结果为例:

含义 示例解释
Fitting by standard Logistic regression model 不分段时,Age 每增加 1 单位的总体 OR OR = 1.02,P = 0.088,整体线性趋势未达到常规显著性
Fitting by piecewise Logistic regression model 分段模型标题,括号中给出折点 Break-Point = 82.307
Age < 82.307 折点左侧每增加 1 单位 Age 的 OR OR = 1.01,P = 0.598
Age >= 82.307 折点右侧每增加 1 单位 Age 的 OR OR = 1.47,P = 0.362
Log likelihood ratio 分段模型相对标准模型的改进检验 P = 0.106,提示分段模型没有显著优于标准模型

写论文时可以这样表述:

Piecewise logistic regression identified a breakpoint at 82.3 years. Below the breakpoint, each 1-year increase in age was not significantly associated with the outcome (OR 1.01, 95% CI 0.98-1.03, P = 0.598). Above the breakpoint, the estimated OR was 1.47 (95% CI 0.64-3.35, P = 0.362). The likelihood ratio test did not show a statistically significant improvement over the standard linear model (P = 0.106).

如果折点来自自动估计,建议把它称为“estimated breakpoint”;如果折点来自指南或文献,应写明“a prespecified breakpoint”。这两类分析的统计含义不同,不要混在一起解释。

5.12.19 常见问题

  1. 为什么默认显示 log(OR)、log(HR) 或 log(RR)?
    因为 log 效应量以 0 为参考线,视觉上更均衡。OR = 0.5 和 OR = 2 在 log 尺度上距离参考线相同方向相反,更适合观察曲线形状。需要面向临床读者解释具体倍数时,可以切换为 OR/HR/RR 原值。

  2. P-nonlinear 不显著,还要做 Piecewise 吗?
    一般不建议。除非有非常明确的临床先验阈值,否则 P-nonlinear 不显著时,通常报告常规回归或 RCS 曲线即可。

  3. 直方图高度应该怎么调?
    默认值会让最高直方条接近 Y 轴高度的 70%,多数情况下不需要改。如果直方图遮挡曲线,就降低高度;如果直方图太低看不清分布,就适当升高。条数默认 25,只有在分布太粗或太碎时才需要调整。

  4. 曲线两端置信区间特别宽怎么办?
    这通常说明两端数据少,估计不稳定。论文描述时不要过度解读边缘区域,更应关注样本分布较集中的范围。

  5. 为什么事件水平要特别核对?
    二分类模型中,被选中的事件水平会编码为 1。若把“未发生”误选为事件,OR/RR 的方向会反过来,图像和报告都会误导读者。因此设置结局变量后,应立即核对事件水平。

  6. 参考点可以随便改吗?
    可以改,但应有理由。常用中位数作为参考点,因为它位于样本分布中心,估计更稳定。如果临床上有公认阈值,也可以把参考点设在该位置。不要为了让图看起来“显著”而随意移动参考点。

  7. RCS 图上的 Knot 是折点吗?
    不是。Knot 是样条基函数连接和改变弯曲灵活性的支撑点,不等同于临床阈值或 Piecewise 回归的 Break-Point。RCS 用于描述平滑非线性,Piecewise 用于估计某个折点前后的斜率差异。

5.12.20 参考文献和 R 包说明

  1. Harrell FE Jr. Regression Modeling Strategies. Springer; 2015. 课程和在线说明见 Regression Modeling Strategies course notes
  2. rms 包官方说明:rcs()Predict()anova.rms()datadist() 等函数用于非线性建模、预测和效应展示。参见 rms package documentationrms.transdatadist
  3. Hmisc::rcspline.eval() 是限制性立方样条设计矩阵的核心函数之一,可查看 Knot 自动选择、归一化和返回基函数矩阵的说明。参见 rcspline.eval documentation
  4. Desquilbet L, Mariotti F. Dose-response analyses using restricted cubic spline functions in public health research. Statistics in Medicine. 2010;29:1037-1057. PubMed: 20087875
  5. Durrleman S, Simon R. Flexible regression models with cubic splines. Statistics in Medicine. 1989;8:551-561. PubMed: 2657958
  6. Muggeo VMR. Estimating regression models with unknown break-points. Statistics in Medicine. 2003;22:3055-3071. PubMed: 12973787
  7. Muggeo VMR. segmented: An R Package to Fit Regression Models with Broken-Line Relationships. R News. 2008;8(1):20-25. PDF: R News article
  8. segmented 包官方说明:用于估计 breakpoints/change-points,支持 lmglm 等模型,并提供 slope()confint()davies.test() 等函数。参见 segmented package documentationsegmented() documentation
  9. Ulm K. A statistical method for assessing a threshold in epidemiological studies. Statistics in Medicine. 1991;10:341-349. PubMed: 2041996

5.13 广义相加模型 GAM

广义相加模型(Generalized Additive Models, GAM) 是一种灵活的统计建模方法,可以处理自变量和因变量之间的非线性关系。GAM 将回归问题扩展到更广泛的模型形式,不仅支持传统的线性回归,还能够使用平滑函数描述自变量与因变量之间的非线性关系。因此又被称为万能回归模型。

| | |—-| | | |

![](images/clipboard-574453451.png){width="700px"}

| | |—-| | Piecewise 线性回归 | Piecewise Cox 回归 | Piecewise Poisson 回归 | ======================================+======================================+======================================+ | | |

![](images/clipboard-2176782850.png){width="700px"}

5.13.1 GAM 的基本原理

  1. 平滑函数
    GAM 的核心思想是利用平滑函数(如样条函数)来拟合自变量与因变量之间的关系。与传统回归模型不同,GAM 可以灵活地捕捉自变量和因变量之间复杂的非线性关系。

  2. 回归与平滑的结合
    在 GAM 中,自变量与因变量的关系被分为线性部分和非线性部分。线性部分通常是固定效应,而非线性部分则通过平滑函数来建模。

  3. 灵活性和可解释性
    GAM 具有较高的灵活性,可以适应数据的非线性模式,同时保持模型的可解释性。通过选择合适的平滑函数和回归模型,GAM 适用于多种类型的数据分析任务。

  4. 选择合适的平滑函数
    在 GAM 中,可以选择不同的平滑函数。平滑函数的选择依赖于自变量的分布和数据的特性。

5.13.2 GAM 在医学科研中的应用及优势

  • 处理非线性关系
    许多医学研究中的数据呈现出非线性关系,例如血糖水平与疾病风险之间的关系。在这种情况下,GAM 能够通过平滑函数有效地捕捉这些非线性趋势。

  • 多因素回归中的非线性建模
    在多因素回归中,GAM 可以对自变量与因变量的关系进行灵活建模,特别是在存在多个因素时,能够更好地识别潜在的非线性关系。

  • 个体化医疗分析
    GAM 可以帮助临床研究人员在个体层面上识别关键的健康指标,从而为个体化医疗方案提供支持。

  • 灵活的模型设定
    GAM 允许用户根据数据的特性灵活选择平滑函数,避免了强假设的局限性。

5.13.3 举例说明

例 1:BMI 与心血管疾病风险

-   **研究背景**:在大量的队列研究中,体重指数(BMI)与心血管事件风险并非简单的线性正相关。有些人观察到当 BMI 过低时,风险同样升高,出现 U 型关系。
  • 方法:采用 GAM 在 Cox 回归模型中,将 BMI 作为连续变量引入,并设置合适的平滑函数进行分析。

  • 结果:发现,BMI ≈ 22 kg/m² 时心血管风险最低,过高或过低都增加事件发生率。

  • 意义:帮助临床人员确定 BMI 更精确的风险趋势范围。

例 2:血压与心脏疾病的关系

-   **研究背景**:血压水平与心脏疾病的关系被认为是非线性的,特别是高血压对心脏事件的风险影响较大。
  • 方法:采用 GAM 模型,在 Cox 回归分析中引入血压作为平滑自变量,并控制其他协变量。

  • 结果:结果表明,当血压升高至某个阈值时,风险显著增加,展示了血压与心脏疾病的非线性关系。

总结:GAM 对于有理由怀疑“自变量-结局”存在非线性关系的医学研究而言,是一项灵活且实用的方法。它能够帮助研究人员揭示和解释真实世界中复杂的非线性关系,并且在临床和流行病学的高分论文中得到了广泛应用。

5.13.4 准备数据

首先务必按照下面的格式准备数据(网站上可下载,下载后在此基础上修改):

下载csv样例数据(右击另存为)

打开如下图:

本样例数据的规则:

1.  一个患者一行(这是准备数据最重要的前提)。
  1. 每个患者准备两大类数据,影响因素变量和结局变量,影响因素和结局分别都可以有多个变量。

如图所示,hospital, treatment, age, age2, sex, obstruct, prfor, adhear, differ, extent 为影响因素(自变量),而blood, effect, status, time, occurrence在本例中是结局变量。

  1. 影响因素变量有两种,连续性变量(值是连续数据,它可以在变量值所属区间内任意进行取值,如年龄(岁)、血糖值、人的身高、智商等)以及分类变量(是说明事物类别的一个名称,其取值是分类数据。如”性别”就是一个分类变量,其变量值为”男”或”女”;“行业”也是一个分类变量,其变量值可以为”零售业”、“旅游业”、“汽车制造 业”等),在本例中 age是连续性变量(numeric), 其他的是分类变量(factor)。age单位为”岁”时为连续变量,而age2为年龄段分组,这时候为分类变量。

以上概念很重要,后面有一个页面专门设置连续变量和分类变量。

  1. 结局变量在本工具中分为几类:
  • 连续型结局变量

如本例中的blood(某血液检测指标)

  • 二分类结局变量

如本例中的effect(疗效)为二分类变量(Good,Bad)

  • 生存型结局变量

需要用两个变量组合来表示,如本例中的status和time。

status代表患者在研究结束时的状态,在本工具中只能取0和1两个数字,不要用字符文本,否则会出错。0 代表没观察到事件发生(如没死或者失访),1 代表观察到了事件发生(如已经死亡且录入了死亡日期)。

time代表从开始日期(开始日期的定义由你的研究目的决定,如随机对照研究往往取随机化入组的那一天为开始日期,而观察性研究可以取首次诊断日期或首次治疗日期等等根据研究目的而定)到结局日期的时间差。当status=1时,结局日期为发生事件(如死亡)的日期,当status=0时,结局日期为最后一次活着的日期(如研究结束日,或随后一次随访日)。

总之,time是一个数值型变量,您需要填入患者从开始到死亡或者随后一次随访时,一共活着的天数。如time为56,status为1时代表患者从开始到死亡活了56天;当time为56,status为0时代表患者没观察到死亡,从开始到最后一次随访,活了56天。

准备数据时,time填入一个非负的整数,status填入0或1,time和status都不能为空,每个患者都必须填入数字。time或status不确定(缺失)时,该患者最好不要放入本数据库。

  • 计数型结局变量

计数型的结局变量为一个非负的整数,如本例中occurrence,是急性发作次数,无法取负数,也不可能取小数。

  • 分数型结局变量

当结局变量为一个分数,如发病率、患病率、受精率等,结局包含一个分子和一个分母。如要研究全国各地疾病患病率的影响因素时,按照每个地区一行来准备数据,分子和分母设置成两个变量(列),如分子为患病人数,分母为地区人口数。

准备数据的规则是:分子和分母都是非负整数,不允许填入负数,也不允许填入小数,分子的数值不能大于分母。

5.13.5 进入模块

接下来我们进入模块,点击软件顶部菜单的“因果推断”,然后点击“广义相加模型 GAM (高分 SCI 神器,曲线回归首选模型,比 RCS 适用性更强)” 进入模块。

5.13.6 生成 GAM 曲线

点击上方第二个 Tab “生成广义相加模型曲线” 进入主功能界面。此界面分为 左右两大区域

  1. 左侧侧边栏(Sidebar):主要用于设置模型参数(如结局变量、协变量、结局类型等),以及图形的基本外观设置。

  2. 右侧主区域(Main Panel):展示 GAM 模型输出,并展示三种风格的 GAM 图像。

5.13.6.1 设置模型

  • 回归类型选择:选择回归类型如 Logistic 回归、Cox 回归等。
  • 结局变量选择:根据研究目标选择适合的结局变量。
  • 自变量与协变量选择:选择需要进行平滑处理的自变量及可能影响结果的协变量。

5.13.6.2 设置图像外观

  • 选择图像样式(基础版、华丽版等)。
  • 自定义颜色、坐标轴标题、字体大小等。

5.13.6.3 生成模型并查看图像

点击“生成/更新广义相加模型曲线”按钮,即可得到拟合的 GAM 曲线,并显示在右侧区域,支持多种格式的下载。

5.13.7 阈值效应和 piecewise 回归(第 4 个 Tab)

如果确有非线性,且对折点附近的转折效应感兴趣,我们通常会做 分段回归(Piecewise regression),以量化在不同区间的回归系数(OR/HR/RR/beta)。

  1. 点击进入“阈值效应和 piecewise 回归”:侧边栏将出现以下几个关键选项:
  • 方法选择
  1. segmented 包自动寻找折点
  • 设置一个或多个折点数量(npsi),系统会在给定数量下用迭代算法自动找最优位置;或者指定一个“起始值 psi”,让软件从该位置附近开始自动迭代定位折点。
  1. 人为指定折点
  • 直接输入要分段的所有折点值,软件就会对每个区间做线性回归。

  • 选择协变量:可与 GAM 分析时相同,也可自行更改。

  • 生成 Piecewise 回归结果:点击“生成/更新 piecewise 回归分析结果”后,右侧会显示分段后的各区间斜率及其 95% CI、P 值等。

  1. 结果解读
  • 系统输出一份表格:展示每个分段区间内,该连续自变量对结局的回归系数(或 OR、HR、RR)及统计显著性。

  • 还会给出一幅分段回归的可视化图:如果采用 segmented 包自动寻点,曲线上会以折线或分段斜率的方式显示;若是“手动指定折点”,则会显示分段后的拟合线。

提示:Piecewise 回归并不是简单地把数据按某个阈值拆分成两组后各自做单独回归,而是直接在同一个模型中通过截断函数(Truncated function)实现分段的线性拼接,因此在区间交界处保持连续,并能很好体现一条连续变量可能在不同区间中存在不同的风险趋势。

5.13.8 下载 word 报告(第 5 个 Tab)

在这里可一键导出 Word 文档,以便写论文或留档。下载之前需先完成前面 GAM 或 piecewise 回归的分析。文档包含以下内容:

  • Objective & Methods:关于本次 GAM 或 piecewise 分析的文字描述

  • Results:自动带入 GAM 模型结果、P 值、节点位置等

  • 图像:自动插入一张 GAM 曲线或分段回归示意图

请注意:

  • 下载后若用微软 Office 打开,排版能更好地保留;WPS 有时会有兼容问题。

  • 如果希望对报告中的文字进行修改或补充,可直接在 Word 中手动编辑。

5.13.9 查看 R 源代码和原始输出(第 6 个 Tab)

  1. 下载 dt.RData:先点击“下载源代码配套的数据集 dt”,之后在 RStudio 等环境中执行 load("dt.RData") 即可加载同样的数据集。

  2. 查看或下载 R 源代码:下方会显示两块黑底区域:

  • GAM 建模代码及输出:可复制到本地 R 运行。

  • Piecewise/segmented 代码及输出:同理。

  1. 二次验证:审稿人或课题组内成员如想复现结果,可直接在本地运行下载的 R 代码和数据。

5.13.10 下载报告与源代码

生成模型结果后,可以下载包含 GAM 分析、模型拟合表格、图像的 Word 报告,并获取 R 源代码以便复现分析结果。


通过以上步骤,您可以轻松生成符合 SCI 期刊要求的 GAM 图像及分析报告,帮助您在临床研究和流行病学研究中进行更精确的分析。

5.14 因果中介效应(mediation包,支持连续性/二分类/有序分类/生存资料)

因果中介分析 (Causal Mediation Analysis)

定义: 因果中介分析是一种统计方法,用于探索一个变量如何影响另一个变量的过程或机制。具体来说,它考察一个或多个中介变量是否在因变量和自变量之间起到中介作用,以及这种中介作用的大小。

原理: 在因果中介分析中,我们主要关心三个变量:自变量(X)、因变量(Y)和中介变量(M)。基本的思想是,自变量首先影响中介变量,然后中介变量再影响因变量。通过这种方法,我们可以分解自变量对因变量的总效应为两部分:直接效应和通过中介变量的间接效应。

使用场景

  1. 在心理学研究中,探索某种心理干预如何影响结果,并通过哪些心理机制产生这种影响。

  2. 在经济学中,研究某种政策如何影响经济增长,并通过哪些渠道实现。

  3. 在医学研究中,探索某种药物或治疗如何影响健康结果,并通过哪些生物机制起作用。

医学研究的例子: 假设我们想要研究某种药物是否可以通过降低血压来减少心脏病的风险。在这里,药物治疗是自变量(X),心脏病的风险是因变量(Y),而血压是中介变量(M)。通过因果中介分析,我们可以分析药物治疗对心脏病风险的直接效应和通过降低血压的间接效应。如果我们发现间接效应显著,这意味着药物确实可以通过降低血压来减少心脏病的风险。

总之,因果中介分析为我们提供了一种强大的工具,可以更深入地理解变量之间的关系和作用机制。

mediation包是R语言中的一个专门用于进行因果中介分析的包。它提供了一系列的函数和工具,使研究者能够轻松地进行中介效应的估计、检验和解释。本模块基于mediation包进行中介分析,并用Bootstrap的方法来估计中介效应的置信区间,这种方法对于非正态分布的数据特别有用。

mdiation包的框架(引自作者论文):

但是,mediation包原始输出的结果很粗糙,例如:

\

面对这个晦涩的结果,大多数人也蒙圈了,也不知道啥意思,折腾两天就放弃了。

而学术期刊上用medation包分析后投稿的表是这样的:

要怎么倒腾才能变成这样呢?需要强大的 R 编程能力才行。

不过,现在可以用 本软件 一键免编程直接生成这样的表格:

![](images/image-448896659.png){width="700px"}

5.14.1 准备数据

首先务必按照下面的格式准备数据(网站上可下载,下载后在此基础上修改):

下载csv样例数据(右击另存为)

打开如下图:

本样例数据的规则:

1.  一个患者一行(这是准备数据最重要的前提)。
  1. 每个患者准备两大类数据,影响因素变量和结局变量,影响因素和结局分别都可以有多个变量。

如图所示,hospital, treatment, age, age2, sex, obstruct, prfor, adhear, differ, extent 为影响因素(自变量),而blood, effect, status, time, occurrence在本例中是结局变量。

  1. 影响因素变量有两种,连续性变量(值是连续数据,它可以在变量值所属区间内任意进行取值,如年龄(岁)、血糖值、人的身高、智商等)以及分类变量(是说明事物类别的一个名称,其取值是分类数据。如”性别”就是一个分类变量,其变量值为”男”或”女”;“行业”也是一个分类变量,其变量值可以为”零售业”、“旅游业”、“汽车制造 业”等),在本例中 age是连续性变量(numeric), 其他的是分类变量(factor)。age单位为”岁”时为连续变量,而age2为年龄段分组,这时候为分类变量。

以上概念很重要,后面有一个页面专门设置连续变量和分类变量。

  1. 结局变量在本工具中分为几类:
  • 连续型结局变量

如本例中的blood(某血液检测指标)

  • 二分类结局变量

如本例中的effect(疗效)为二分类变量(Good,Bad)

  • 生存型结局变量

需要用两个变量组合来表示,如本例中的status和time。

status代表患者在研究结束时的状态,在本工具中只能取0和1两个数字,不要用字符文本,否则会出错。0 代表没观察到事件发生(如没死或者失访),1 代表观察到了事件发生(如已经死亡且录入了死亡日期)。

time代表从开始日期(开始日期的定义由你的研究目的决定,如随机对照研究往往取随机化入组的那一天为开始日期,而观察性研究可以取首次诊断日期或首次治疗日期等等根据研究目的而定)到结局日期的时间差。当status=1时,结局日期为发生事件(如死亡)的日期,当status=0时,结局日期为最后一次活着的日期(如研究结束日,或随后一次随访日)。

总之,time是一个数值型变量,您需要填入患者从开始到死亡或者随后一次随访时,一共活着的天数。如time为56,status为1时代表患者从开始到死亡活了56天;当time为56,status为0时代表患者没观察到死亡,从开始到最后一次随访,活了56天。

准备数据时,time填入一个非负的整数,status填入0或1,time和status都不能为空,每个患者都必须填入数字。time或status不确定(缺失)时,该患者最好不要放入本数据库。

  • 计数型结局变量

计数型的结局变量为一个非负的整数,如本例中occurrence,是急性发作次数,无法取负数,也不可能取小数。

  • 分数型结局变量

当结局变量为一个分数,如发病率、患病率、受精率等,结局包含一个分子和一个分母。如要研究全国各地疾病患病率的影响因素时,按照每个地区一行来准备数据,分子和分母设置成两个变量(列),如分子为患病人数,分母为地区人口数。

准备数据的规则是:分子和分母都是非负整数,不允许填入负数,也不允许填入小数,分子的数值不能大于分母。

5.14.2 进入模块

接下来我们进入模块,点击软件顶部菜单的“因果推断”,然后点击“因果中介效应(mediation包,支持连续性/二分类/有序分类/生存资料)” 进入模块。

本软件 做因果中介分析的界面如下:

5.14.3 分析步骤

1. 选择结局变量的类型

-   在主界面上,您将首先看到一个名为"选择结局变量的类型"的选项。
  • 您可以选择以下三种类型之一:

  • 二分类变量(此处用 Probit 回归)

  • 连续性变量(线性回归)

  • 生存变量(用Survreg,默认weibull分布)


**2. 选择结局变量/应变量**

-   根据您在第一步选择的结局变量类型,软件将为您提供相应的变量选择。
  • 请从下拉菜单中选择一个适当的结局变量。

**3. 选择解释变量/自变量的类型**

-   在"要研究的解释变量/自变量的类型"部分,选择您的自变量类型。
  • 您可以选择二分类变量或连续性变量。

**4. 选择解释变量/自变量**

-   根据您选择的自变量类型,从下拉菜单中选择一个适当的自变量。

**5. 选择中介变量的类型**

-   在"选择中介变量(mediator)的类型"部分,选择您的中介变量类型。
  • 您可以选择二分类变量或连续性变量。

**6. 选择中介变量**

-   根据您选择的中介变量类型,从下拉菜单中选择一个适当的中介变量。

**7. 选择其他协变量(可选)**

-   如果您希望在分析中考虑其他协变量,请从提供的列表中选择。
  • 您可以选择多个协变量。

**8. 调整回归系数和P值的小数位数**

-   使用滑块调整回归系数和P值的小数位数,以满足您的需求。

**9. 输入随机种子数**

-   为了确保分析的再现性,请输入一个随机种子数。
  • 记录这个数字,以便将来再次使用。

**10. 开始中介分析**

-   确保您已经完成了所有必要的选择和输入。
  • 点击”开始中介分析”按钮,软件将开始进行中介分析,并为您提供结果。

生成word文档,包括目的,方法,结果和结论等都写好了:

![](images/image-7528174.png){width="700px"}