博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何进行数据变换(转)
阅读量:5227 次
发布时间:2019-06-14

本文共 3344 字,大约阅读时间需要 11 分钟。

如何对右偏数据进行变换

现在,我们需要分情况讨论一下。在实际生活中,最常见的情形是靠近正无穷的一侧有一个长尾巴(如图1左),习惯上称为「右偏」(right-skewed)或「正偏态」(positive skewness)。许多人会有点儿困惑,觉得图上分布的那个峰明明是向左边负数一侧偏的,怎么叫「右偏」「正偏态」呢?要记住,当我们描述偏态的方向时,说的是分布的尾巴,而不是峰。这本身没有什么大道理可讲,就是一种约定俗成而已。

样本分布不正态?数据变换来救场!-数据分析网

图1 一个右偏(正偏态)的总体分布

 

右偏的分布之所以常见,是因为有许多变量的取值有一个明确的下界(通常是 0 )而没有上界。最典型的例子就是人均收入。这个例子我们在《》里也提到过。首先,收入不可能是负的。其次,对于经济状况正常的社会,处于贫困状态的人相对较少,多数人都在小康水平上下浮动,这就保证了总体分布基本呈现中间高、两边低的形态。然而,总会有极少数像比尔盖茨、巴菲特那样的巨富,待在分布右侧很远的地方——而且更虐心的是,收入这事儿可是没有上限的。同样的讨论适用于许多其他情形,在生物医学中,很多变量的分布都有类似的性质,尤其是那些健康人群正常值比较小(因而峰值比较靠近下限)的生理指标。

 

相信你还记得我们在上上集《》里说过的判断样本分布正态性的两个方法——频率直方图和 q-q 图。快速重温一下,假设我们有一个来自图 1 左边的总体分布的样本,如果对此样本画出频率直方图和 q-q 图(图 1 中、右),可以看到频率直方图大体和总体分布相似,样本分布右侧有个尾巴,而 q-q 图中各数据点并不完全在一条直线上,这些都说明样本分布不太正态。(忘了 q-q 图的意义和读法?)

 

好了,像这样一个分布,我们应该用怎样的函数来作变换?记得我们说过,函数的最基本条件需要是单调的。为了使数据点的大小次序不会颠倒过来,我们进一步把考虑范围缩小到单调增函数。为了要把分布右侧的尾巴缩短一点,我们需要这样一个函数,它在 y 比较小的时候增长得比较快,而在 y 比较大的时候增长得慢一些。这样一来,在原来分布右边相距较远的任意两个点之间的距离就会相对变小,从而分布的偏态就能得到改善了。

 

回想一下中学数学,有什么常见的单调增长函数是越涨越慢的呢?不难想到,对数函数 、平方根 、甚至三次方根 等函数都具备这样的性质(图 2)。满足这样性质的函数其实有无数个,这几个由于形式简单,因此比较常用。对数变换另外还有一个优良的性质,使其成为了比较受欢迎的选择,这个性质我们会在本文末尾提到。

 

样本分布不正态?数据变换来救场!-数据分析网

图2 常见的用于右偏分布的变换函数

 

从图 2 中也能看到,这些变换函数对 y 较大时的压缩程度不同,变换后 f(y) 的取值范围也不同。到底哪一个效果更好(也可能效果都不好),取决于具体的问题和数据。通常的做法是尝试若干种变换函数,然后对变换后的新样本重新检验正态性(如频率直方图、q-q 图或夏皮罗-威尔克检验等方法),选择正态性最好的样本用于后续分析。

 

下面我们就分别用对数函数样本分布不正态?数据变换来救场!-数据分析网和平方根函数样本分布不正态?数据变换来救场!-数据分析网对图1中右偏的样本来做个变换,看看效果如何(对数变换的结果见图 3,平方根变换见图 4)。

样本分布不正态?数据变换来救场!-数据分析网

图3 使用对数函数对图1中的右偏样本作变换

 

样本分布不正态?数据变换来救场!-数据分析网

图 4 使用平方根函数对图1中的右偏样本作变换

 

如果把图 3、图 4 和前面的图 1 做比较,容易看到,这两个变换都对总体和样本的正态性起到了改善作用。不论从总体分布和频率直方图的对称性,还是从 q-q 图中数据点与直线的偏离程度来说,变换后的分布都变得更正态了。如果我们看得更仔细一点,在这个例子中对数函数的效果稍微更好一些,因为变换后总体和样本分布几乎完全是对称的,而平方根变换后分布还是有一点右偏。

 

要记住的是,这只是一个个别例子,我们并不能就此认为对数变换和平方根变换总能起到良好的效果。有时候,数据变换非但不能改善正态性,甚至还会引进原本没有的偏态(图 5)。因此,当我们对数据作变换时,千万不能想当然,觉得做了变换就一定能把分布给变正态了。做变换后,重新检查正态性是必不可少的步骤。

 

样本分布不正态?数据变换来救场!-数据分析网

图5 一个对数变换的不成功例子

 

第一列:原数据的总体分布、样本频率直方图和 q-q 图(这个分布来自上一集《只有15 个标本,也能指望 t 检验吗?》中的倒数第二例)。

第二列:将样本进行对数变换后,新样本的频率直方图和 q-q 图(总体分布略)。可见样本从原来的右偏变成了左偏。

