像Box-Cox这样的自变量转换?


53

是否存在类似于Box-Cox的自变量转换?就是说,可以优化变量的转换,以便可以更合理地拟合线性模型?xy~f(x)

如果是这样,是否有执行此操作的功能R


1
我不知道有什么设施可以进行此操作R,考虑了一会儿,我不确定到底该怎么做。您将优化哪些标准以确保“最线性”的转换?极具诱惑力,但是,正如我在此处的答案所示R 2不能单独用来查看模型的线性假设是否得到满足。您有没有想到一些标准?R2R2
2012年

1
我的印象是我已经看过一篇关于它的论文。也许使用“协变量”而不是“独立变量”进行搜索更为明智。
斯蒂芬·洛朗

我认为(从内存中...)在汽车包装(R)中有一些实现。但是,您也可以在gmcv软件包中研究gam。
kjetil b halvorsen 2012年

stats.stackexchange.com/questions/60431/…上出现了一个讨论Box-Cox参数自动推断(通过同时转换所有自变量和因变量)的主题
ub

Answers:


72

约翰·图基(John Tukey)提倡他的“ 三点法 ”来寻找变量的重新表达以使关系线性化。

我将用他的书《探索性数据分析》中的一个练习来说明。这些是来自实验的汞蒸气压数据,在该实验中温度发生了变化并测量了蒸气压。

pressure <- c(0.0004, 0.0013, 0.006, 0.03, 0.09, 0.28, 0.8, 1.85, 4.4, 
              9.2, 18.3, 33.7, 59, 98, 156, 246, 371, 548, 790) # mm Hg
temperature <- seq(0, 360, 20) # Degrees C

该关系是高度非线性的:请参见图中的左面板。

情节

因为这是一个探索性练习,所以我们希望它是交互式的。要求分析人员首先确定图中的三个“典型”点:每个端点附近一个,中间一个。我在这里这样做,并用红色标记。(很久以前,当我第一次进行此练习时,我使用了不同的点集,但得出的结果是相同的。)

在三点法中,一种方法(通过蛮力或其他方式)搜索Box-Cox变换,该变换应用于(y)或x坐标之一时(a)将典型点近似放置在线和(b)使用“不错”的权力,通常选自分析师可能可以解释的“阶梯”权力。

由于稍后将变得显而易见的原因,我通过允许“偏移”扩展了Box-Cox系列,以使转换形式为

x(x+α)λ1λ.

R(λ,α)λα

box.cox <- function(x, parms=c(1,0)) {
  lambda <- parms[1]
  offset <- parms[2]
  if (lambda==0) log(x+offset) else ((x+offset)^lambda - 1)/lambda
}
threepoint <- function(x, y, ladder=c(1, 1/2, 1/3, 0, -1/2, -1)) {
  # x and y are length-three samples from a dataset.
  dx <- diff(x)
  f <- function(parms) (diff(diff(box.cox(y, parms)) / dx))^2
  fit <- nlm(f, c(1,0))
  parms <- fit$estimate #$
  lambda <- ladder[which.min(abs(parms[1] - ladder))]
  if (lambda==0) offset = 0 else {
    do <- diff(range(y))
    offset <- optimize(function(x) f(c(lambda, x)), 
                       c(max(-min(x), parms[2]-do), parms[2]+do))$minimum    
  }
  c(lambda, offset)
}

当对汞蒸气数据集中的压力(y)值应用三点法时,我们获得了图的中间面板。

data <- cbind(temperature, pressure)
n <- dim(data)[1]
i3 <- c(2, floor((n+1)/2), n-1)
parms <- threepoint(temperature[i3], pressure[i3])
y <- box.cox(pressure, parms)

parms(0,0)

我们已经达到了与问题的上下文类似的观点:无论出于何种原因(通常是为了稳定残差),我们都重新表达了变量,但是我们发现与自变量的关系是非线性的。因此,现在我们要重新表达自变量,以使关系线性化。这是通过相同的方式完成的,只是颠倒了x和y的作用:

parms <- threepoint(y[i3], temperature[i3])
x <- box.cox(temperature, parms)

parms(1,253.75)25411


2732542732541/(1x)

2540


2
您好,亲爱的Whuber。多么有趣的答复,我很高兴地阅读,谢谢!(我也将稍作研究,看它如何解决我正在处理的问题)
Tal Galili 2012年

3
n2data <- cbind(temperature, pressure)R

2
兰德罗尼在物理,化学和生物学理论中以及通过几何学的考虑,积分和小数次幂通常会出现。(例如,当变量是体积时,其立方根是长度(可以解释),而其第七根没有简单的几何解释。)其他幂很少具有这种解释。
ub

3
@Frank是的;它无疑是一种探索性技术。注意,它甚至不声称具有预测性。探索只能提出前进的道路。不过,可以想象将建模预算的4 df分配给这些转换,并且可以使用Tukey的方法或其他方法将估计值自动合并到拟合算法中(ML很可能)。
ub

5
YYλ

11

看看这些约翰·福克斯(John Fox)的“回归诊断”幻灯片(可从此处获得,并附带参考文献),其中简要讨论了转换非线性的问题。它涵盖了Tukey用于选择幂变换的“凸出规则”(通过公认的答案解决),还提到了Box-Cox和Yeo-Johnson变换家族。请参阅幻灯片的3.6节。有关同一作者的更正式观点,请参见J. Fox,《应用回归分析和广义线性模型》,第二版(Sage,2008年)

至于实际的R包,绝对可以看一看由J. Fox和S. Weisberg编写的汽车包。该软件包随附J. Fox和S. Weisberg,《应用回归的R伴侣》第二版(Sage,2011年),这是另一本必读的书。使用该软件包,您可以从basicPower()(简单的幂变换),bcPower()(Box-Cox变换)和yjPower()(Yeo-Johnson变换)开始。还有powerTransform()

函数powerTransform用于估计单变量或多变量随机变量的归一化变换。

查看这两本书,以获取有关这些转换背后的理论和计算方法的更多详细信息。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.