Stata中如何存储混合模型各学生的随机斜率与随机截距
提取混合模型中个体的随机截距与斜率
问题背景
用户有如下面板数据:
STUDENT TIME SCORE 1 1 9 1 2 11 1 3 7 2 1 8 2 2 6 2 3 14 2 4 11 3 1 14 3 2 10 3 3 9 4 1 14 4 2 6
已执行混合模型命令:
mixed SCORE || STUDENT:TIME
需要为每个STUDENT提取对应的随机截距(RANDOMINTERCEPT)和随机斜率(RANDOMSLOPE),生成仅包含这两个字段的个体级数据集。
解决方案
方法1:用predict提取后汇总
运行完mixed命令后,直接用predict提取每个观测的随机效应,再按学生分组汇总:
// 提取随机截距(对应模型中STUDENT组的截距项) predict random_intercept, reffects level(1) // 提取随机斜率(对应STUDENT组中TIME的随机效应) predict random_slope, reffects level(1) eq(STUDENT:TIME) // 按学生分组,保留唯一的截距和斜率 collapse (first) random_intercept random_slope, by(STUDENT)
执行后,当前数据集就只有4行(对应4个学生),包含STUDENT、random_intercept、random_slope三个变量。
方法2:用ranef直接导出随机效应数据集
ranef命令可以一步生成包含所有个体随机效应的数据集,操作更简洁:
// 先运行混合模型 mixed SCORE || STUDENT:TIME // 导出随机效应到当前数据集 ranef, post // 重命名变量为目标名称 rename _re1 random_intercept rename _re2 random_slope // 只保留需要的变量 keep STUDENT random_intercept random_slope
这个方法会直接生成个体级的结果数据集,无需额外汇总步骤。
两种方法得到的结果完全一致,可根据个人习惯选择。
内容的提问来源于stack exchange,提问作者bvowe
相关产品推荐
相关产品推荐

