如何在Stata中创建非互斥分类变量并完成风险回归分析
解决Stata中既往病史组合变量赋值覆盖问题
方案1:创建包含所有疾病组合的互斥分类变量
你的原始代码出现赋值覆盖,是因为未排除同时患有其他疾病的情况。要生成所有8种可能的疾病组合(无疾病、仅高血压、仅哮喘、仅糖尿病、高血压+哮喘、高血压+糖尿病、哮喘+糖尿病、三种疾病都有),可采用以下两种方式:
方式一:多条件判断赋值
gen disease_group = 0 // 0=无任何疾病 replace disease_group = 1 if hypertension==1 & asthma==0 & diabetes==0 // 仅高血压 replace disease_group = 2 if hypertension==0 & asthma==1 & diabetes==0 // 仅哮喘 replace disease_group = 3 if hypertension==0 & asthma==0 & diabetes==1 // 仅糖尿病 replace disease_group = 4 if hypertension==1 & asthma==1 & diabetes==0 // 高血压+哮喘 replace disease_group = 5 if hypertension==1 & asthma==0 & diabetes==1 // 高血压+糖尿病 replace disease_group = 6 if hypertension==0 & asthma==1 & diabetes==1 // 哮喘+糖尿病 replace disease_group = 7 if hypertension==1 & asthma==1 & diabetes==1 // 三种疾病都有 // 给分组添加标签,方便后续分析查看 label define group_label 0 "无疾病" 1 "仅高血压" 2 "仅哮喘" 3 "仅糖尿病" 4 "高血压+哮喘" 5 "高血压+糖尿病" 6 "哮喘+糖尿病" 7 "三种疾病" label values disease_group group_label
方式二:编码计算生成(更简洁)
利用二进制编码思路,给每个疾病分配权重,直接计算唯一分组值:
gen disease_group = hypertension*4 + asthma*2 + diabetes*1 // 此时0=无疾病,1=仅糖尿病,2=仅哮喘,3=哮喘+糖尿病,4=仅高血压,5=高血压+糖尿病,6=高血压+哮喘,7=三种疾病 // 添加标签 label define group_label 0 "无疾病" 1 "仅糖尿病" 2 "仅哮喘" 3 "哮喘+糖尿病" 4 "仅高血压" 5 "高血压+糖尿病" 6 "哮喘+糖尿病" 7 "三种疾病" label values disease_group group_label
方案2:直接用多变量回归计算单疾病风险比(无需组合变量)
如果你的目标是像表格中那样,分别计算每种疾病的风险比(调整其他疾病影响),无需创建组合变量,直接将三个二分类变量纳入logistic回归即可,以无疾病(三个变量均为0)为参考组:
// 假设不良反应变量为binary型:adverse(1=出现,0=未出现) logistic adverse hypertension asthma diabetes, or
回归结果中,每个疾病变量的OR值就是该疾病相对于无疾病人群的风险比(已调整另外两种疾病的影响)。
内容的提问来源于stack exchange,提问作者Becky
相关产品推荐
相关产品推荐

