相关文章推荐
任性的香瓜  ·  Impala SQL ...·  1 年前    · 

在许多情况下,为了满足经典线性模型的正态性假设,常常需要使用指数变换或者对数转化,使其转换后的数据接近正态,比如数据是非单峰分布的,或者各种混合分布,虽然不一定起作用,但是不妨试试。

我们使用平日最常见的box-cox转换,因为之前看到有人问到如何使用spss进行转换,到网上找了资料,是需要语法的,在spss中进行语法指令,显然相比较用R,还是很不方便。

分两步,第一步需要计算出,lambda值,然后把转化后的lambda值带入方程中,同时对于转换后的数据拟合出来的方程依然进行正态性的检验

语句如下:

library(MASS)

D=read.csv("/Users/hjs/Documents/train_test_model/ridgereg1.csv",sep=",") # 加载数据

#2拟合BOXCOX 模型
b=boxcox(y~., data=D) # 定义函数类型和数据
I=which(b$y==max(b$y))
b$x[I]#lambda=0.83

#得到 0.828就 是下图的最高点

依据上一步boxcox转化的lambda值,即0.83次方,代入模型
c=lm(y^0.83 ~ long + touwei + weight,data=D) # 定义一个多元回归,同理y x1 x2 x3 是cvs文件中,带变量名的字母
d=step(c) # 使用逐步法,进入多个自变量
summary(d) # 模型汇总
anova(d) #  用方差分析法对拟合的模型进行检验
shapiro.test(d$res) # 用残差对boxcox变化后的这个逐步回归方程 正态性进行检验

Start:  AIC=-21.51
y^0.83 ~ long + touwei + weight
         Df Sum of Sq     RSS      AIC
<none>                 5.7518 -21.5136
- touwei  1    4.7894 10.5412 -10.1865
- long    1    6.5893 12.3411  -6.7184
- weight  1   11.3733 17.1251   0.4891
Residuals:
     Min       1Q   Median       3Q      Max 
-0.88677 -0.36357 -0.05594  0.38686  1.33507 
Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  7.1472866  0.8353396   8.556 9.29e-08 ***
long         0.8158515  0.1796633   4.541 0.000253 ***
touwei      -1.0078211  0.2603217  -3.871 0.001118 ** 
weight       0.0033182  0.0005562   5.966 1.21e-05 ***
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.5653 on 18 degrees of freedom
Multiple R-squared:  0.9753,	Adjusted R-squared:  0.9712 
F-statistic: 237.4 on 3 and 18 DF,  p-value: 1.173e-14
                    在许多情况下,为了满足经典线性模型的正态性假设,常常需要使用指数变换或者对数转化,使其转换后的数据接近正态,比如数据是非单峰分布的,或者各种混合分布,,虽然不一定起作用,但是不妨试试。我们使用平日最常见的box-cox转换,因为之前看到有人问到如何使用,spss进行转换,到网上找了资料,是需要语法的,在spss中进行语法指令,显然相比较用R,还是很不方便的。D=read.csv("/Use
				
R语言进行Box-Cox变换 为什么要进行Box-Cox转换 Box-Cox是一种广义幂变换,统计建模常用的变换,用于连续响应变量不满足正态时的情况。Box-Cox的一个显著的有点是通过求变参数λ来确定变换形式,而这个过程完全基于数据本身而无需任何先导信息,这比凭经验的对数,平方根变换更客观。 Box-Cox变换公式 其,y必须取正值,y值为负,首先y+a,对不同的λ所做的变换不同。λ=0对数变换;λ=-1倒数变换;λ=0.5平方根变换。 基于R语言进行Box-Cox转换 STEP1:加载程序包并
R语言Box-Cox变换实战(Box-Cox Transformation):将非正态分布数据转换为正态分布数据 #拟合两个回归模型(一个使用box-cox处理响应变量并获取最佳λ) #创建两个Q-Q图可视化两个回归模型之间残差的差异 box-cox变换是将非正态分布数据集转换为正态分布数据集的常用方法。 这种方法背后的基本思想是使用以下公式为λ找到一些值,以便转换后的 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&amp;lt;-read.csv(&quot;C:/Users/Administrator/Desktop/data3.2.csv&quot;,head=TRUE) library(MASS) bc3.2&amp;lt;-boxcox(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)这个操作的真名应该时boxcox变换,用来降低X的skewness值,达到接近正...
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
BoxCox在1964年提出的变换可以使线性回归模型满足线性性、独立性、方差齐性以及正态性的同时,又不丢失信息,此种变换称之为BoxCox变换。 进行boxcox转换,以及逆变换