0%

Quality control of SDTM using the sdtmchecks package

如果想对SDTM有个快速全面的check,Pinnacle 21毫无疑问是首选,其能帮助我们对SDTM进行CDISC标准验证,发现data quality issue以及mapping不合理的之处。

若需要一些personalized check过程或者说company-specific check,那么sdtmchecks R包能提供一些非常有用的支持。就像sdtmchecks包介绍中所说的,其并不是想囊括所有SDTM check rules,也不是P21 data validation的复制替代品,其主要是想提供一个一般化且可操作并且有意义的data check。


sdtmchecks包囊括的方法和函数不多,应该说非常精简,但是都非常实用;这个也是我非常喜欢的方式,目标明确且提供适量的函数可供调用,学习曲线平缓。

首先我们从github上安装其主分支下的版本

# install.packages("devtools")
devtools::install_github("pharmaverse/sdtmchecks", ref="main")

加载sdtmchecks包后我可以先初步浏览下其提供了多少内置的data check类型;当然也可用在网页端查阅,如:Search Data Check Functions,其提供了非常详尽的 check details,以便我们理解最终报告中展示的内容。

#Just type this in
sdtmchecksmeta

接着我导入当前目录下所有SDTM数据集

fn <- list.files(
  path = "./SDTM",
  pattern = "sas7bdat", full.names = TRUE
)
for (file in fn) {
  f <- stringr::str_remove(basename(file), ".sas7bdat")
  assign(f, value = haven::read_sas(file))
}

然后可以选择run一个data check函数,函数名则可以从sdtmchecksmeta对象中获取,如check_ae_aedecod(ae);或者run所有的check,如下所示:

myreport <- run_all_checks(
  metads = sdtmchecksmeta,
  priority = c("High", "Medium", "Low"), # subset checks based on priority
  type = c("ALL", "ONC", "PRO", "OPHTH"), # subset checks based category
  verbose = TRUE
)

最后生成报告来审阅所有的data issues

report_to_xlsx(res = myreport, outfile = "sdtm_check_report.xlsx")

但是不得不说,包内嵌的general check可能不太适用于我们的一些项目,这时需要比较精细的评估当前项目的sdtm需要哪些check模块,如:

# Subset to checks that should work OK for most datasets
metads = sdtmchecksmeta %>%
  filter(check %in% c("check_ae_aedecod",
                      "check_ae_aetoxgr",
                      "check_ae_dup",
                      "check_cm_cmdecod",
                      "check_cm_missing_month",
                      "check_dm_age_missing",
                      "check_dm_usubjid_dup",
                      "check_dm_armcd"
                      ))
myreport <- run_all_checks(metads = metads, verbose = TRUE)

必要的时候甚至可以自定义一些check,如:Writing a New Check

以上均来自sdtmchecks包的文档,更多信息可查阅https://github.com/pharmaverse/sdtmchecks