BOX-COX变换(R语言)

1.消除异方差

代码实现如下:

data3.2<-read.csv("C:/Users/Administrator/Desktop/data3.2.csv",head=TRUE)
library(MASS)
bc3.2<-boxcox(y~x1+x2,data=data3.2,lambda=seq(-2,2,0.01))
# λ的取值为区间[-2,2]上步长为0.01的值,bc3.2中保存了λ的值及其对应的对数似然函数值
lambda<-bc3.2$x[which.max(bc3.2$y)]  # 将使对数似然函数值达到最大的λ复制给lambda
lambda
y_bc<-(data3.2$y^lambda-1)/lambda  # 计算变换后的y值
lm3.2_bc<-lm(y_bc~x1+x2,data=data3.2)  # 使用变换后的y值建立回归方程
summary(lm3.2_bc)
abse<-abs(resid(lm3.2_bc))  # 计算残差的绝对值
cor.test(data3.2$x1,abse,method="spearman")  # 计算残差与x1的相关系数
cor.test(data3.2$x2,abse,method="spearman")  # 计算残差与x2的相关系数

输出结果如下所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  根据输出结果,使似然函数取值最大的 λ = 0.47 \lambda=0.47 。另外,残差绝对值与 x 1 , x 2 x_{1},x_{2} 的等级相关系数 t t 检验的 P P 值为0.07587,0.4266,在显著性水平为0.05时不显著,故可认为异方差被消除。

2.消除自相关

data2.2<-read.csv("C:/Users/Administrator/Desktop/data2.2.csv",head=TRUE)
bc2.2<-boxcox(y~x,data=data2.2,lambda=seq(-2,2,0.01))
lambda<-bc2.2$x[which.max(bc2.2$y)]
y_bc<-(data2.2$y^lambda-1)/lambda
lm2.2_bc<-lm(y_bc~x,data=data2.2)
summary(lm2.2_bc)
lambda

输出结果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  根据上面的输出结果可以知道,使似然函数取值最大的 λ = 1.21 \lambda=1.21
  进行DW检验可以得到:
  在这里插入图片描述
   D W = 1.4424 , P = 0.1035 DW=1.4424,P=0.1035 ,由此可知,在显著性水平为0.05时,新的残差序列不存在自相关,这表明BOX-COX方法成功地消除了序列自相关。

猜你喜欢

转载自blog.csdn.net/qq_38204302/article/details/86562759