应该向 x 添加多小的数量以避免取零的对数?

机器算法验证 数据转换 化学计量学 常问问题
2022-02-12 02:38:00

我已经按原样分析了我的数据。现在我想在记录所有变量的日志后查看我的分析。许多变量包含许多零。因此,我添加了少量以避免取零的对数。

到目前为止,我已经添加了 10^-10,实际上没有任何理由,只是因为我觉得添加一个非常小的数量是可取的,以尽量减少我任意选择数量的影响。但有些变量大多包含零,因此在记录时大多为 -23.02。我的变量的取值范围是 1.33-8819.21,零的频率也变化很大。因此,我个人对“少量”的选择对变量的影响非常不同。现在很清楚 10^-10 是一个完全不可接受的选择,因为所有变量中的大部分方差都来自这个任意的“少量”。

我想知道这样做更正确的方法是什么。

也许最好从每个变量的单独分布中得出数量?有没有关于这个“少量”应该有多大的指导方针?

我的分析主要是简单的 cox 模型,每个变量和年龄/性别作为 IV。变量是各种血脂的浓度,通常具有相当大的变异系数。

编辑:添加变量的最小非零值对我的数据来说似乎很实用。但也许有一个通用的解决方案?

编辑 2:由于零仅表示浓度低于检测限,也许将它们设置为(检测限)/2 是否合适?

4个回答

化学浓度数据通常有零,但它们不代表零值:它们是不同(且令人困惑)代表未检测(测量表明,很有可能,分析物不存在)和“未量化”的代码值(测量检测到分析物但无法产生可靠的数值)。让我们在这里模糊地称这些“ND”。

通常,有一个与 ND 相关的限制,称为“检测限”、“定量限”或(更准确地说)“报告限”,因为实验室选择不提供数值(通常用于法律原因)。关于 ND,我们真正知道的只是真实值可能小于相关限制:它几乎(但不完全)是左删失的一种形式. (好吧,这也不是真的:这是一个方便的虚构。这些限制是通过校准确定的,在大多数情况下,这些校准具有差到可怕的统计特性。它们可能被严重高估或低估。知道何时知道这一点很重要处被截断(例如)处的“尖峰” 。这强烈表明报告限制只是一个略低于,但实验室数据可能会试图告诉您它是或类似的东西。)1.3301.330.50.1

在过去 30 年左右的时间里,人们就如何最好地总结和评估这些数据集进行了广泛的研究。Dennis Helsel 就此出版了一本名为 Nondetects and Data Analysis (Wiley, 2005) 的书,教授了一门课程,并发布了一个R基于他喜欢的一些技术的软件包。他的网站很全面。

这个领域充满了错误和误解。赫尔塞尔对此坦率地说:在他的书第一章的第一页,他写道,

...当今环境研究中最常用的方法,即检测限的二分之一替代,不是解释审查数据的合理方法。

那么该怎么办? 选项包括忽略这个好的建议,应用 Helsel 书中的一些方法,以及使用一些替代方法。没错,这本书并不全面,并且确实存在有效的替代方案。向数据集中的所有值添加一个常量(“启动”它们)就是其中之一。但请考虑:

  • 添加不是一个好的开始,因为这个配方取决于测量单位。 每分升添加微克与每升111

  • 启动所有值后,您仍然会在最小值处出现尖峰,表示该 ND 集合。您希望这个峰值与量化数据一致和起始值之间的对数正态分布的质量。0

    确定起始值的一个很好的工具是对数正态概率图:除了 ND,数据应该是近似线性的。

  • ND 的集合也可以用所谓的“delta 对数正态”分布来描述。这是点质量和对数正态的混合。

从下面的模拟值直方图中可以明显看出,删失和增量分布并不相同。 delta 方法对于回归中的解释变量最有用:您可以创建一个“虚拟”变量来指示 ND,取检测值的对数(或根据需要进行转换),而不用担心 ND 的替换值.

直方图

