对数转换总是会减轻异方差吗?

机器算法验证 回归 数据转换 异方差 对数
2022-03-25 03:49:45

对数转换总是会减轻异方差吗?因为教科书指出对数变换通常会降低异方差性。所以,我想知道在哪些情况下它不会减少异方差性。

2个回答

不; 有时它会使情况变得更糟。

分布接近与条件均值成比例的异方差往往会通过取 log(y) 得到改善,但如果它不随均值以接近该速率(或更高)而增加,那么异方差通常会变得更糟通过这种转变。

两个数据集的图,一个与均值成正比,在取 log(y) 时显示改善,第二个在取 log(y) 时展开,取 log 后变得更糟

因为取对数在右侧“拉入”更多的极端值(高值),而最左侧的值(低值)往往会被拉回:

在此处输入图像描述

这意味着如果值很大,点差会变小,但如果值已经很小,点差可能会被拉长。


如果您知道异方差的近似形式,那么您有时可以计算出一个近似使方差恒定的变换。这称为方差稳定变换它是数理统计中的标准主题。我们网站上有许多与方差稳定转换有关的帖子。

如果散布与均值的平方根成正比(方差与均值成正比),那么平方根变换(这种情况下的方差稳定变换)往往会比对数变换做得更好;在这种情况下,对数转换“太多”了。在第二个图中,随着平均值的增加,分布减小,然后取对数或平方根会使情况变得更糟。(事实证明,在这种情况下,1.5 幂实际上在稳定方差方面做得相当好。)

根据我的经验,当数据是“锥形”并且偏斜(对数正态或其他)时,对数转换最有帮助(见下文)。这类数据通常来自人群,例如系统的用户,其中会有大量不经常使用的用户和一小部分频繁使用的用户。

这是一些锥形数据的示例:

x1 <- rlnorm(500,mean=2,sd=1.3)
x2 <- rlnorm(500,mean=2,sd=1.3)
y <- 2*x1+x2
z <- 2*x2+x1

#regression of unlogged values

fit <- lm(z ~ y)
plot(y,z,main=paste("R squared =",summary.lm(fit)[8]))
abline(coefficients(fit),col=2)

在此处输入图像描述

取 y 和 z 的对数给出:

#regression of logged values

fit <- lm(log(z) ~ log(y))
plot(log(y),log(z),main=paste("R squared =",summary.lm(fit)[8]))
abline(coefficients(fit),col=2)

在此处输入图像描述

请记住,对记录的数据进行回归会改变拟合方程的形式,从y=ax+blog(y)=alog(x)+b(或者y=xaeb)。

除了这种情况,我会说尝试绘制记录的数据永远不会受到伤害,即使它不会使残差更加同调。它通常会揭示您不会看到的细节,或以有用的方式展开/压缩数据