在Stata中使用svy前缀比较两变量均值(不使用ttest)
复刻Stata带权重的独立样本t检验结果
问题描述
我在处理调查数据时需要比较两个变量的均值,由于是调查数据必须应用权重,必须使用svy前缀,因此无法直接依赖Stata的ttest命令,需要复刻以下两个命令的结果:
ttest bcg_vaccinated == chc_bcg_vaccinated_2, unpaired ttest bcg_vaccinated == chc_bcg_vaccinated_2
变量说明:
bcg_vaccinated:自我报告的BCG疫苗接种状态chc_bcg_vaccinated_2:通过儿童健康卡核实的BCG接种状态(缺失值代表儿童无健康卡,0=未接种,1=已接种)
两个变量的非缺失观测数不同,配对t检验的解决方案已找到:生成差值变量后做回归,仅保留两变量均非缺失的观测,代码如下:
gen test_diff = bcg_vaccinated - chc_bcg_vaccinated_2 regress test_diff
但无法实现第一个命令的全样本独立样本均值比较,求解决方法。
示例数据
clear input byte bcg_vaccinated float chc_bcg_vaccinated_2 0 . 1 0 1 1 1 1 1 0 0 . 1 1 1 1 1 1 1 0 0 . 1 1 1 1 0 . 1 1 1 1 1 0 0 . 1 0 1 0 1 0 0 . 0 . 1 1 0 .
解决方案
要复刻ttest ..., unpaired的全样本均值比较(支持svy权重),可以通过以下两种方法实现:
方法1:转换为长格式后用svy: mean+检验
* 生成唯一观测标识 gen id = _n * 转换为长格式,保留所有非缺失观测 reshape long _, i(id) j(var_type) string rename _ bcg_status * 给分组变量添加标签,区分两个原始变量 label define var_type 1 "bcg_vaccinated" 2 "chc_bcg_vaccinated_2" label values var_type var_type * 带权重计算两组均值 svy: mean bcg_status, over(var_type) * 检验两组均值是否相等(对应unpaired ttest的核心检验) test [bcg_status]var_type=1 = [bcg_status]var_type=2
方法2:构造虚拟变量用回归实现
无需转换数据格式,直接合并变量并构造分组标识:
* 生成合并后的接种状态变量和分组标识 gen bcg_combined = . gen is_card_verified = 0 replace bcg_combined = bcg_vaccinated if missing(chc_bcg_vaccinated_2) replace is_card_verified = 1 if !missing(chc_bcg_vaccinated_2) replace bcg_combined = chc_bcg_vaccinated_2 if is_card_verified == 1 * 带权重回归,分组变量系数反映两组均值差异 svy: regress bcg_combined i.is_card_verified * 检验两组均值是否相等(即分组变量系数是否为0) testparm i.is_card_verified
两种方法都能保留所有非缺失观测,完美复刻ttest ..., unpaired的结果,且支持svy前缀应用调查权重。
内容的提问来源于stack exchange,提问作者Arkadeep Bandyopadhyay
相关产品推荐
相关产品推荐