在这些直方图中,大约 20% 的最低值已被零替换。为了可比性,它们都基于相同的 1000 个模拟基础对数正态值(左上角)。增量分布是通过将 200 个值随机替换为零来创建的。删失分布是通过用零替换 200 个最小值来创建的。“现实”分布符合我的经验,即报告限值实际上在实践中有所不同(即使实验室没有指出!):我让它们随机变化(只有一点点,很少超过 30 英寸)任一方向)并将所有小于其报告限制的模拟值替换为零。

为了显示概率图的效用并解释其解释,下图显示了与前面数据的对数相关的正态概率图。

概率图

左上角显示所有数据(在任何审查或替换之前)。它非常适合理想的对角线(我们预计极端尾部会有一些偏差)。这是我们在所有后续图中的目标(但是,由于 ND,我们将不可避免地达不到这个理想值。)右上角是删失数据集的概率图,起始值为 1。这是一个糟糕的拟合,因为所有的 ND(绘制在 0,因为log(1+0)=0) 绘制得太低了。左下角是删失数据集的概率图,起始值为 120,接近典型的报告限制。左下角的拟合现在是不错的——我们只希望所有这些值都接近拟合线,但在拟合线的右侧——但上尾的曲率表明添加 120 开始改变分布的形状。右下角显示了 delta-lognormal 数据发生的情况:上尾非常适合,但在报告限制附近有一些明显的曲率(在图的中间)。

最后,让我们探索一些更现实的场景:

概率图 2

左上角显示删失数据集,其中零点设置为报告限制的二分之一。这是一个非常合适的。右上角是更真实的数据集(具有随机变化的报告限制)。起始值 1 没有帮助,但在左下方 - 对于 120 的起始值(接近报告限制的上限),拟合非常好。有趣的是,当点从 ND 上升到量化值时,中间附近的曲率让人想起delta 对数正态分布(即使这些数据不是从这种混合中生成的)。右下角是当实际数据的 ND 被(典型)报告限制的二分之一替换时得到的概率图。 这是最合适的,即使它在中间显示了一些类似 delta-lognormal 的行为。

那么,您应该做的是使用概率图来探索分布,因为使用各种常数代替 ND。从名义、平均、报告限制 的二分之一开始搜索,然后从那里上下调整。选择一个看起来像右下角的图:量化值大致是一条对角线直线,快速下降到一个低平台,以及一个(几乎)与对角线延伸相交的值平台。但是,按照 Helsel 的建议(在文献中得到强烈支持),对于实际的统计摘要,请避免使用任何将 ND 替换为任何常数的方法。 对于回归,请考虑添加一个虚拟变量来指示 ND。对于某些图形显示,用概率图练习找到的值不断替换 ND 会很有效。对于其他图形显示,描绘实际报告限值可能很重要,因此用它们的报告限值代替 ND。你需要灵活!

由于零点仅表示浓度低于检测限,因此将它们设置为(检测限)/2 可能是合适的

我只是在输入我想到的 log 确实(经常)有意义并且可能出现 0 的事情是您进行第二次编辑时的浓度。正如您所说,对于测量的浓度,0 仅表示“我无法测量那么低的浓度”。

旁注:您的意思是 LOQ 而不是 LOD?

将 0 设置为 LOQ 是否是一个好主意取决于:12

  • 是您的“猜测”的角度来看,表示 c 在 0 和 LOQ 之间的任何位置,它确实是有道理的。 但请考虑相应的校准函数: 在左侧,校准函数在 LOQ 以下产生 c = 0。在右边,使用而不是 0。12LOQ

    在此处输入图像描述在此处输入图像描述
    12LOQ

  • 但是,如果原始测量值可用,则可能会提供更好的猜测。毕竟,LOQ 通常只是表示相对误差为 10%。在此之下,测量仍然携带信息,但相对误差变得巨大。
    在此处输入图像描述
    (蓝色:LOD,红色:LOQ)

  • 另一种方法是排除这些测量。这也是合理
    的,例如考虑校准曲线。在实践中,您经常观察到 sigmoid 形状:对于低 c,信号 ≈ 常数,中等线性行为,然后是检测器饱和。 在此处输入图像描述
    在这种情况下,您可能希望将自己限制在关于浓度明显处于线性范围内的陈述中,因为低于和高于其他过程都会严重影响结果。
    确保您解释以这种方式选择数据以及原因。


