You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Stata使用mixed命令时如何仅分析有完整重复测量的观测样本

Stata纵向完整样本筛选与mixed模型分析操作

一、样本筛选逻辑

你的数据为长格式结构,筛选核心是按「个体+具体结局指标」的配对维度判断完整性,不要直接按个体ID全局删除——否则会出现某个体A指标缺失、B指标完整,但B指标的有效数据被误删的问题。
筛选规则为:对每一个结局指标,仅保留同时存在time=1、time=2两个时间点非缺失测量值的个体对应数据。比如你提到的id=2的抑郁指标time=2缺失,那id=2的抑郁相关观测会被排除,但如果id=2的其他指标两个时间点数据完整,其他指标的分析依然会保留该个体的对应数据。

二、样本筛选实现代码

* 1. 按「个体ID+结局指标」分组,统计每个分组下非缺失的测量值数量
bysort id outcome: egen nonmiss_count = count(outcome_value)
* 2. 生成纳入标记:某个体某结局两个时间点都有非缺失值时标记为1,否则标记为缺失
gen analysis_sample = (nonmiss_count == 2)

代码说明:count()函数会自动忽略缺失值,当同一个体同一结局下统计到2个非缺失值时,就代表两个观测期数据完整,符合纳入要求。
如果需要直接生成分析用的精简数据集,可追加命令:

keep if analysis_sample == 1

如果不想修改原始数据,后续分析时直接加if analysis_sample == 1的筛选条件即可,灵活度更高。

三、mixed模型分析操作

你的研究目标是比较不同组的结局指标随时间的变化差异,核心是检验group×time的交互效应,模型需要纳入个体层面的随机截距,适配重复测量的非独立性。

  • 单个结局指标分析示例(以抑郁depression为例):
* 拟合混合效应模型,##表示同时纳入主效应和交互项
mixed outcome_value i.group##i.time if analysis_sample == 1 & outcome == "depression" || id: , reml
* 输出各组各时间点的调整后边际均值,用于解读变化趋势
margins group#time
* 可直接绘制趋势图直观展示组间变化差异
marginsplot

模型系数解读:交互项的系数代表干预组相对对照组,从基线到随访的结局变化幅度差值,是组间变化差异的核心估计值。

  • 批量分析所有结局指标:
    如果需要一次性输出所有结局的模型结果,不用逐个修改结局筛选条件,可通过循环实现:
* 提取数据集中所有结局指标的取值存入宏
levelsof outcome, local(all_outcomes)
* 循环逐个拟合模型并输出结果
foreach out of local all_outcomes {
    di as text "==================== 结局:`out' 分析结果 ===================="
    mixed outcome_value i.group##i.time if analysis_sample == 1 & outcome == "`out'" || id: , reml
    di _newline(3)
}

注意:运行模型前请确认time变量的编码为两个离散数值(比如0=基线/1=随访,或1=第一次观测/2=第二次观测),如果是字符串格式需要先转为数值编码,否则i.time的虚拟变量生成会出错。

内容的提问来源于stack exchange,提问作者statahelp22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 13:36:17