• R语言
  • 看了帮助,还是看不懂MASS包中的boxcox变换怎么用

比如说x向量的数据不符合正态分布,要用MASS包boxcox函数转换为正态分布

x <- c(2.8,2,2.2,3.1,3.5,2.2,2.6,2.6,2.4,3.5,2.3,2.6,1.8)


boxcox怎么用呢,λ的值如何确定
</p>
7 个月 后

就我个人的粗浅理解:

x 经过 boxcox 变换后的形式 (x^λ+1)/λ 是正态分布,关键是如何选择λ。

先来模拟一组偏态数据:

<br />
x = rf(500,30,30)<br />
hist(x, breaks=12)<br />
</p>

再来寻找Box-Cox的λ:

<br />
result = boxcox(x~1, lambda=seq(-0.5,0,5,1/50))<br />
</p>

楼主可以看到一个λ的图形,我们选择那个使曲线最高点的λ值,一般就可以了。对于不同的数据,可能要调整lambda的取值范围,我选了-0.5~0.5。

选择最合适的λ:

<br />
mylambda = result$x[which.max(result$y)]<br />
</p>

现在我们看看效果:

<br />
x2 = (x^mylambda+1)/mylambda<br />
hist(x2)<br />




哇, 原来的偏态数据变成正态的了! [s:14] 牛不牛,有木有?

当然,这是针对原始数据全是正数的情况。如果数据中有负数,则在变换前加上一个正数α,使得全体数据为正数。对于α的最佳取值,要使用MASS包的logtrans函数来选择,类似于boxcox函数的用法。</p>

更进一步的,具体可以参考MASS(Modern Applied Statistics With S)这本书。

现在信心爆棚了吧?以为box-cox转换可以把你手里面不是正态分布的数据变成正态的了吧?

做梦!!!

一般的单峰稍微偏态的,box-cox变换还可以进行正态分布变换。但是,你试试双峰分布,看看能不能行?其它的变态分布,就更不用提了。

一定要读书哦,切不可养成单单依赖网上搜索的只言片语,断章取义的习惯。

2 年 后
修正下,x2 应该为 (x^mylambda-1)/mylambda
2 个月 后
boxcox变换与logit变换,反正弦……等变换的意义是一样的么?都是为了使原来非正态的数据变成正态?