楼主: oxin224
44874 13

[学习分享] 【R语言 】boxcox变换 [推广有奖]

  • 0关注
  • 0粉丝

大专生

41%

还不是VIP/贵宾

-

威望
0
论坛币
2085 个
通用积分
0
学术水平
4 点
热心指数
5 点
信用等级
4 点
经验
910 点
帖子
27
精华
0
在线时间
62 小时
注册时间
2009-11-29
最后登录
2020-5-30

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
【前文说明]】其实自己是刚刚接触R语言的小白一枚,最近在学习的过程中遇到很多问题,比如最近纠结的这个boxcox变换问题。当时满怀希望的上论坛找,想求得操作说明,但是无奈放眼望去木有答案。可能与我一样的小白众多,大牛也不愿意解答这么easy的问题吧。所以秉承和小白们惺惺相惜的原则,就当做笔记了,把自己从国外网站翻译过来的东西,加上自己的操作写下来,对与不对,还请大牛指导。##############################################################################
1 什么是boxcox变换?
      在做线性回归的过程中,不可观测的误差可能是和预测变量相关,于是给线性回归的最小二乘法估计系数的结果带来误差,为了解决这样的方差齐性问题,所以考虑对相应应变量做Box-Cox变换,变换之后,可以一定程度上减小不可观测的误差和预测变量的相关性。 也就是说,在实际使用数据分析的时候,想对数据做正态性假设,但是数据往往是不是正态分布的。这个时候考虑boxcox变换。
2 boxcox变换
       具体的数学公式如下所示,通过确定λ的值来将x转换为正态分布——
      
(1)首先,在r中运行这个计算,要运用car这个package.命令如下——
       >install.packages("car")
       >library(car)
      其中,可以先看一下原数据的分布。如hist(wool$cycle)

(2)接下来,运用powerTansform函数,确定λ,然后以此为基础进行bcPower变换。
> summary(p1 <- powerTransform(Wool$cycles))
bcPower Transformation to Normality

                            Est.Power Std.Err. Wald Lower Bound Wald Upper
BoundWool$cycles -0.0473   0.1931          -0.4259           0.3313


Likelihood ratio tests about transformation parameters
                             LRT df         pval
LR test, lambda = (0)  0.05994796  1 8.065782e-01
LR test, lambda = (1) 27.29886008  1 1.743141e-07


hist(bcPower(Wool$cycles, p1$roundlam))

       其中需要说明的是,要进行powerTransform的函数,x中不能有0或者负数。因此,常用的做法是将x加上一定的数,平移后使其没有负数。
##############################################################################
以上是关于boxcox的方法。
以下是我在实际操作过程中的r代码,因为我计算得出的x中都是负数,所以我是对x取的相反数。不知道这样对不对。
x=read.csv("hedonic.csv",header=T)
z=read.csv("z.csv",header=T)
  m=0
  for(i in 1:3){
  m=m+exp(-z[,(i-1)*2+2]/188)*(1-exp(z[,(i-1)*2+1]/12))
  }
  m1=m/abs(min(m))   #########对m进行变换########
  m2=-m1
  summary(z<-powerTransform(m2))   #####decide the best λ ######
  p=bcPower(m2,0.1)      ########其中m2是需要变换的数据,0.1是上一步确定的最优的λ#############
  hist(p)

#############################################################################


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:boxcox box Cox R语言 Packages R语言

已有 3 人评分学术水平 热心指数 信用等级 收起 理由
aongao + 3 + 3 + 3 精彩帖子
missingjc + 1 + 1 + 1 精彩帖子
qoiqpwqr + 1 鼓励积极发帖讨论

总评分: 学术水平 + 4  热心指数 + 5  信用等级 + 4   查看全部评分

本帖被以下文库推荐

沙发
tmdxyz 发表于 2013-11-24 13:18:11 |只看作者 |坛友微信交流群

使用道具

藤椅
桃子精彩人生 在职认证  学生认证  发表于 2013-12-3 17:32:09 |只看作者 |坛友微信交流群
谢谢 谢谢

使用道具

板凳
小小泡椒 发表于 2014-3-24 11:03:20 |只看作者 |坛友微信交流群
你好,我想问下 for(i in 1:3){
  m=m+exp(-z[,(i-1)*2+2]/188)*(1-exp(z[,(i-1)*2+1]/12))
  }
这步是做什么用的,不是太懂,请楼主指教,谢谢啦

使用道具

报纸
小小泡椒 发表于 2014-3-24 15:33:21 |只看作者 |坛友微信交流群
还有,根据这里Likelihood ratio tests about transformation parameters
                               LRT               df         pval
LR test, lambda = (0)  0.05994796  1 8.065782e-01
LR test, lambda = (1) 27.29886008  1 1.743141e-07是怎样确定lambda的确定值的?

使用道具

地板
匡昊 发表于 2014-3-27 17:47:35 |只看作者 |坛友微信交流群
程序包TSA好久可以之间进行boxcox变换,命令式BoxCox.ar(data)

使用道具

7
Tiramisu023 发表于 2015-5-9 10:34:31 |只看作者 |坛友微信交流群
附件的图片是关于boxcox转换的公式,下面的是实现的R代码。用的是R软件包自带的例子,需要先用MASS包中的boxcox()求出当图2 公式中L 最大时的lambda值,即均衡值,该值即为最佳变换模型。然后根据图1中的公式进行转化(用car包里的bcPower()进行转化)。你可以先执行下下面的例子,看看效果。
# Box-Cox transformation
library(MASS)
# lambda-likelyhood function
tr <- boxcox(Volume ~ Height, data=trees, lambda = seq(-1, 1, length=10))
lambda <- tr$x[ tr$y == max(tr$y) ]; lambda # 求得lambda 为-0.19
library(car)
Volume2 = bcPower(trees$Volume, lambda) # Box-Cox transformation
par(mfrow=c(1,4))
plot(trees$Volume); plot(Volume2)
hist(trees$Volume); hist(Volume2)

2.png (30.49 KB)

2.png

1.png (33.31 KB)

1.png

使用道具

8
布鲁斯小然 学生认证  发表于 2016-3-12 17:18:30 |只看作者 |坛友微信交流群
Is the length of seq in lambda wrong? I think it should be .01 or .1.

使用道具

9
名字都重复 发表于 2017-7-17 18:14:31 |只看作者 |坛友微信交流群
想请问一下,我做完之后用lillie检验的时候发现转换之后的数据还是非正态呀,但是直方图接近正态了,请问您做完之后有用过什么正态性检验吗?
我先用powerTransform找到了λ,然后用bcPower(x,λ)进行的转换

使用道具

10
Planthopper 发表于 2018-2-7 10:38:53 |只看作者 |坛友微信交流群
Tiramisu023 发表于 2015-5-9 10:34
附件的图片是关于boxcox转换的公式,下面的是实现的R代码。用的是R软件包自带的例子,需要先用MASS包中的bo ...
大神,R代码中的lambda<-trx[try==max(try)] trx try 指的是什么啊?敲的时候出错了

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-25 14:30