GBD数据库相关文献中的EAPC怎么算?

发现近年来好多人利用GBD数据库发了很多文章。
GBD数据库(http://ghdx.healthdata.org/gbdresults-tool)中关于疾病的发生率、死亡率、DALY等数据都是现成的,所以主要的工作量包括:

  1. 下载数据并整理成表格:用R比较方便,用Excel也行;
  2. 数据的可视化(画图):用R的ggplot包比较方便,推荐参考书籍:
    Winston Chang. R数据可视化手册(异步图书)人民邮电出版社
  3. 相关变化趋势的计算:常用方法的是Estimated annual percentage change (EAPC),其原理推荐参考文献:
    Hankey BF, et al. Partitioning linear trends in age-adjusted rates. Cancer Causes Control CCC 2000; 11(1):31-5.
  4. 变化趋势的预测:见我的另一篇博文 《利用GBD数据库做未来疾病负担预测》

下面要讲的是EAPC的计算:

1. 数据的整理

以某病的年龄标准化发病率(ASIR)为例:

rm(list = ls())
library(data.table) #个人习惯,喜欢用这个包
library(tidyverse) #个人习惯,为了用管道符

years <- fread('I:/years_locations.csv')
regions_years_ASIR <- years[measure_name == 'Incidence' &  #发病率
                           age_name == 'Age-standardized' &  #年龄标准化的
                           metric_name == 'Rate' & #率(每10万人)
                           location_id %in% c(1,44637,44636,44639,44634,
                                              44635,32,42,56,70,
                                              65,100,96,73,120,
                                              104,124,134,138,159,
                                              5,21,9,167,174,
                                              192,199) & #关注的地理区域
                           sex_name == 'Both',] #所有性别

2. 计算EAPC

EAPC_ASIR <- data.table() #搞个空表格
for (i in unique(regions_years_ASIR$location_id)) {
#因为要算每个区域的变化趋势,所以按地理区域编号,一个个拎出来计算
  temp <- regions_years_ASIR[location_id == i, ]
  #进行Log变化是因为这个方法基于一个假设:发病率经log变换后其逐年的变化呈线性
  temp$lograte <- log(temp$val)
  #线性回归
  fit <- lm(lograte ~ year, temp)
  b <- coefficients(fit)
  CI <- confint(fit)
  #斜率以及置信区间
  EAPC0.5 <- format(round(100 * (exp(b[2]) - 1), digits = 2), nsmall = 2)
  EAPC0.975 <- format(round(100 * (exp(CI[4]) - 1), digits = 2), nsmall = 2)
  EAPC0.025 <- format(round(100 * (exp(CI[2]) - 1), digits = 2), nsmall = 2)
  #顺手整理一下数据
  location_id <- regions_years_ASIR$location_id[regions_years_ASIR$location_id == i] %>% unique()
  EAPC <- cbind(location_id, EAPC0.025, EAPC0.5, EAPC0.975)
  EAPC_ASIR <- rbind(EAPC_ASIR,EAPC)
}

3. 整理结果

用R进行数据整理可以避免很多重复劳动

EAPC_ASIR <- EAPC_ASIR[,.(location_id, EAPC_ASIR = paste(EAPC_ASIR$EAPC0.5,' (', 
                                       EAPC_ASIR$EAPC0.025, ' to ', 
                                       EAPC_ASIR$EAPC0.975, ')', sep = ''))]

write.csv(EAPC_ASIR, 'I:/EAPC_ASIR.csv')

你可能感兴趣的:(GBD数据库,数据库,r语言)