数据不满足正态分布?试试Box-Cox变换吧!

转自个人微信公众号【Memo_Cleon】的统计学习笔记:数据不满足正态分布?试试Box-Cox变换吧!

当需要对不满足正态分布的数据进行变换时,统计教材上常常给出的方法有对数变换、平方根变换、倒数变换等,判断哪种方法更合适并不是一件容易的事情。有没有一种“万能”的变化方法减少试错的次数?如果有,那一定是Box-Cox变换。Box-Cox变换是一种广义幂变换方法,可以明显地改善数据的正态性和方差齐性,但变换后数据是否满足正态性仍需要考察验证。

Box-Cox变换一般形式为:

y为连续变量,且要求取值为正(若取值为负则需要对原始数据加上一个常数使其为正)。λ为变换参数,不同的λ对应不同的变换方式,当λ=0时相当于对数变换,λ=2时等同于平方变换,λ=1时等同于线性变换,相当于没有进行变换,λ=1/2时等同于平方根变换,λ=-1时等同于倒数变换。通过求解λ值即可确定具体的变换方式,λ值的估计方法可采用最大似然估计。

对于Box-Cox变换,我们在《Box-Cox变换:非正态数据的处理》一文中介绍过JMP的操作方法。有读者留言说JMP中保存的变换后结果跟公式算出来的不一致,查看了一下JMP的帮助文件(如下),这主要是变换的方法和λ取值范围上存在差异造成的。
此次笔记是Box-Cox的stata操作。STATA里面直接提供的是Box-Cox回归,我们可以利用这个命令获得参数λ。据说stata在很早的版本(6.0)中存在这个变换过程,而且可以直接生成变换值,不知道为何现在的高版本反而精简了这一部分结果,直接给出最佳λ值及其变换后的回归结果。其实在实际应用中,我们会采用最佳的λ变换结果吗?显然大概率不会,比如你求得λ=0.521,按照这个λ值变换后的变量啥实际意义也没有,我们可能会考虑取其最临近值(λ=0.5)的变换,这样反而更容易解释。
STATA里面的Box-Cox回归又具体分为四个模型:θ模型、λ模型、仅对因变量进行变换的模型和仅对自变量变换的模型。θ模型可以对因变量和自变量进行不同的变换,λ模型是对因变量和自变量进行相同的变换。当然可以通过选项调整实现只对因变量或者只对自变量/部分自变量进行变换。stata帮助文件概述如下:

(1)θ模型

(2)λ模型

(3)仅变换左侧变量模型(仅对因变量进行变换)

(4)变换右侧变量模型(对自变量进行变换)

示例同《Box-Cox变换:非正态数据的处理》,拟对示例中的WBC(白细胞)进行Box-Cox变换。
【1】首先看下变量WBC的正态性情况:

图形>>分布图>>直方图,变量选择WBC,确定。也可以采用该菜单下的正态分位图。

histogram WBC

(bin=16, start=2.7, width=1.50875)

直方图显示,数据大体呈右偏态。

统计>>汇总,表格和假设检验>>分布图和检验>>Shapiro-Wilk正态性检验,变量选择WBC,确定。也可以采用Shapiro-Francia正态性检验,也可以采用正态分位图检验。

swilk WBC

Shapiro-Wilk正态性检验表明数据不满足正态分布。

【2】接下来我们对数据进行Box-Cox变换

统计>>线性模型及相关>>Box-Cox回归,因变量选择WBC(白细胞)。我们只考虑对变量WBC进行变换,自变量不进行选择。默认仅对因变量进行变换的模型。确定。
结果如下:

首先生成对应菜单操作的命令:boxcox WBC,model(lhsonly)

结果包括迭代日志、模型拟合的基本信息和三个表。本例只对WBC进行Box-Cox变换,并未纳入自变量,因此模型拟合信息就是只有截距的空白模型的信息。

第一个表是Box-Cox 变换参数λ的结果,在stata中只对左侧变量进行变换的模型中用θ来表示(见前面的模型介绍),λ=-0.2320,即WBC变换值为(WBC^(-0.2320)-1)/(-0.2320),如前所言,这种变换的结果可能是最佳的但并没有实际意义,在实际变换时可以考虑取其临近值(λ=0)的变换,这样可能会更容易解释。统计学结果也显示但该值(与0相比)并无统计学差异,这也说明λ取值为0是合适的。

第二个表包含尺度变量参数的估计值,会显示各个自变量的参数估计值模型标准差。当存在自变量时,可在Box-Cox回归对话框中过的[报告]选项卡中选中执行似然比检验,这样我们就可以获得模型参数的统计检验结果。本例只是对因变量进行了变化,该表实际意义不大。经过变换后WBC的均值为1.6555(模型截距),标准差为0.2435。

第三个表包含了Box-Cox变换中三个常用函数的限制性似然比检验输出结果,即倒数变换(λ=1)、对数变换(λ=0)和线性回归(λ=1,相当于不进行变换),结果显示倒数变换和线性回归被拒绝,而对数变换无统计学差异,这也说明我们采用取λ=-0.2320的临近值λ=0变换是合适的。

【3】验证一下变换后的结果:
STATA16版也没有生成变换后变量数据,这个的确令人费解,但我们可以根据获得的λ值进行计算。
数据>>数据编辑器>>数据编辑器(编辑),或者直接在工具栏中点击数据编辑器(编辑)的快捷键,注意不是数据编辑器(浏览)。双击最后一列,在弹出的创建新变量对话框中,输入变换后的变量名称BCwbc,根据前面求得的λ=-0.2319767和Box-Cox变换公式

通过创建按钮或者手动输入变换公式:(WBC^(-0.2319767)-1)/(-0.2319767)。相应命令为:

generate BCwbc = (WBC^(-0.2319767)-1)/(-0.2319767)

在数据编辑器(编辑)窗口或者返回stata操作界面:
数据>>描述数据>>摘要统计;
或在stata操作界面:
统计>>汇总,表格和假设检验>>摘要和描述性统计>>摘要统计;
统计>>汇总,表格和假设检验>>摘要和描述性统计>>摘要统计。
summarize BCwbc
mean BCwbc
结果如下,可以看到变化后的均值是1.6555,标准差是0.2435,这正是前面我们表2中模型截距和标准差。
【4】WBC变换后的正态性检验:方法同前,结果显示变换的数据已经满足正态分布。
图形>>分布图>>直方图,变量选择BCwbc,确定。
histogram BCwbc

(bin=16, start=.88712829, width=.08837758)

统计>>汇总,表格和假设检验>>分布图和检验>>Shapiro-Wilk正态性检验,变量选择BCwbc,确定。

swilk BCwbc

转自个人微信公众号【Memo_Cleon】的统计学习笔记:数据不满足正态分布?试试Box-Cox变换吧!

END

(0)

相关推荐