肿瘤登记质控和自动化报告

如何快速发布质控报告和年度报告?

陈琼

April 17, 2024

质量控制应该怎么做?

主要内容

  1. 质量控制应该怎么做?

  2. 可视化批量化的质控报告?

  3. 自动化的肿瘤登记年报输出

  4. 谢谢关注!

Why ?

确保肿瘤登记准确、完整、可靠, 从而为癌症防控、科学研究、医疗质量评估等提供真实、完整、有效、具有科学价值的基础数据。

  • 肿瘤登记的质量控制是获取高质量数据的核心

  • 使不同地区之间的数据具有可比性

  • 代表登记处所在地区的癌症人群

  • 使癌症数据真实有效

个体水平的质控-内部一致性

肿瘤登记收集的变量或者变量组合之间存在一定的逻辑关系,通过对单个变量或变量组合之间的逻辑关系进行审查,以提高肿瘤登记数据有效性。

单个项目

  • 出生日期
  • 发病日期
  • 年龄、性别
  • 发病部位
  • 形态学
  • 行为和分级

项目组合

  • 性别/部位
  • 部位/组织学
  • 年龄/部位/组织学
  • 行为/部位
  • 行为/组织学
  • 性别/组织学

校验结果

  • 正确✅
  • 警告⚠️
  • 错误❌

逻辑核查-iarccrgtools

devtools::install_github(
  "FinnishCancerRegistry/iarccrgtools",
  ref = readline("enter latest tag on github: ")
)

iarccrgtools

iarccrgtools

R package

R package

质量控制指标体系

可比性、有效性、时效性1和完整性是当前肿瘤登记质量控制的主要指标2

flowchart LR
  B(可比性) --> b1(发病日期的定义)
  B --> b2(多原发判断)
  B --> b3(分类与编码)
  B --> b4(死亡证明)
flowchart LR
  D(有效性) --> d1(组织学确诊比例)
  D --> d2(只有死亡医学证明书比例)
  D --> d3(部位不明比例)
  D --> d4(数据内部一致性)
flowchart LR
  C(完整性) --> c1(死亡发病比)
  C --> c3(组织学确诊比例)
  C --> c4(不同时间发病率的稳定性)
  C --> c5(年龄别发病率曲线)

可比性 - 发病时间的定义

癌症的发生是一个可能需要数十年的过程,而发病日期的定义则相对武断,因此,遵循统一的标准特别重要.

  • 应选择七个列出的事件中按时间顺序首先发生的日期作为发病日期。
  • 如果优先级较高的事件在最初选择的日期之后三个月内发生,则应优先考虑优先级较高事件的日期。

可比性 - 分类与编码

肿瘤登记采用双编码系统

分类标准

  • ICD-O-3 :数据收集
  • ICD10 :统计分析

