Stata中runmlwin拟合多水平模型后使用pwcompare两两比较的实现方法
Stata中runmlwin拟合带交互项多水平模型后实现两两比较的方法
pwcompare是Stata为内置多水平模型命令(如melogit)设计的后估计命令,runmlwin的默认返回值结构和官方命令不兼容,因此直接调用会报错。
你可以通过以下两种方案实现两两比较:
方案1:使用lincom手动构造对比(优先推荐,兼容性最好)
lincom可以直接调用runmlwin返回的系数矩阵e(b)和方差协方差矩阵e(V),自动计算对比的标准误、置信区间和p值,不需要手动推导方差,不管是固定效应还是带随机截距的多水平模型都适用。
示例代码(以你提到的(urban#1) vs (urban#0)对比为例):
* 第一步:先拟合runmlwin模型,确保收敛 runmlwin outcome i.urban##i.var2 cons, /// level2(lev2: cons) level1(_n:) nopause or /// discrete(distribution(binomial) link(logit) denominator(cons)) * 第二步:查看系数名,确认交互项的命名规则,避免拼写错误 mat list e(b) * 第三步:构造对比 * 例1:计算urban=1分组下,var2=1相对于var2=0的效应 lincom 1.var2 + 1.urban#1.var2, or * 例2:计算urban=0分组下,var2=1相对于var2=0的效应 lincom 1.var2, or * 例3:直接计算两个分组的效应差(即urban=1组var2效应 - urban=0组var2效应) lincom 1.urban#1.var2, or
方案2:修改返回值类适配pwcompare
如果需要直接使用pwcompare的批量对比功能,可以手动修改runmlwin的返回命令标识,让Stata将其识别为内置的melogit模型,即可正常调用margins和pwcompare:
* 跑完runmlwin模型后执行 ereturn local cmd "melogit" * 计算各组边际效应 margins urban#var2, atmeans * 调用pwcompare做两两比较 pwcompare urban#var2, or pveffects
注意:该方法为兼容取巧方案,部分复杂模型、复杂对比可能存在适配问题,优先使用方案1。
注意事项
- 执行对比前请确认
runmlwin模型正常收敛,方差协方差矩阵e(V)为正定矩阵,否则标准误计算会出错 - 构造对比前可通过
coeflist命令查看所有系数的准确名称,避免lincom中变量名拼写错误
内容的提问来源于stack exchange,提问作者user2704338
相关产品推荐
相关产品推荐

