R中的Box-Cox變換

        在許多情況下,爲了滿足經典線性模型的正態性假設,常常需要使用指數變換或者對數轉化,使其轉換後的數據接近正態,比如數據是非單峯分佈的,或者各種混合分佈,雖然不一定起作用,但是不妨試試。

       我們使用平日最常見的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
Call:
lm(formula = y^0.83 ~ long + touwei + weight, data = D)

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
  Df Sum Sq Mean Sq F value Pr(>F)
long 213.896784  213.8967840  669.377918  1.086794e-15
touwei 2.271354  2.2713536  7.108073  1.574365e-02
weight 11.373302  11.3733018  35.592106  1.208578e-05
Residuals 18  5.751821  0.3195456  NA  NA
	Shapiro-Wilk normality test

data:  d$res
W = 0.96598, p-value = 0.6184
可以看到Shapiro-Wilk normality test是通過的,也就是說,本次box-cox轉換是成功的。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章