标化率(standardized rate),是流行病学中常见的一个指标。当几个组直接比较组间的粗率(crude rate)可能会得到错误结论,因为组间的年龄、性别等变量构成不同带来混杂偏倚,此时严格来说需要对粗率进行标化后再比较。例如,ABC3组,A组死亡率10%,B组死亡率30%,粗率B>A。但是A和B的年龄构成不同,年龄常常是个混杂因素。A组年轻人居多,而B组老年居多权重大,从而导致了B组死亡率虚高,此时就需要进行年龄标化死亡率比较。简单来说,标化率可以看作是处理混杂因素的一种直观表现方式,当然也可以用多因素分析、分层分析等。同理也可以理解“adjust”,标化也是校正的一个特例,标化只能是分类变量。
标化率中心思想:利用某一指定的标准人口构成,消除不同地区在人口构成指标(常见年龄、性别)方面的差别,即计算按标准人口构成校准后的总率。标准人口应该选择有代表性的、较稳定的、数量较大的人群。标化率两种方法,直接法和间接法。直接法,根据一个标准人口(如全国、全省人口或合并人口等)构成,重新计算各组的预期率,从而得到标准化率。标准人口常见选择全世界、全国、全省的人口为标准人口,时间也最好与被标化资料一致或接近。例如,常用2010、2020中国人口普查人口构成比。间接法是根据标准患病率(或死亡率、发病率等)及各组的人口构成来计算预期率,从而得到标准化率。标化法具有不同研究间可比性。标化适用于需要平衡的混杂因素较少且为分类变量,常见年龄性别,并且可以获得一个“标准分布”时选择标化法。标化法得出的“标化率”通常可用于与其他研究结果的比较,这也是四次全国高血压调查及其他诸多研究通常报告以中国人口普查数据做标准人口的标化率的原因。
表1
率的校正。校正通常在统计模型中进行,如在Logistic 回归模型,广义线性模型,混合效应模型等统计模型中调整多个因素,依据模型来估算我们需要的率,从而得到经多因素校正的率。如logistic回归 。率校正法一般不推荐。但是当需要平衡的混杂因素较多,或无法获得“标准分布”数据时,此时又想在研究内部不同特征人群健康结局的比较,只能采用模型校正法。率校正法不适于外推与其他研究结果的率比较。
本案例用中国2015年CNSSPP卒中调查数据,按照地理位置分为7大区。本案例采用直接法,中国2020人口普查与2010人口普查全人群年龄段人口数,见表2。
7大区中1区,拟直接法参照2010中国人口标化的卒中标化患病率,R与excel过程如下。SAS和SPSS做标化比较蠢,不推荐了。
标准人口构成比依据本研究年龄组设置分组,40-,50-,60-,70- 4组。对应2010标准人口构成比如下图。
① 方法1套入自行编码excel公式中,如下图。紫色和蓝色及年龄组更改,标化率随之更改。
1区卒中粗患病率为2.86%,按照2010年普查人口标化后的卒中标化患病率率为2.46%, 同时可计算标化率95%CI。计算法1根据https://rpubs.com/bpoulin-CUNY/321735,SE=1.1/10万,95%CI与R不一致,计算法2基于bootstrap也不一致,因为R是基于gamma分布。
② 方法2 R软件,代码如下
#xlsx不会乱码
pacman::p_load(tidyverse,epitools,xlsx)
setwd("D:/统计/高级统计/小聂-实战医学统计-心研所课件/程序.sav+sas/标化率")
# ---------①直接法 读取xlsx文件
df <- read.xlsx("standarizerate.xlsx",sheetIndex = 1)
#View(df)
DT::datatable(df)
#-------新增粗率;合计粗总率 CrudeRate,10w分之
df %>% mutate(CrudeRate=case/pop )
a=df %>% mutate(CrudeRate=case/pop,
proportion=prop.table(standard_pop),
Adjust_rates=CrudeRate*proportion)
a
# 计算边际误差SE,标化总率 Adjust_rates,95% CI ,10w分之
100000*(sum(a$case)/sum(a$pop))
100000*sum(a$Adjust_rates)
##标化事件总率,10w分之
asr = ageadjust.direct(count = df$case, pop = df$pop, stdpop = df$standard_pop)
round(100000*asr, 2)
# ---------②直接法 手动标注case,其他年龄组,如10岁一组,调整的标准化率
pacman::p_load(tidyverse,epitools)
df=tibble(age_group=c("<1", "1-4", "5-14", "15-24", "25-34", "35-44", "45-54","55-64", "65-74", "75-84", "85+"),
case= c(141, 926, 1253, 1080, 1869, 4891, 14956, 30888,41725, 26501, 5928),
pop=c(1784033, 7065148, 15658730, 10482916, 9939972, 10563872, 9114202, 6850263, 4702482, 1874619, 330915),
standard_pop=c(906897, 3794573, 10003544, 10629526, 9465330, 8249558, 7294330, 5022499, 2920220, 1019504, 142532))
DT::datatable(df)
#后续同①过程
# ---------③ 间接法(两地区年龄组pop合并)
#这里增加了一列数据standard_pop人口的各个感染病例数:standard_case;
#这样就相当于两个地区各年龄组都有HIV的发病数。合并两个地区的pop计算调整的年龄标化率。
df$standard_case=c(45, 201, 320, 670, 1126, 3160, 9723, 17935,22179, 13461, 2238)
DT::datatable(df)
#间接标化ageadjust.indirect
asr = ageadjust.indirect(count = df$case, pop = df$pop,stdcount = df$standard_case, stdpop = df$standard_pop)
round(asr$sir, 2)
##standarized incidence ratio
round(100000*asr$rate, 1)
##rate per 100,000 per year
asr = ageadjust.indirect(count = df$standard_case, pop = df$standard_pop,stdcount = df$case, stdpop = df$pop)
round(asr$sir, 2)
#standarized incidence ratio
round(100000*asr$rate, 1)
#rate per 100,000 per year
直接法数据, 标化率95%CI 为 2463(2389,2538)/10,0000。
间接法数据
[1] Gan Y , Jiang H , Room R , et al. Prevalence and risk factors associated with stroke in China: A nationwide survey of 726,451 adults[J]. European Journal of Preventive Cardiology, 2020:204748732090232.
[2] https://rpubs.com/bpoulin-CUNY/321735
[3] https://www.jianshu.com/p/08faaa41fab6
原创不易,转载请说明来自本公众号。