在 R 中,如何估算低于检测限的左删失数据?

hou*_*ton 2 statistics r missing-data correlation

这可能是一个简单的问题,但我就是无法解决。我有一个生物化学测试结果的数据框。其中一些测试由于检测限制base_crp而返回值。<3在继续之前我需要估算这些数据。我想正确地做到这一点,所以不仅仅是替换。

我尝试了zCompositions包中的 multLN ,但似乎认为所有<3值都是负数(错误提示X contains negative values)。似乎也没有太多文档——这是一个不起眼的包吗?

我还查看了LODI,但它希望我指定插补模型的协变量 - 有没有正确的方法来选择这些变量?不管怎样,我选择了 3 个理论上关联良好的,并使用了以下代码:

clmi.out <- clmi(formula = log(base_crp) ~ base_wcc + base_neut + base_lymph, df = all, lod = crplim, seed = 12345, n.imps = 5)
Run Code Online (Sandbox Code Playgroud)

其中 base_crp 是我要修复的变量。我用 替换了所有 <3NA并插入了一个新列all$crplim <- "3"。然而,这才刚刚回归 Error in sprintf("%s must be numeric.") : too few arguments

即使我能让 LODI 工作,我也不确定它是否是正确的工具。我只是一名本科生,几乎没有统计背景,所以我不太明白我在做什么——我只是想要一些用数字填充列的东西,这样我就可以继续使用皮尔逊相关性和线性回归等。我真的很感激一些帮助。提前致谢。

All*_*ron 5

我之前做过一些 CRP(C 反应蛋白)水平的统计建模 - 请参阅这篇同行评审的论文作为示例。CRP 呈近似对数正态分布,所有测试指标的未选择人群中的中值通常约为 3.5 mg/l(大多数健康人属于“<3mg/l”类别)。您可能不想使用插补模型,因为这些模型用于丢失数据。低CRP数据并没有缺失。您已经知道它位于某个范围内,因此如果您以这种方式进行插补,您就会丢失信息。

将“<3”替换为回归等的数值是合理的,只要您使用它来将 CRP 与临床发现等相关联,而不是(正如 Ben Norris 指出的那样)用于 CRP 机器校准。

我可以从上面链接的研究中超过 10,000 个高灵敏度 CRP 测量样本的数据告诉您,CRP < 3 的人的平均 CRP 约为 1.3,并且用您所有的“CRP < 3”替换是合理的。对于大多数真实世界的临床观察研究,测量结果为 1.3。

如果您确实需要在缺失的 CRP 上获得合理的数值,您可以估算对数正态分布的下半部分。以下函数将为您提供的数字可能与现实生活中的 CRP 测量值无法区分:

impute_crp <- function(n)
{
   x <- exp(rnorm(10 * n, 1.355, 1.45))
   round(x[x < 3][seq(n)], 1)
}
Run Code Online (Sandbox Code Playgroud)

所以你可以做

impute_crp(10)
#> [1] 1.5 2.0 1.1 0.4 2.5 0.1 0.7 1.5 1.4 0.4
Run Code Online (Sandbox Code Playgroud)

impute_crp(10)
#> [1] 1.5 2.0 1.1 0.4 2.5 0.1 0.7 1.5 1.4 0.4
Run Code Online (Sandbox Code Playgroud)

但是,您会注意到我在自己的 CRP 模型中根本没有使用插补。将较低的值替换为检测阈值对于建模来说已经足够了 - 而且我相当确定是否用对数正态尾部替换“< 3”,或者全部 1.3,或者全部 2,都没有什么区别您试图得出的结论。