使用R语言mada包按by_var亚组分析特异度时模型拟合失败求助
诊断试验准确性Meta分析中metaprop特异度亚组分析报错的解决方法
问题背景
用R语言的mada包开展诊断试验准确性Meta分析,按book1$NC_RNA进行亚组分析时,灵敏度等指标的代码运行正常,但特异度分析出现模型拟合失败的报错。
特异度分析代码
specificity_logit_sl <- metaprop(book1$TN, book1$TN+ book1$FP, comb.fixed=FALSE, comb.random=TRUE, sm="PLOGIT", method.ci="cp", byvar=book1$NC_RNA, studlab=book1$AUTHOR)
正常运行的灵敏度代码
sensitivity_logit_sl <- metaprop(book1$TP, book1$TP+ book1$FN, comb.fixed=FALSE, comb.random=TRUE, sm="PLOGIT", method.ci="cp", byvar=book1$NC_RNA ,studlab=book1$AUTHOR)
报错信息
Error in runGLMM(list.prop, method.tau = method.tau, method.random.ci = method.random.ci, : Error in (function (ai, bi, ci, di, n1i, n2i, x1i, x2i, t1i, t2i, xi, : Cannot fit ML model (set 'verbose=TRUE' to obtain further details).
解决步骤
排查拟合失败具体原因:按报错提示添加
verbose=TRUE参数,查看模型拟合过程的详细日志,定位是数据极端值、亚组样本量问题还是其他诱因:specificity_logit_sl <- metaprop(book1$TN, book1$TN+ book1$FP, comb.fixed=FALSE, comb.random=TRUE, sm="PLOGIT", method.ci="cp", byvar=book1$NC_RNA, studlab=book1$AUTHOR, verbose=TRUE)处理数据极端值:
检查每个亚组内TN/(TN+FP)的取值,若存在亚组所有研究的特异度为1(FP=0)或0(TN=0),logit变换会出现无穷值,导致模型无法拟合。应对方案:- 添加连续性校正:给所有TN和FP加0.5(保证数据逻辑合理):
specificity_logit_sl <- metaprop(book1$TN + 0.5, book1$TN + book1$FP + 1, comb.fixed=FALSE, comb.random=TRUE, sm="PLOGIT", method.ci="cp", byvar=book1$NC_RNA, studlab=book1$AUTHOR) - 换用鲁棒性更强的效应量变换:改用反正弦变换(
sm="ASIN"),对极端比例的适配性更好:specificity_logit_sl <- metaprop(book1$TN, book1$TN+ book1$FP, comb.fixed=FALSE, comb.random=TRUE, sm="ASIN", method.ci="cp", byvar=book1$NC_RNA, studlab=book1$AUTHOR)
- 添加连续性校正:给所有TN和FP加0.5(保证数据逻辑合理):
调整亚组设置:若某个亚组仅包含1项研究,随机效应模型无法估计异质性,会导致拟合失败。可考虑将该亚组合并到同类亚组,或暂时改用固定效应分析(需谨慎解释结果)。
换用诊断试验专用函数:mada包中的
metadich函数专门针对二分类诊断数据设计,比metaprop更适配诊断试验的指标分析:specificity_logit_sl <- metadich(book1$TN, book1$FP, book1$FN, book1$TP, comb.fixed=FALSE, comb.random=TRUE, sm="SPEC", byvar=book1$NC_RNA, studlab=book1$AUTHOR) # 注:sm="SPEC"指定分析特异度,可通过?metadich查看参数细节
内容的提问来源于stack exchange,提问作者Newguy
相关产品推荐
相关产品推荐