《肿瘤登记年报》采用ICD10进行肿瘤分类(Table 1

Table 1: 常用癌症分类统计表(大类)
部位 ICD10
口腔和咽 (除外鼻咽癌和喉) C00-10,C12-14(除外C10.1)
鼻咽癌 C11
食管 C15
C16
结直肠肛门 C18-21
肝脏 C22
胆囊及其他 C23-C24
胰腺 C25
C32,C10.1
气管、支气管、肺 C33-C34
C40-C41
乳房 C50
子宫颈 C53
子宫体及子宫部位不明 C54-55
卵巢 C56
前列腺 C61
睾丸 C62
肾及泌尿系统不明 C64-66,68
膀胱 C67
脑,神经系统 C70-C72
甲状腺 C73
淋巴瘤 C81-85,88,90,96
白血病 C91-C95
其它 Other(除外以上)
所有部位合计 ALL

可比性-多原发肿瘤

个体有发生一个以上癌症的可能,多部位原发癌纪录为新发病病例,与登记地区医疗水平有关,也与登记质量有关,登记处应注意多部位原发肿瘤病例资料的收集


可比性-IACR多原发癌规则

全球大部分地区采取了IARC的多原发癌判断规则


  1. 两个或以上多原发癌的判断不依赖时间
  2. 每个原发癌起源一个原发部位或组织(非扩散、复发或转移)
  3. 肿瘤起源于在同一个或一对器官或组织时认为是一个肿瘤
    1. 部分成组部位码认为是一个器官
    2. 多灶肿瘤认为是一个肿瘤
ICDO3部位码分组
ICDO3-Topo Site
C01, C02 C02.9
C00, C03, C04, C05, C06 C06.9
C09, C10, C12, C13, C14 C14.0
C19, C20 C20.9
C23, C24 C24.9
C33, C34 C34.9
C40, C41 C41.9
C65, C66, C67, C68 C68.9

可比性-IACR多原发癌规则

  • 对于系统性肿瘤涉及到不同器官时,只记录一个(如Kaposi、血液造血系统肿瘤)
  • 不同的组织学应该被记录为两个或多个肿瘤1

有效性-组织学确诊比例(MV%)

MV%的绝对值可能没有意义, 只有通过与“预期值”进行比较才能除非与合理的“预期”值进行比较才有意义。


  • 不同性别、部位MV%情况
  • 与相邻区域(区域平均值)比较
  • 与国家平均值的比较
  • 组织学确诊比例的连续性情况

有效性-组织学确诊比例(MV%)

如何判断登记处的MV%与区域内的均值是否存在差异?

基于二项分布, 存在 \(E(y_i)=pd_i\)\(Var(y_i)=p(1p)d_i\), 参数可以做如下估计:

\(Z^2 = \frac{(y_j - \hat{p} d_j)^2}{\hat{\phi} \hat{p}(1- \hat{p}) d_j} \approx \chi_1^2\)

\(\hat{p}=\frac{\sum_{i=1}^n y_i}{\sum_{i=1}^n d_i}\)

\(\hat(\phi)=\frac{1}{n-1}\sum_{i=1}^n \frac{(y_i-pd_i)^2}{d_ip(1-p)}\)

  • \(i\) 同一个国家或地区的不同登记处分别用i=1,…,n表示
  • \(p\) 病理学诊断比例(MV%)
  • \(y_i\) 登记处i的病理学诊断病例数
  • \(d_i\) 登记处i的总病例数

如果\(Z^2 \geq 3.84\) 则认为登记处MV%与区域均值存在有统计学意义的差异。

有效性-只有死亡医学证明书比例(DCO%)

标记为DCO的记录指示该记录的数据质量较差,诸多信息存在缺失,比如诊断时间以死亡时间来代替,无法在生存分析时被利用。

flowchart LR
  a(死亡证明提及癌症) --> b(与肿瘤登记数据库匹配)
  b -->c(未登记)
  b -->d(已登记)
  c --> e1(从其他来源获取信息)
  c --> e2(无其他来源)
  e2 --> f1(未追踪到:DCO)
  e2 --> f2(追踪到)
  e2 --> f3(追踪到,非癌)
Figure 1: 利用死亡证明发现肿瘤病例信息.

完整性

肿瘤登记收集到的癌症病人数占一定区域内所有诊断癌症病人的比例

癌症患者

诊断患者

肿瘤登记

完整性

肿瘤登记收集到的癌症病人数占一定区域内所有诊断癌症病人的比例

癌症患者

诊断患者

肿瘤登记

完整性- 历史数据方法

通过对比历史数据发病率发现异常波动,从而体现可能登记处完整性的变化。

假设: 来自同一地区特定癌症的发病率倾向于相似。

  • 发病率随时间变化的稳定性
  • 比较不同人群癌症发病率
  • 年龄别发病率曲线
  • 儿童肿瘤发病率

完整性- 死亡发病比(M:I)

M:I是反映完整的重要指标,它反映癌症生存情况,与该地区的经济、医疗等发展水平有关,当它预期值1存在差异时,往往提示完整性存在问题。

\[M:I=\frac{Mortality}{Incidence} \approx1-5Survial\]

  • M:I 大于预期值提示完整性不足
  • M:I 小于预期值提示可能存在重卡

完整性-平均数据来源数

完整性- 组织学确诊比例(MV%)

MV%是有效性评估的指标, 但是通过与预期值比较,也可以判断其完整性,过高的MV%提示数据过度依赖病理诊断,可能存在完整性不足。


  • 同一登记处的MV%的历史变化情况
  • MV%与预期值的比较
  • 不同癌种MV%与预期值的比较

完整性- 组织学确诊比例(MV%)

如何判断MV%与预期值是否存在差异?

\(Z^2 = \frac{(m_j - \hat{\theta} d_j)}{\hat{\phi}n_j\hat{\theta}} \approx \chi_1^2\)

\(\hat{\theta}=\frac{\sum_{i=1}^n m_i}{\sum_{i=1}^n d_i}\)

\(\hat(\phi)=\frac{1}{n-1}\sum_{i=1}^n \frac{(m_i-\hat{\theta}d_i)^2}{n_i\hat{\theta}}\)


  • i指示不同登记处的编号, i=1,….,n
  • \(d_i\)登记处i的发病记录数
  • \(m_i\)登记处i的死亡记录数

可视化批量化的质控报告?

主要内容

  1. 质量控制应该怎么做?

  2. 可视化批量化的质控报告?

  3. 自动化的肿瘤登记年报输出

  4. 谢谢关注!

主要内容

通过可视化的方法,尽量简单的肿瘤登记数据中存在的问题展示出来.

  • 人口数据
  • 总体发病数、死亡数
  • 总体发病率、死亡率
  • 不同部位癌症发病率、死亡率
  • 年龄别发病率、死亡率
  • 癌种数
  • 病理诊断比例的时间变化和区域比较
  • 死亡发病比的时间变化和区域比较
  • 只有死亡医学证明书比例的时间变化的区域比较

人口总数

人口比例

人口结构

人口结构

癌症发病和死亡总数

总体癌症发病率

不同部位癌症发病率

年龄别癌症发病率

总体癌症死亡率

不同部位癌症死亡率

年龄别癌症死亡率

儿童肿瘤发病率

儿童肿瘤发病率

癌症种类数量

病理诊断比例

病理诊断比例

死亡发病比

死亡发病比

只有死亡医学证明书比例

只有死亡医学证明书比例

质量控制报告

我们定期(每季度)生成每个登记处的质量控制报告,并发布至网络直报信息系统。

  • 可以通过网页、手机查看
  • 报告可以基于县级生成

质量控制列表

怎么实现

基于Rmarkdown的可重复性报告

  • 软件: R语言
  • R包: Rmarkdown ggplot2 cowplot tidyverse
  • 思路: 统计分析相关指标,在Rmarkdown中把相关指标可视化并制作成报告模板,基于基本模板批量生成报告。

未来方向

让肿瘤登记报告生成更简单, 越简单越好!!!

缺点:

  • 程序移植性不强
  • 依赖程序包较多

解决:

  • 工具化,比如R包
  • 市级报告模板
  • 基于单位的报告模板

Some Work in progress !!!

canregtools 一个用于肿瘤登记数据分析、可视化和自动化报告的R包。

canregtools

目前实现的函数:

  • read_canreg()
  • read_map()
  • clean_canreg()
  • count_canreg()
  • ageadjust()
  • create_asr()
  • create_age_rate()
  • create_quality()
  • cutage()
  • expand_age_pop()
  • expand_lifetable()
  • calc_age()
  • check_id()
  • classify_icd10()
  • classify_childhood()
  • tidy_address()
  • lt()
  • pyramid()
  • line_chart()
  • create_map()
  • dulbar_chart()
  • dumbbell_chart()
  • tidy_age()
  • tidy_occu()
  • tidy_sex()

自动化的肿瘤登记年报输出

主要内容

  1. 质量控制应该怎么做?

  2. 可视化批量化的质控报告?

  3. 自动化的肿瘤登记年报输出

  4. 谢谢关注!

为什么?

肿瘤登记处的主要目标之一就是产生肿瘤发病、死亡、生存相关的统计指标, 并通过一定的渠道发布数据,促进数据的共享和利用(专业人员和大众),从而促进癌症防控政策的产生。

  • 了解疾病负担
  • 支持病因学研究
  • 预后研究
  • 为癌症防控政策提供基础数据

肿瘤登记报告流程

flowchart TD
  A(数据来源单位) --> B(县区级登记处)
  B --> C(市级登记处)
  C --> D(省级质量控制)
  D --> B
  B --> A
  D --> C
  D --> F(综合评估)
  F --> G(年报撰写及发布)
Figure 2: 肿瘤登记报告流程

年报该如何撰写?

把统计分析数据转换为文字的过程。

flowchart LR
  A(统计分析) --> B(制作表格)
  B --> C(绘制统计图)
  C --> D(专家撰写)
  D --> E(初稿)
    E --> F(审核定版)

年报特点

  • 客观描述
  • 要求文字描述风格的一致性
  • 有图有表
  • 无讨论,无观点
  • 需要专家码字

自动化?

  • Scientific writing?
  • 可重复性报告
  • Rmarkdown
  • Quarto

可重复性报告技术

基于现有年报的特点,以及随着可重复性报告技术的成熟,可以实现自动化撰写的需求?

思路

利用Bookdown包把统计结果进行展现,包括文字描述和可视化展现(各种统计图表)

可重复性报告技术

可重复性报告技术

Bookdown程序由按照章节区分的Rmd文件组成,每个Rmd文件可以输出相应章节的文字描述,从而形成最终的文本。

  1. index.Rmd
  2. 01-summary.Rmd
  3. 02-method.Rmd
  4. 03-quality.Rmd
  5. 04-total_cancer.Rmd
  6. 05-eachsite.Rmd
  • 行内代码插入数据
  • 文字描述

可重复性报告技术

表格如何实现?

data<-inciden
header<-data.frame(
    col_keys=colnames(data),
    second=c("地区","性别","发病数","发病率","中标率","世标率","累积率\n0-74(%)"))
data%>%flextable()%>%
  set_header_df( mapping = header, key = "col_keys" )%>%
  compose(j=4,value=as_paragraph("发病率\n(1/10",as_sup("5"),")"),part="header")%>%
  compose(j=5,value=as_paragraph("中标率\n(1/10",as_sup("5"),")"),part="header")%>%
  compose(j=6,value=as_paragraph("世标率\n(1/10",as_sup("5"),")"),part="header")%>%
  colformat_num(j=4:7,digits = 5.2)%>%
  set_caption(caption= paste(year.data,"年河南省肿瘤登记地区恶性肿瘤(C00-C96)发病主要指标",""))%>% 
  align(align="center",part="all")%>%
  bold(bold=TRUE,part="header")%>%
  width(j=1:2,width=0.5)%>%
  width(j=3:7,width=1.0)%>%
  theme_booktabs()

表格如何实现?

批量化生成各章节统计图

yearpub<-2023
report<-haven::read_sas("./report.sas7bdat")
areacode1 <- c("410902","411202","411303","411502","419001","411002")
areacode2 <- c("410901","411001","411201","411301","411501")
report <-report%>%
  filter(city %in% c("11","2","33")|areacode %in% areacode1,
         !(areacode %in% areacode2))%>%
  mutate(year = as.numeric(year),
         city = as.numeric(city))
source("./rscripts/gen_annual_report_plot.R")

批量化生成各章节统计图

生成年报只需一次点击

大约需要一分钟的时间!!!

  • 一次点击Build
  • 同时输出多种形式
    • Word
    • PDF
    • Epub
    • 网页

线上发布

在线发布的年报更容易传播和共享

现有方法

不足之处

  • 可移植性不足
  • 需要了解一点编程知识
  • 整合性不足

待开发

  • R包
  • 输出Fact Sheet(按照癌种、人群)

现有肿瘤登记年报的特点

随着肿瘤登记处数量的增加以及数据质量的提升,国家及大部分省份开始发布国家级或省级的肿瘤登记年报。

  • 以传统书籍的形式出版
  • 以白皮书的形式发布报告
  • 把传统书籍搬到线上(线上年报)
  • 价格较高
  • 不利于数据共享和传播

我们真的需要每年发布纸质年报吗?

谢谢关注!

所有幻灯片

微信公众号

个人网站

陈琼博士

陈琼,博士,副主任医师,硕士研究生导师

  • 河南省癌症中心、郑州大学附属肿瘤医院/河南省肿瘤医院
  • 美国耶鲁大学访问学者
  • 社会兼职情况
    • 中国抗癌协会食管癌防筛专委会委员
    • 中国抗癌协会癌症筛查与早诊早治专委会青年委员
    • 北京慢性病防治与健康教育研究会癌症患者院后管理专业委员会第一届委员会常务委员
    • 河南省预防医学会肿瘤预防与控制专业委员会常务委员 -《河南省肿瘤登记年报》副主编,中华肿瘤防治杂志青年编委,社区医学杂志编委
  • 长期从事肿瘤流行病学、恶性肿瘤监测以及筛查效果评价相关工作,发表相关专业论文30余篇,SCI论文十余篇。