如果想对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