基于R语言进行Box-Cox变换

2018 年 11 月 19 日 R语言中文社区

点击上方蓝色字体,关注我们

作者简介

作者:吴健 中国科学院大学 R语言、统计学爱好者,尤其擅长R语言和Arcgis在生态领域的应用分享

个人公众号:统计与编程语言 

Q:
为什么要进行Box-Cox转换?
A:

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语言入门及数据挖掘
回复 
人工智能     三个月入门人工智能
回复 数据分析师  数据分析师成长之路 
回复 机器学习      机器学习的商业应用
回复 数据科学      数据科学实战
回复 常用算法      常用数据挖掘算法

登录查看更多
45

相关内容

【2020新书】实战R语言4,323页pdf
专知会员服务
98+阅读 · 2020年7月1日
【ICML2020】对比多视角表示学习
专知会员服务
52+阅读 · 2020年6月28日
基于深度学习的手语识别综述
专知会员服务
45+阅读 · 2020年5月18日
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
160+阅读 · 2020年5月14日
【干货书】R语言书: 编程和统计的第一课程,
专知会员服务
107+阅读 · 2020年5月9日
【经典书】Python数据数据分析第二版,541页pdf
专知会员服务
189+阅读 · 2020年3月12日
R语言机器学习:xgboost的使用及其模型解释
R语言中文社区
10+阅读 · 2019年5月6日
R语言自然语言处理:文本分类
R语言中文社区
7+阅读 · 2019年4月27日
R语言自然语言处理:情感分析
R语言中文社区
16+阅读 · 2019年4月16日
R语言自然语言处理:词性标注与命名实体识别
R语言中文社区
7+阅读 · 2019年3月5日
文本分析与可视化
Python程序员
8+阅读 · 2019年2月28日
R语言时间序列分析
R语言中文社区
12+阅读 · 2018年11月19日
R语言数据挖掘利器:Rattle包
R语言中文社区
21+阅读 · 2018年11月17日
独家分享--48页PPT解密数据可视化!
R语言中文社区
6+阅读 · 2018年6月19日
R语言之数据分析高级方法「时间序列」
R语言中文社区
17+阅读 · 2018年4月24日
xgboost特征选择
数据挖掘入门与实战
39+阅读 · 2017年10月5日
Meta-Learning to Cluster
Arxiv
17+阅读 · 2019年10月30日
Few-shot Learning: A Survey
Arxiv
362+阅读 · 2019年4月10日
Arxiv
135+阅读 · 2018年10月8日
Feature Selection Library (MATLAB Toolbox)
Arxiv
7+阅读 · 2018年8月6日
Arxiv
5+阅读 · 2018年6月12日
Arxiv
5+阅读 · 2015年9月14日
VIP会员
相关VIP内容
【2020新书】实战R语言4,323页pdf
专知会员服务
98+阅读 · 2020年7月1日
【ICML2020】对比多视角表示学习
专知会员服务
52+阅读 · 2020年6月28日
基于深度学习的手语识别综述
专知会员服务
45+阅读 · 2020年5月18日
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
160+阅读 · 2020年5月14日
【干货书】R语言书: 编程和统计的第一课程,
专知会员服务
107+阅读 · 2020年5月9日
【经典书】Python数据数据分析第二版,541页pdf
专知会员服务
189+阅读 · 2020年3月12日
相关资讯
R语言机器学习:xgboost的使用及其模型解释
R语言中文社区
10+阅读 · 2019年5月6日
R语言自然语言处理:文本分类
R语言中文社区
7+阅读 · 2019年4月27日
R语言自然语言处理:情感分析
R语言中文社区
16+阅读 · 2019年4月16日
R语言自然语言处理:词性标注与命名实体识别
R语言中文社区
7+阅读 · 2019年3月5日
文本分析与可视化
Python程序员
8+阅读 · 2019年2月28日
R语言时间序列分析
R语言中文社区
12+阅读 · 2018年11月19日
R语言数据挖掘利器:Rattle包
R语言中文社区
21+阅读 · 2018年11月17日
独家分享--48页PPT解密数据可视化!
R语言中文社区
6+阅读 · 2018年6月19日
R语言之数据分析高级方法「时间序列」
R语言中文社区
17+阅读 · 2018年4月24日
xgboost特征选择
数据挖掘入门与实战
39+阅读 · 2017年10月5日
相关论文
Meta-Learning to Cluster
Arxiv
17+阅读 · 2019年10月30日
Few-shot Learning: A Survey
Arxiv
362+阅读 · 2019年4月10日
Arxiv
135+阅读 · 2018年10月8日
Feature Selection Library (MATLAB Toolbox)
Arxiv
7+阅读 · 2018年8月6日
Arxiv
5+阅读 · 2018年6月12日
Arxiv
5+阅读 · 2015年9月14日
Top
微信扫码咨询专知VIP会员