分享

一种简单实用且超级牛掰的数据变换方法:BOX-COX变换

 生物_医药_科研 2019-01-24


Box-Cox变换是统计建模中常用的一种数据变换,用于连续的响应变量不满足正态分布的情况。比如在使用线性回归的时候,由于残差epsilon不符合正态分布而不满足建模的条件,这时候要对响应变量Y进行变换,把数据变成正态的。Box-Cox变换,变换之后,可以一定程度上减小残差和预测变量的相关性。

Box-Cox变换的形式是:


使用这个变换的问题是lambda究竟取多少为好?这个值只能通过估计得到。BOX-COX变换相比普通的数据变换方式坚持正态性假设,通过各种数据转换函数将非正态数据转换为正态,常用的变换方式有以下几种:

(1)对数变换;

(2)平方根变换;

(3)倒数变换;

(4)平方根后取倒数;

(5)平方根后再取反正弦;

(6)幂变换;


1是来自某用户满意度调查问卷的数据,通过大量的重复试验,得到如下规律:P值为0.003视为平方变换的一个界点,如果正态性检验得到的P值大于0.003,通过平方变换一般可以实现正态化转换,否则通过平方转换很难实现正态性转换,其他几种方式也往往达不到正态性转换的目的。

上述问题下,当P值小于0.003时,由于普通数据转换方法很难使其实现正态化处理,运用BOX-COX变换方法对原始数据进行正态化处理就表现出巨大的价值。当P值大于0.003时,两种变换方法均可,但优先考虑普通的平方变换。

由上述BOX-COX变换的式子可知,BOX-COX变换是对反应变量Y进行变换,显然YBOX-COX变换是一个变换族,由可变参数lambda决定具体变换的形式。当lambda等于0时,该变换就是对数变换。对于参数lambda的选择,一般是通过参数估计的方法得到,这里就不详述。这里只讲在软件中如何选择参数lambda,下图是拟合的模型的似然函数的最大值随lambda变化的曲线图,一般R软件代码中可以直接给出下图,BOX-COX变换的最优参数lambda的选择即为图中的最高点。从图中可以看出在lambda0.5左右,似然函数取到最大值,即对因变量取平方根变换即可实现正态性转换。


R里边的相关函数的函数很多,一般可以分成两类,针对(线性)模型的和针对数据的变换。

例如:MASS包的boxcox函数

这个函数是针对线性模型计算一个最优的lambda ,采取的方法是最大似然估计。在关于lambda的对数最大似然图像上找估计值的95%置信区间。对lambda的搜索的默认范围是[-2,2],步长0.1。结果会输出一张表示似然结果的图。当然可以自定义搜索的范围或者步长。 使用这个函数的问题是只能对模型(lmaov寻找最优\lambda,而且还得不到 \lambda的估计的精确值。

library(MASS)

library(car)

library(pander)

l <- lm(volume="" ~="" log(height)="" +="" log(girth),="" data="trees)">

qqPlot(l) #残差的QQ图,不大符合正态分布


boxcox(Volume ~ log(Height) + log(Girth), data = trees) #lambda


boxcox(Volume ~ log(Height) + log(Girth), data = trees, lambda = seq(-0.08,
0, length = 10))# 缩小寻找的范围,大约是-0.065(中间的线)

volume <- (trees$volume^(-0.65)="" -="" 1)/(-0.065)="">变换
trees.t <- cbind(trees,="" volume)="">重新拟合模型
l.t <- lm(volume="" ~="" log(height)="" +="" log(girth),="" data="trees.t)">建立线性模型
qqPlot(l.t) #残差可认为是正态了

利用原始数据直接分析的结果:

数据变换后的结果:


从结果看,使用BOX-COX变换后的数据得到的回归模型优于变换前的模型,变换可以使模型的解释力度等性能更加优良,残差可以更好的满足正态性、独立性等假设前提、降低了伪回归的概率。一般BOX-COX变换都可以保证将数据成功的正态变换,但在二分类变量或者较少水平的等级变量的情况下,不能成功进行变换,此时,我们可以考虑使用广义线性模型或者数据挖掘方法。

进行数据变换不一定能达到我们的预期目标,没有一个数学原理保证所做的数据变换能够在各个方面对原始数据有所改善,更常见的是,仅仅使原始数据的一个或者几个方面得到改善。BOX-COX变换的最大优势在于对选择变换的问题给出了一个系统化的处理方法,将寻找变换的问题转换为估计参数的过程.


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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多