另外,你也许注意到,前面讨论的几个变换函数都要求原数据大于 0。如果数据里有负数或 0 怎么办?我们只需将所有数据加上一个正的常数,使得数据全部为正即可。

 

如何对左偏数据进行变换

前面我们讨论了对右偏数据的变换方法,那么左偏的数据又该如何?在现实生活中,左偏的分布比右偏稍微少见一些。最经典的例子当属人或动物的寿命(图 6)。在环境条件良好的情况下,动物在较低年龄就死亡的概率很低,但是当年龄达到该物种本身生物学特性所容许的某个最高水平前后,死亡率就会大幅升高,然后再迅速降低(因为已经没有什么个体能活那么长了),因而造成分布的左偏。

 

样本分布不正态?数据变换来救场!-数据分析网

图6 人或动物的寿命的分布通常是左偏的

本图为 2010-12 年英国女性在各年龄每 100,000 人中的死亡人数的期望的分布。

 

不难想到,左偏和右偏的数据互为镜像关系,因此一种转换的办法是,先把数据取个负号(为了使数据重新变回正数,往往还要再加个常数),然后就按右偏数据的办法处理。另一种解决方案则是使用增长率越来越快的一类单调增函数,如样本分布不正态?数据变换来救场!-数据分析网样本分布不正态?数据变换来救场!-数据分析网等。与之前相似,没有一种变换是万能的,因此我们在数据变换后必须重新检查样本的正态性。

 

至此为止,我们提到了许多可用于数据变换的函数,它们各有所长,我们得根据实际问题的特点按需取用。选择最合理的变换形式,不是一件容易的事。大约 50 多年前,两位统计学家兼好基友 Box 和 Cox(不要问我为什么他俩的名字是押韵的)专门为深度懒人癌患者提出了一套变换方法,称为 Box-Cox 变换,可以根据一定的标准自动找出最佳的变换函数。

 

数据变换的局限性

在今天这一集里,我们讨论了利用数据变换来改善正态性的方法。虽然我们是针对 t 检验对于正态性的要求而引出的这个话题,但是这一方法可以用在许多需要总体或样本分布满足正态性的场合,比如我们以后将会讲到的方差分析、线性回归等。正如所有科学方法一样,它并不是全能的。要用好这个工具,我们还需要对其局限性有所了解。

 

第一,数据变换并不能解决所有非正态性的问题。从上面的一些例子里,我们已经能看到,对于特定的某组数据,一个变换方法并不一定能把数据变为服从正态分布。有些时候,即便我们穷尽所有不同形式的函数,一个分布也不可能被转化为正态分布——比如说离散型的分布。还有一些其他的分布(比如有不止一个峰的分布),可以通过一些奇形怪状的变换函数弄成正态的,但这会不可避免地对数据带来太多的扭曲,进一步的分析也就很成问题了。

 

第二,对数据进行变换后,重新进行原来计划的统计检验,其意义会发生变化。比如说,我们想要比较两组数据的均值是否有差别,但是发现样本分布并不正态,于是对数据做了一个平方根变换。当我们对变换后的数据使用 t 检验时,我们检验的不再是两组数据均值的差别,而是在检验样本中数据平方根的均值之间的差别。虽然对所有数据开平方根后取均值仍然是对数据大体趋势的一个概括,但是仍然与变换前数据的算术平均值有着不同的意义,也失去了我们曾经在《》中讨论过的算术平均数的优点。对于其他更复杂的变换,我们到底是在检验什么就更加模糊了。

 

值得一提的是,这里有一个例外就是对数变换!我们来看看为什么。对数变换以后,新的数据的算术平均数是:

样本分布不正态?数据变换来救场!-数据分析网

上面的推演运用了对数运算的基本性质。在最后一步对数符号里的,被称为几何平均数(geometric mean)。和我们熟悉的算术平均数一样,它也是表示样本数据集中趋势的一个统计量。换言之,如果进行对数变换后的数据平均值使用 t 检验,实际上是在对样本的几何平均数做统计推断。正是因为对数变换有相对明确的意义,它也成为了数据变换函数里比较流行的一种。

 

转载于:https://www.cnblogs.com/gczr/p/7119826.html

你可能感兴趣的文章
数据库锁机制及乐观锁,悲观锁的并发控制
查看>>
图像处理中双线性插值
查看>>
RobHess的SIFT代码解析之RANSAC
查看>>
03 线程池
查看>>
201771010125王瑜《面向对象程序设计(Java)》第十三周学习总结
查看>>
手机验证码执行流程
查看>>
python 基础 ----- 变量
查看>>
设计模式课程 设计模式精讲 2-2 UML类图讲解
查看>>
Silverlight 的菜单控件。(不是 Toolkit的)
查看>>
:hover 鼠标同时触发两个元素变化
查看>>
go语言学习十三 - 相等性
查看>>
Idea 提交代码到码云(提交到github也大同小异)
查看>>
c#连接excel2007未安装ISAM解决
查看>>
Mono 异步加载数据更新主线程
查看>>
初识lua
查看>>
我是插件狂人,jDuang,jValidator,jModal,jGallery
查看>>
张季跃 201771010139《面向对象程序设计(java)》第四周学习总结
查看>>
如何解除循环引用
查看>>
android中fragment的使用及与activity之间的通信
查看>>
字典【Tire 模板】
查看>>