对于一个数组y,例如
y=c(269,321,585,871,1475,2821,392,594,4950,2577,523,98,184,279)
要对它进行Box-Cox变换,求它的最优的λ的语句如下:
library(forecast)
best_lambda=forecast::BoxCox.lambda(y)
y0=forecast::InvBoxCox(y1,lambda=best_lambda)
1.介绍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...
R语言
Box
-
Cox
变换
实战(
Box
-
Cox
Transformation):将非正态分布数据转换为正态分布数据
#拟合两个回归模型(一个使用
box
-
cox
处理响应变量并获取最佳λ)
#创建两个Q-Q图可视化两个回归模型之间残差的差异
box
-
cox
变换
是将非正态分布数据集转换为正态分布数据集的常用方法。
这种方法背后的基本思想是使用以下公式为λ找到一些值,以便转换后的
R语言
进行
Box
-
Cox
变换
为什么要进行
Box
-
Cox
转换
Box
-
Cox
是一种广义幂
变换
,统计建模中常用的
变换
,用于连续响应变量不满足正态时的情况。
Box
-
Cox
的一个显著的有点是通过求变参数λ来确定
变换
形式,而这个过程完全基于数据本身而无需任何先导信息,这比凭经验的对数,平方根
变换
更客观。
Box
-
Cox
变换
公式
其中,y必须取正值,y值为负,首先y+a,对不同的λ所做的
变换
不同。λ=0对数
变换
;λ=-1倒数
变换
;λ=0.5平方根
变换
。
基于
R语言
进行
Box
-
Cox
转换
STEP1:加载程序包并
在许多情况下,为了满足经典线性模型的正态性假设,常常需要使用指数
变换
或者对数转化,使其转换后的数据接近正态,比如数据是非单峰分布的,或者各种混合分布,,虽然不一定起作用,但是不妨试试。
我们使用平日最常见的
box
-
cox
转换,因为之前看到有人问到如何使用,spss进行转换,到网上找了资料,是需要语法的,在spss中进行语法指令,显然相比较用R,还是很不方便的。
D=read.csv("/Use
1.消除异方差
代码实现如下:
data3.2<-read.csv("C:/Users/Administrator/Desktop/data3.2.csv",head=TRUE)
library(MASS)
bc3.2<-
box
cox
(y~x1+x2,data=data3.2,lambda=seq(-2,2,0.01))
# λ的取值为区间[-2,2]上步长为0.01的值,bc3.2中...
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
很高兴为您服务!我可以为您提供一个
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)