1 BoxCox变换

在回归模型号中,Box-Cox变换是对因变量Y作如下变换:

Box-Cox变换            (1.1)

这里Box-Cox变换是一个待定变换参数。对不同的Box-Cox变换,所做的变换自然就不同,所以是一个变换族。它包括了对数变换(Box-Cox变换=0),平方根变换(Box-Cox变换)和倒数变换(Box-Cox变换=-1)等常用变换。

Box-Cox变换

图1. 变换前变量的分布

Box-Cox变换

图2.变换后变量分布

对因变量的n个观测值Box-Cox变换,应用上述变换,得到变换后的向量

Box-Cox变换          (1.2)

即要确定变换参数Box-Cox变换,使得Box-Cox变换满足

Box-Cox变换         (1.3)

也就是说,通过对因变量的变换,使得变换过的向量Box-Cox变换与回归自变量具有线性相依关系,误差也服从正态分布,误差各分量是等方差且相互独立。

  以极大似然法来确定Box-Cox变换。因为Box-Cox变换,所以对固定的Box-Cox变换Box-Cox变换Box-Cox变换的似然函数为

Box-Cox变换 (1.4)

这里Box-Cox变换为变换Jacobi的行列式

Box-Cox变换           (1.5)

Box-Cox变换固定时,Box-Cox变换是不依赖于参数Box-Cox变换Box-Cox变换的常数因子。Box-Cox变换的其余部分关于Box-Cox变换Box-Cox变换求导数,令其等于0,可以求得Box-Cox变换Box-Cox变换的极大似然估计

Box-Cox变换          (1.6)

Box-Cox变换 (1.7)

为了求Box-Cox变换的最大值,考虑到lnx是x的单调函数,对Box-Cox变换求对数。略去与Box-Cox变换无关的常数项,得到

Box-Cox变换 (1.8)

其中

Box-Cox变换 (1.9)

Box-Cox变换 (1.10)

Box-Cox变换 (1.11)

(1.9)式对Box-Cox变换带来很大方便,因为为了求Box-Cox变换的最大值,只需求残差平方和的Box-Cox变换最小值。

2 单变量的Box-Cox变换

设变量Box-Cox变换经变换后,

Box-Cox变换 (2.1)

对固定的Box-Cox变换Box-Cox变换Box-Cox变换的似然函数为

Box-Cox变换 (2.2)

Box-Cox变换同为变换Jacobi的行列式

Box-Cox变换 (2.3)

  求得Box-Cox变换Box-Cox变换的极大似然估计为

Box-Cox变换           (2.4)

Box-Cox变换           (2.5)

对极大似然函数作对数变换

Box-Cox变换 (2.6)

化简得

Box-Cox变换 (2.7)

其中

Box-Cox变换 (2.8)

Box-Cox变换 (2.9)

(2.9)亦即为几何平均值。

为了简单起见,重新将Box-Cox变换定义为

Box-Cox变换 (2.10)

为了最大化Box-Cox变换,只须最小化Box-Cox变换

3 黄金分割搜索法

黄金分割法(Golden Section Method),是用于在单峰函数区间上求极小值的一种方法。其基本思想是通过取试探点和函数值比较,使包含极小点的搜索区间不断减少,当区间长度缩短到一定程度时,就得到函数极小点的近似值。

  设Box-Cox变换是一元二次方程

Box-Cox变换 (3.1)

的正根,即Box-Cox变换

  对于函数Box-Cox变换,先在搜索区间[a,b]上确定两个试探点,其中左试探点为

Box-Cox变换 (3.2)

右试探点为

Box-Cox变换 (3.3)

再分别计算这两个试探点的函数值Box-Cox变换Box-Cox变换。由单峰函数的性质,若Box-Cox变换,则区间Box-Cox变换内不可能有极小点,因此去掉区间Box-Cox变换,令a’=a,b’=Box-Cox变换,得到一个新的搜索区间。若Box-Cox变换,则区间Box-Cox变换内不可能有极小点,去掉区间Box-Cox变换,令a’=Box-Cox变换,b’=b,得到一个新的搜索区间。

  类似上面的步骤,在区间[a’,b’]内再计算两个新的试探点

Box-Cox变换 (3.4)

Box-Cox变换 (3.5)

比较函数值,得到新的区间。

  在上述方中,事实上每次迭代并不需要计算两个试探点及函数值。下面对新的试探点进行分析。

(1) 若Box-Cox变换,则去掉区间Box-Cox变换,那么新的右试探点为

Box-Cox变换 (3.6)

注意到Box-Cox变换是方程(3.1)的根,因此有

Box-Cox变换 (3.7)

即原区间的左试探点。

(2) 若Box-Cox变换,则去掉区间Box-Cox变换,那么新的左试探点为

Box-Cox变换 (3.8)

即原区间的右试探点。

  因此在上述计算过程中,只需要计算一个新试探点和一个点的函数值。

算法:

