
1. 中介效应分析的核心概念中介效应分析是社会科学和医学研究中常用的统计方法它帮助我们理解自变量如何通过中介变量影响因变量。想象一下你正在研究一种新药对患者康复的影响。药物自变量可能通过减轻症状中介变量来促进康复因变量这就是典型的中介效应场景。在Stata中medsens包是由著名统计学家Imai团队开发的工具它不仅能够进行基础的中介效应分析还能评估结果的稳健性。我刚开始接触这个包时最让我惊喜的是它的敏感性分析功能。很多研究者做完中介分析就结束了但实际上未观测到的混杂变量可能会影响我们的结论。medsens包通过rho参数帮助我们量化这种潜在影响。与常见的sgmediation包相比medsens包有三大优势首先它提供了完整的敏感性分析框架其次它与R语言的mediation包同源方法学基础扎实最后它已经发表在Stata官方期刊上经过了严格的学术检验。我在实际分析中发现很多审稿人特别看重敏感性分析部分这往往是一篇论文能否通过评审的关键。2. 安装与数据准备2.1 安装medsens包安装medsens包非常简单但新手可能会遇到一些小问题。我建议直接在Stata命令窗口输入net install st0243, from(http://www.stata-journal.com/software/sj14-4)这个命令会从Stata期刊官网下载最新版本。如果遇到网络问题可以尝试更换下载源。安装完成后用help medeff和help medsens检查是否成功这两个命令会显示包的帮助文档。记得每次更新Stata后重新安装一次我遇到过因为版本不兼容导致的分析错误。另外建议同时安装estout包它可以帮助我们更好地整理和输出结果ssc install estout2.2 数据准备与变量选择数据分析的质量很大程度上取决于数据准备。我们以经典的移民数据为例可以在公众号回复移民数据获取。这个数据集包含Emo焦虑评分连续变量treat治疗分组0对照组1实验组cong_mesg是否发送移民信息二分类结果变量其他协变量年龄、教育程度、性别、收入等在开始分析前一定要做好数据清洗// 检查缺失值 misstable summarize // 处理极端值 sum emo, detail // 变量描述统计 tabstat emo cong_mesg treat, stat(mean sd min max n)选择变量时要特别注意中介变量的理论合理性。在我的一个心理学项目中最初选择了错误的mediator导致结果无法解释。后来通过文献回顾和专家咨询才找到合适的中介变量。记住统计显著性不等于理论合理性。3. 基础中介效应分析3.1 medeff命令详解medeff是medsens包的核心命令它的语法结构非常灵活medeff (model1) (model2) [, options]其中model1是中介变量模型model2是结果变量模型。在我们的例子中medeff (regress emo treat age) (logit cong_mesg treat emo age), /// treat(treat) mediate(emo) sims(1000) seed(1234)这个命令做了三件事建立emo对treat和age的线性回归建立cong_mesg对treat、emo和age的logistic回归通过1000次模拟计算中介效应关键选项解释treat()指定处理变量mediate()指定中介变量sims()设置模拟次数建议至少1000次seed()设定随机种子保证结果可重复3.2 结果解读技巧运行后会输出三部分结果总效应treat对cong_mesg的总影响直接效应控制mediator后treat的剩余效应中介效应通过emo传递的间接效应我刚开始看结果时容易混淆几个效应值。一个实用技巧是画路径图总效应 直接效应 中介效应如果直接效应的置信区间包含0说明大部分影响是通过中介变量传递的就像我们的例子中所示。特别注意比例中介效应Proportion Mediated它表示中介效应占总效应的比例。在我的数据分析中这个指标经常被审稿人问及。计算方法是比例中介效应 中介效应 / 总效应4. 敏感性分析实战4.1 medsens命令深度解析基础中介分析只是开始敏感性分析才是medsens包的精华所在。命令格式与medeff类似medsens (regress emo treat age) (logit cong_mesg treat emo age), /// med(emo) treat(treat) sims(1000) level(95) graph这个命令会生成两个重要输出敏感性参数rho的临界值漂亮的敏感性分析图rho表示未观测混杂变量与中介变量和结果变量的相关性。我常把它比作研究结论的抗震等级——rho值越大说明结论越稳健。在心理学研究中rho0.3通常被认为是可以接受的门槛。4.2 图形解读与定制默认图形包含三条关键信息中介效应随rho的变化曲线置信区间带使中介效应为0的rho临界值红色参考线我经常需要调整图形以满足期刊要求。比如修改颜色和坐标轴twoway rarea _med_updelta0 _med_lodelta0 _med_rho, bcolor(gs14) || /// line _med_delta0 _med_rho, lcolor(black) lwidth(1.5) ||, /// ylabel(-0.2(0.1)0.2, angle(0)) ytitle(中介效应值) /// xtitle(敏感性参数ρ) legend(off) title(中介效应敏感性分析)保存图形时建议同时保存Stata格式和出版质量格式graph export sensitivity.emf, replace graph save sensitivity.gph, replace5. 高级应用与常见问题5.1 处理不同类型变量medsens包可以处理各种变量组合连续中介变量连续结果变量都用regress连续中介变量二分类结果变量regress logit二分类中介变量连续结果变量logit regress二分类中介变量二分类结果变量都用logit在我的一个医学研究中遇到了生存时间数据。这时需要使用stset声明生存时间然后用stcox代替logitstset time, failure(dead) medeff (regress biomarker treatment) (stcox treatment biomarker), /// treat(treatment) mediate(biomarker) sims(1000)5.2 常见错误与解决方案收敛问题增加sims次数到5000或10000内存不足关闭其他程序或使用set mem命令图形显示异常更新Stata到最新版本结果不稳定检查种子设置确保结果可重复我遇到过最棘手的问题是中介效应估计值方向与理论预期相反。经过排查发现是编码问题——将对照组和实验组编码颠倒了。所以一定要tab treat, nolabel检查编码是否正确。6. 完整分析报告撰写建议一份完整的中介效应分析报告应包含理论模型图示描述性统计表格中介效应分析结果敏感性分析图表稳健性检验如不同模型设定使用esttab可以快速生成出版级表格eststo m1: regress emo treat age eststo m2: logit cong_mesg treat emo age esttab m1 m2 using results.rtf, replace /// b(3) se(3) star(* 0.05 ** 0.01) /// title(回归分析结果) mtitles(模型1(中介) 模型2(结果))在结果解释部分我通常会这样组织 敏感性分析显示只有当未观测混杂变量与中介变量和结果变量的相关性ρ超过0.45时见图2中介效应才会变得不显著。考虑到既往研究发现常见混杂变量的ρ值通常在0.2-0.3之间本研究的中介效应结果具有较好的稳健性。7. 扩展应用与最新进展近年来中介效应分析有几个值得关注的发展多重中介模型可以同时考察多个中介变量的作用纵向中介分析处理时间序列数据异质性分析考察中介效应在不同亚组中的差异虽然medsens包目前不支持这些高级功能但可以结合其他命令实现。例如用sem命令做多重中介sem (emo - treat age)(cong_mesg - treat emo age), /// vce(robust) method(mlmv)在完成分析后我习惯用以下命令清理工作空间并保存日志clear all log close _all log using mediation.log, replace text最后提醒一点统计方法再高级也不能替代理论思考。在我的审稿经历中经常看到精美的分析背后是薄弱的概念模型。建议在运行任何命令前先用纸笔画出自变量、中介变量和因变量的理论关系图并与领域专家讨论模型的合理性。