分享

Box-Cox变换,适合什么情况?

 CoLiN_shsmu 2017-10-27 发布于上海

  残差散点图  


偶遇一份关于树木基本属性的数据,某研究者想探讨体积(y)和树高(x1)、周长(x2)的相关关系,因变量体积y是定量变量,所以我们首选线性回归进行分析。为了验证模型是否满足线性回归的前提条件,我们可以通过残差散点图进行判断。具体的判断方法可查看本公众号往期文章《多重线性回归前提条件的应对》,下图是拟合线性回归方程y~x1+x2,所得到残差散点图,纵坐标是残差,横坐标是预测值。



  非线性分布  


从上图可知,我们所拟合的回归方程存在明显的非线性关系。当然,我们可以通过直接拟合广义线性模型或非线性模型等,来处理非线性的问题,但这通常是最后的杀手锏,明智的做法应该是先采用相对简单的数据变换方法来尝试处理该类问题。数据变换可以对自变量进行,也可以对因变量进行,但往往考虑到拟合方程后对结果的可解释性,我们通常选择对自变量进行变换,适用于自变量做正态变换的方法可以查看本公众号往期文章《数据不正态,怎么办?》。


我们先通过直方图(见下图)考察一下各个变量的分布情况,发现自变量都基本符合正态分布的情况,存在问题的正是因变量,它呈明显的正偏峰分布。所以接下来我们考虑如何对因变量进行变换。



  Box-Cox变换公式  


除了上面遇到的例子,特别是在医学统计分析中,常会遇到因变量不满足正态分布的情况,我们就可以对因变量进行变换,Box-Cox变换是最常用的一种方法。Box-Cox变换的原理很简单,用两个公式就可以很好地解释。第一个公式为:


y'=(y+c)^λ-1/[λ*g^(λ-1)]


y'是变换后的因变量;g为因变量y的几何均数;当因变量y存在小于等于0的数据时,我们需要借助参数c对整个因变量数据进行平移,使得y+c>0;λ为最重要的变换参数,可以通过极大似然法进行估计,当所估计的λ为0时,上面的公式恒等于0,所以需要校正为以下公式:


y'=g*log(y+c)


  R语言实例  


下面我们采用R语言对开篇的例子进行Box-Cox变换以及变换后的回归分析。


#载入car包

library(car)

#估计变换参数λ

lambada=powerTransform(y~x1+x2)

#进行Box-Cox变换

y_bc=bcPower(y,lambda$lambda)

#变换后的线性回归

fit=lm(y_bc~x1+x2)

#查看残差散点图

plot(fit)


由散点图可知,通过Box-Cox变换后,残差散点的分布情况得到明显的改善,基本符合前提假设。



  参考文献  


  1. Box, G. E. P. and Cox, D. R. (1964). An analysis of transformations, Journal of the Royal Statistical Society, Series B, 26, 211-252.

  2. Kutner, M., Nachtsheim, C., Neter, J., and Li, W. (2004). Applied Linear Statistical Models, McGraw-Hill/Irwin, Homewood, IL.



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多