词条 | box-cox变换 |
释义 | 简介:在做线性回归的过程中,不可观测的误差可能是和预测变量相关,于是给线性回归的最小二乘法估计系数的结果带来误差,为了解决这样的方差齐性问题,所以考虑对响应变量做Box-Cox变换,变换之后,可以一定程度上减小不可观测的误差和预测变量的相关性。但是选择的参数要适当,使用极大似然估计得到的参数,给以使上述过程的效果更好。当然,做过Box-Cox变换之后,方差齐性的问题不一定会消失,做过之后仍然需要做方差齐性的检验,看是否还需要采用其他方法。 1 Box-Cox变换 在回归模型号中,Box-Cox变换是对因变量Y作如下变换: (1.1) 这里是一个待定变换参数。对不同的,所做的变换自然就不同,所以是一个变换族。它包括了对数变换(=0),平方根变换()和倒数变换(=-1)等常用变换。 图1. 变换前变量的分布 图2.变换后变量分布 对因变量的n个观测值,应用上述变换,得到变换后的向量 (1.2) 即要确定变换参数,使得满足 (1.3) 也就是说,通过对因变量的变换,使得变换过的向量与回归自变量具有线性相依关系,误差也服从正态分布,误差各分量是等方差且相互独立。 以极大似然法来确定。因为,所以对固定的,,的似然函数为 (1.4) 这里为变换Jacobi的行列式 (1.5) 当固定时,是不依赖于参数和的常数因子。的其余部分关于和求导数,令其等于0,可以求得和的极大似然估计 (1.6) (1.7) 为了求的最大值,考虑到lnx是x的单调函数,对求对数。略去与无关的常数项,得到 (1.8) 其中 (1.9) (1.10) (1.11) (1.9)式对Box-Cox变换带来很大方便,因为为了求的最大值,只需求残差平方和的最小值。 2 单变量的Box-Cox变换设变量经变换后, (2.1) 对固定的,,的似然函数为 (2.2) 同为变换Jacobi的行列式 (2.3) 求得和的极大似然估计为 (2.4) (2.5) 对极大似然函数作对数变换 (2.6) 化简得 (2.7) 其中 (2.8) (2.9) (2.9)亦即为几何平均值。 为了简单起见,重新将Box-Cox变换定义为 (2.10) 为了最大化,只须最小化。 3 黄金分割搜索法黄金分割法(Golden Section Method),是用于在单峰函数区间上求极小值的一种方法。其基本思想是通过取试探点和函数值比较,使包含极小点的搜索区间不断减少,当区间长度缩短到一定程度时,就得到函数极小点的近似值。 设是一元二次方程 (3.1) 的正根,即。 对于函数,先在搜索区间[a,b]上确定两个试探点,其中左试探点为 (3.2) 右试探点为 (3.3) 再分别计算这两个试探点的函数值,。由单峰函数的性质,若,则区间内不可能有极小点,因此去掉区间,令a’=a,b’=,得到一个新的搜索区间。若,则区间内不可能有极小点,去掉区间,令a’=,b’=b,得到一个新的搜索区间。 类似上面的步骤,在区间[a’,b’]内再计算两个新的试探点 (3.4) (3.5) 比较函数值,得到新的区间。 在上述方中,事实上每次迭代并不需要计算两个试探点及函数值。下面对新的试探点进行分析。 (1) 若,则去掉区间,那么新的右试探点为 (3.6) 注意到是方程(3.1)的根,因此有 (3.7) 即原区间的左试探点。 (2) 若,则去掉区间,那么新的左试探点为 (3.8) 即原区间的右试探点。 因此在上述计算过程中,只需要计算一个新试探点和一个点的函数值。 算法: (1) 置初始搜索区间[a,b],并置精度要求,并计算左右试探点 ,,其中, 及相应的函数值,。 (2) 如果,则置 b=,=,, 并计算 , 否则 a=,, 并计算 , (3) 若|b-a|,如果,则置问题的解;否则置,停止计算。否解转到(2)继续计算。 4 正态分布检验I. W检验 W检验是S.S.Shapiro和M.B.Wilk1965年提出来的,这种方法在样本容量3n50时适用。 W检验即检验假设 :总体服从正态分布 利用W检验的方法检验原假设的步骤如下 (1) 把n个样本观测值按由小到大的次序排列成 (2) W检验的统计量为 (4.1) 其中表示样本均值,的值可查表得。表示数的整数部分。 将的值代入(3.1)式计算统计量W的值。 (3) 根据给定的检验水平和样本容量n查表得统计量W的的分位数。 (4) 作出间判断:若W<,则拒绝,认为总体不服从正态分布;若W,则不拒绝。 II. D检验 W检验是一种有效的正态性检验方法,可惜它只适用于容量为3至50的样本。1971年D’Agostino提出了D’Agostino检验(简称D检验)。这种检验不需要附系数表,它所适用的样本容量n的范围为50n1000。 进行D检验的步骤如下: (1) 把n个样本观测值按由小到大的次序排列成 (2) D检验的统计量为 (4.2) 其中 (4.3) 按(4.2)和(4.3)式计算统计量Y的值。 (3) 根据给定的检验水平和样本容量n查表,得统计量Y的分位数和1-分位数; (4) 作出判断:若Y<或Y>,则拒绝,否则不拒绝。 附: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) |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。