为什么要进行Box-Cox转换?
Box-Cox是一种广义幂变换,统计建模中常用的变换,用于连续响应变量不满足正态时的情况。Box-Cox的一个显著的有点是通过求变参数λ来确定变换形式,而这个过程完全基于数据本身而无需任何先导信息,这比凭经验的对数,平方根变换更客观。
Box-Cox变换公式如下:
y必须取正值,y值为负,首先y+a,对不同的λ所做的变换不同。λ=0对数变换;λ=-1倒数变换;λ=0.5平方根变换。
下面本文将介绍基于R语言进行Box-Cox转换。
STEP1:加载程序包并读取数据
library(readxl)#此包可以读取电子表格数据
library(moments)#此包可进行偏度锋度计算
library(MASS)#基于此包进行box-cox转换
data<-read_excel(file.choose())#读取特定文件夹中的数据
STEP2:构建线性模型并检查残差是否满足正态分布
r1<-lm(y~x1+x2+x3+x4, data=data)#构建多元线性回归模型
hist(r1$residuals)#绘制残差频率分布图
skewness(r1$residuals)#计算偏度 结果
1.89
通过残差频率分布图和偏度值可以发现残差并不满足正态分布。
STEP3:进行Box-Cox转换,确定λ值
b <- boxcox(y ~ x1 + x2 + x3 + x4, data=data)
b
lambda <- b$x
lik <- b$y
bc <- cbind(lambda, lik)
bc[order(-lik),]#结果λ=-0.3时lik值最大,因此λ取值-0.3
STEP4:依据步骤3确定的λ值进行转换,并检查残差的正态性
r2 <- lm(1/y^(1/3) ~ x1 + x2 + x3 + x4, data=data)
hist(r2$residuals)
skewness(r2$residuals)#结果
-0.89
通过上述转换,可以看出残差分布已经近似正态了。
https://pan.baidu.com/s/123pM4Z3rXeGKI1DSOtgTPQ
提取码:fj8h
复制这段内容后打开百度网盘手机App,操作更方便哦
往期回顾:
R语言绘制流程图(一)
R语言绘制流程图(二)
R语言绘制双坐标轴的方法初探
大家都在看
2017年R语言发展报告(国内)
精心整理 | R语言中文社区历史文章合集(作者篇)
精心整理 | R语言中文社区历史文章整理(类型篇)
公众号后台回复关键字即可学习
回复
爬虫
爬虫三大案例实战
回复
Python
1小时破冰入门
回复
数据挖掘
R语言入门及数据挖掘
回复
人工智能
三个月入门人工智能
回复
数据分析师
数据分析师成长之路
回复
机器学习
机器学习的商业应用
回复
数据科学
数据科学实战
回复
常用算法
常用数据挖掘算法
R语言
Box
-
Cox
变换
实战(
Box
-
Cox
Transformation):将非正态分布数据转换为正态分布数据
#拟合两个回归模型(一个使用
box
-
cox
处理响应变量并获取最佳λ)
#创建两个Q-Q图可视化两个回归模型之间残差的差异
box
-
cox
变换
是将非正态分布数据集转换为正态分布数据集的常用方法。
这种方法背后的基本思想是使用以下公式为λ找到一些值,以便转换后的
我们
进行
数据转换的原因是:除了小样本可以考虑非参数,大部分的统计原理和参数检验都是基于正态分布推得。
关于
box
-
cox
转换的基础内容请看:
Box
Cox
-
变换
方法及其实现运用.pptx
了解极大似然估计:极大似然估计思想的最简单解释
通过上面的内容可以知道,
@
R语言
进行
Box
-
Cox
变换
R语言
进行
Box
-
Cox
变换
Box
-
Cox
变换
是
Box
和
Cox
在1964年提出的一种广义幂
变换
方法,是统计建模中常用的一种数据
变换
,用于连续的响应变量不满足正态分布的情况。
Box
-
Cox
变换
的主要特点是引入一个参数,通过数据本身估计该参数进而确定应采取的数据
变换
形式,
Box
-
Cox
变换
可以明显地改善数据的正态性、对称性和方差相等性,对许多实际数据都是行之有效的。
对某百货公司连续十年的销售业绩
进行
线性拟合。其中Xi为年份,Yi为对应销售额。采用
R语言
在许多情况下,为了满足经典线性模型的正态性假设,常常需要使用指数
变换
或者对数转化,使其转换后的数据接近正态,比如数据是非单峰分布的,或者各种混合分布,,虽然不一定起作用,但是不妨试试。
我们使用平日最常见的
box
-
cox
转换,因为之前看到有人问到如何使用,spss
进行
转换,到网上找了资料,是需要语法的,在spss中
进行
语法指令,显然相比较用R,还是很不方便的。
D=read.csv("/Use
Box
-
Cox
变换
的作用是把不怎么正态化的一组数,让它们变得更加正态化。详情可以参考百度百科:
Box
-
Cox
变换
。
R语言
有好几个包可以实现
Box
-
Cox
变换
,比如car、MASS、forecast。发现forecast是最简单而且容易理解的。
2.求最优的λ
比如对于随便一个数组y,例如
y=c(269,321,585,871,1475,2821,392,594,4950,2577,5...
1.消除异方差
代码实现如下:
data3.2&lt;-read.csv("C:/Users/Administrator/Desktop/data3.2.csv",head=TRUE)
library(MASS)
bc3.2&lt;-
box
cox
(y~x1+x2,data=data3.2,lambda=seq(-2,2,0.01))
# λ的取值为区间[-2,2]上步长为0.01的值,bc3.2中...
参加kaggle比赛过程中,看到很多人在预处理阶段会对某些特征X做如下操作 Y = log(1+X), 说是可以把这个特征的分布正态化, 使其更加符合后面数据挖掘方法对数据分布的假设. 自己试了一下,有时的确可以提高准确度,有时却降低了准确度,很好奇其中的原理,遂在网上搜索了一番,整理如下.
Y = log(1+X)这个操作的真名应该时
box
cox
变换
,用来降低X的skewness值,达到接近正...
Box
-
Cox
变换
是统计建模中常用的一种数据
变换
,用于连续的响应变量不满足正态分布的情况。比如在使用线性回归的时候,由于残差 \epsilon 不符合正态分布而不满足建模的条件,这时候要对响应变量Y
进行
变换
,把数据变成正态的。
变换
的形式是
之前在《笔记︱信用风险模型(申请评分、行为评分)与数据准备(违约期限、WOE转化)》中提到过WOE转换,WOE转换=分箱法=Logit值,与等深、等宽不同是根据被解释变量来重新定义一个WOE值
**笔者将其定位于对自变量的数据转换。
现在来看看对于因变量的数据转换:
BOX
-
COX
转换。**
内容主要参考交大的课件:
Box
Cox
-
变换
方法及其实现运用.pptx
线性回...
y=c(160,260,210,265,240,220,275,160,275,250)
x1=c(70,75,65,74,72,68,78,66,70,65)
x2=c(35,40,40,42,38,45,42,36,44,42)
x3=c(1,2.4,2,3,1.2,1.5,4,2,3.2,3)
shuju
shuju
shuju.reg=lm(y~.,data=shuju)#(2
Box
和
Cox
于1964年提出了一种基于极大似然法的幂转换模型。
Box
-
Cox
幂分布族是一种十分有用的连续分布族。其转换模型为
y(λ)={yλ−1λ,λ≠0lny,λ=0(1)(1)y(λ)={yλ−1λ,λ≠0lny,λ=0
y^{(\lambda)} =
\begin {cases}
\frac {y^\lambda-1} {\lambda},\lambda...
很高兴为您服务!我可以为您提供一个
R语言
版的多因素
Cox
分析函数,它可以帮助您完成多因素
Cox
模型的分析。它的代码如下:
cox
.multi.reg <- function(formula, data, subset, na.action) {
model <-
cox
ph(formula, data=data, subset=subset, na.action=na.action)
return(model)