编辑:什么是明智的或可以接受的,当然取决于问题。希望我们在这里谈论的是不影响分析的一小部分数据。

也许一个快速而肮脏的检查是:在排除或不排除数据(或您建议的任何处理)的情况下运行您的数据分析,并查看是否有任何实质性变化。

如果你看到变化,那么你当然有麻烦了。但是,从分析化学的角度来看,我想说您的问题主要不在于您使用哪种方法来处理数据,而根本问题是分析方法(或其工作范围)不适合手头的问题。当然,更好的统计方法可以节省您的时间,但最终“垃圾进,垃圾出”的近似值通常也适用于更花哨的方法。

主题引文:

  • 一位统计学家曾经告诉我:

    你(化学家/光谱学家)的问题是你的问题要么太难以至于无法解决,要么太容易以至于解决它们没有乐趣。

  • 费舍尔关于实验的统计尸检

@miura

我在 Stata博客上看到了 Bill Gould 的这篇文章(我认为他实际上创立了 Stata),我认为它可以为您的分析提供帮助。在文章结尾处,他告诫不要使用接近零的任意数字,例如 0.01、0.0001、0.0000001 和 0,因为在日志中它们是 -4.61、-9.21、-16.12 和在这种情况下,它们根本不是任意的。他建议使用泊松回归,因为它认识到上述数字实际上很接近。

为了阐明如何处理回归模型中的零对数,我们编写了一篇教学论文,解释了最佳解决方案和人们在实践中常犯的错误。我们还提出了一个新的解决方案来解决这个问题。

您可以通过单击此处找到该论文: https ://ssrn.com/abstract=3444996

首先,我们认为人们应该想知道为什么要使用对数转换。在回归模型中,对数关系导致弹性的识别。实际上,如果,则对应于的弹性。对数也可以线性化理论模型。它也可以用来减少异方差。然而,在实践中,经常会出现 log 中取的变量包含非正值的情况。log(y)=βlog(x)+εβyx

经常提出的解决方案包括向所有观测值添加一个正常数 c ,以使然而,与线性回归相反,对数线性回归对因变量的线性变换并不稳健。这是由于对数函数的非线性特性。对数转换扩展低值并挤压高值。因此,添加一个常数会扭曲数据中零点与其他观测值之间的(线性)关系。常数产生的偏差的大小实际上取决于数据中的观察范围。因此,添加可能的最小常数不一定是最好的最差解决方案。YY+c>0

在我们的文章中,我们实际上提供了一个示例,其中添加非常小的常量实际上提供了最高的偏差。我们提供了偏差的表达式。

实际上,泊松伪最大似然法(PPML)可以被认为是解决这个问题的一个很好的方法。必须考虑以下过程:

yi=aiexp(α+xiβ)其中E(ai|xi)=1

这个过程是由几个特征推动的。首先,它为提供了与半对数模型相同的解释。其次,该数据生成过程提供了因变量中零值的逻辑合理化。当乘法误差项等于 0 时,就会出现这种情况。时,用 PPML 估计这个模型不会遇到计算困难假设,我们有我们希望最小化这一时刻的二次误差,导致以下一阶条件:βaiyi=0E(ai|xi)=1E(yiexp(α+xiβ)|xi)=0

i=1N(yiexp(α+xiβ))xi=0

即使在时也定义了这些条件。这些一阶条件在数值上等同于泊松模型,因此可以使用任何标准统计软件进行估计。yi=0

最后,我们提出了一种新的解决方案,该解决方案也易于实现,并提供了的无偏估计。只需估计:β

log(yi+exp(α+xiβ))=xiβ+ηi

我们证明了这个估计量是无偏的,并且可以使用任何标准统计软件使用 GMM 简单地估计。例如,可以通过使用 Stata 执行一行代码来估计。

我们希望这篇文章可以提供帮助,我们很乐意从您那里获得反馈。

Christophe Bellégo 和 Louis-Daniel Pape,CREST - Ecole Polytechnique - ENSAE