(1) 置初始搜索区间[a,b],并置精度要求Box-Cox变换,并计算左右试探点

Box-Cox变换Box-Cox变换,其中Box-Cox变换

及相应的函数值Box-Cox变换Box-Cox变换

(2) 如果Box-Cox变换,则置

b=Box-Cox变换,Box-Cox变换=Box-Cox变换,Box-Cox变换,

并计算

Box-Cox变换Box-Cox变换

否则

a=Box-Cox变换,Box-Cox变换,Box-Cox变换

并计算

Box-Cox变换Box-Cox变换

(3) 若|b-a|Box-Cox变换,如果Box-Cox变换,则置问题的解Box-Cox变换;否则置Box-Cox变换,停止计算。否解转到(2)继续计算。

4 正态分布检验

I. W检验

W检验是S.S.Shapiro和M.B.Wilk1965年提出来的,这种方法在样本容量3Box-Cox变换nBox-Cox变换50时适用。

  W检验即检验假设

Box-Cox变换:总体服从正态分布

  利用W检验的方法检验原假设Box-Cox变换的步骤如下

(1) 把n个样本观测值按由小到大的次序排列成

Box-Cox变换

(2) W检验的统计量为

Box-Cox变换 (4.1)

其中Box-Cox变换表示样本均值,Box-Cox变换的值可查表得。Box-Cox变换表示数Box-Cox变换的整数部分。

Box-Cox变换的值代入(3.1)式计算统计量W的值。

(3) 根据给定的检验水平Box-Cox变换和样本容量n查表得统计量W的Box-Cox变换的分位数Box-Cox变换

(4) 作出间判断:若W<Box-Cox变换,则拒绝Box-Cox变换,认为总体不服从正态分布;若WBox-Cox变换Box-Cox变换,则不拒绝Box-Cox变换

II. D检验

W检验是一种有效的正态性检验方法,可惜它只适用于容量为3至50的样本。1971年D’Agostino提出了D’Agostino检验(简称D检验)。这种检验不需要附系数表,它所适用的样本容量n的范围为50Box-Cox变换nBox-Cox变换1000。

  进行D检验的步骤如下:

(1) 把n个样本观测值按由小到大的次序排列成

Box-Cox变换

(2) D检验的统计量为

Box-Cox变换 (4.2)

其中

Box-Cox变换 (4.3)

按(4.2)和(4.3)式计算统计量Y的值。

(3) 根据给定的检验水平Box-Cox变换和样本容量n查表,得统计量Y的Box-Cox变换分位数Box-Cox变换和1-Box-Cox变换分位数Box-Cox变换

(4) 作出判断:若Y<Box-Cox变换或Y>Box-Cox变换,则拒绝Box-Cox变换,否则不拒绝Box-Cox变换

附:Box-Cox变换的R代码

BoxCox_Trans<-function(x,interval,loop=1000,epsilon= .Machine$double.eps){

Likelihood_Log<-function(x,lambda){

y_lambda<-function(x,lambda){

gm<-exp(mean(log(x)))

if (lambda == 0)

log(x) * gm

else (gm^(1 - lambda)) * ((x^lambda) - 1)/lambda

}

y <- y_lambda(x, lambda)

(length(y)/2) * log(((length(y) - 1)/length(y)) * var(y))

}

GoldenSecSearch<-function(f,x,interval,loop, epsilon)

{

t<-(sqrt(5) - 1)/2

a<-min(interval)

b<-max(interval)

a_l<-a+(1-t)*(b-a)

a_r<-a+t*(b-a)

f_l<-f(x,a_l)

f_r<-f(x,a_r)

i<-1

while(abs(b-a)>epsilon){

i<-i+1

if(f_l<f_r){

b<-a_r

a_r<-a_l

f_r<-f_l

a_l<-a+(1-t)*(b-a)

f_l<-f(x,a_l)

}

else {

a<-a_l

a_l<-a_r

f_l<-f_r

a_r<-a+t*(b-a)

f_r<-f(x,a_r)

}

if(i>loop) break

}

Result<-list()

if(f_l<f_r) {

Result$minimum<-a_l

Result$Objective<-f_l

}

else {

Result$minimum<-a_r

Result$Objective<-f_r

}

Result

}

Output<-list()

Output<- GoldenSecSearch(Likelihood_Log,x,interval,loop,epsilon)

Output

}

进行变换的R代码

> attach(Prestige) //car package

> hist(income)

> BoxCox_Trans(income,seq(-3,3))

$minimum

[1] 0.1792894

$Objective

[1] 827.9459

> hist(income^0.1792894)

相关文章:

  • 2021-08-06
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-16
  • 2022-01-16
  • 2021-11-04
猜你喜欢
  • 2021-04-17
  • 2022-12-23
  • 2021-11-11
  • 2021-10-08
  • 2022-12-23
  • 2022-12-23
  • 2021-07-17
相关资源
相似解决方案