在SPSS中進行BOX-COX轉換

我們經常使用的線性迴歸分析,參數檢驗方法都要求因變量(殘差)滿足正態分佈,但在實踐中,經常會遇到數據不滿足正態分佈的情況,為了使因變量或者殘差的分佈滿足正態分佈,經常需要對因變量進行轉換。在轉換時,有多種轉換方式,比如可以嘗試對數,平方根,平方根的倒數等等一系列的函數對數據進行轉換。本文根據論文《BOX-COX變換及其在SPSS軟件中的實現》給大家介紹一種轉換方法,該方法能夠幫助我們自動確定用於將非正態數據轉換成正態數據的合適函數,可以免去我們嘗試多種函數的麻煩。

要知道在SPSS中,沒有提供用於box-cox轉換的菜單,所以只能以編寫程序的方式去實現box-cox轉換,對於沒有統計學研究生學歷的大多數小夥伴來說,自己寫出這樣的一個程序應該是不太可能的,好在已經有國內的學者發表了一篇相關論文,論文中提供了一段程序代碼,可以使用這段程序代碼來完成對自己數據的box-cox轉換。你可以從知網或者其它渠道下載這篇論文,我這裡將論文中的程序代碼粘貼到本文中,然後後面會告訴如何使用這段代碼。

* Encoding: GBK.

SET LENGTH=NONE.

SET MXLOOP = 100000000.

MATRIX.

GET W/VARIABLES= all/FILE= */MISSING=OMIT.

COMPUTE NR =NROW(W).

COMPUTE NC =NCOL(W).

COMPUTE Y=MAKE(NR,1,0).

COMPUTE XX=MAKE(NR,NC,1).

COMPUTE YLAM=MAKE(NR,1,1).

COMPUTE BOXCOX=MAKE(6100,2,0).

COMPUTE YTEMP=0.

LOOP II=1 TO NR.

COMPUTE Y(II,1)=W(II,1).

LOOP JJ=1 TO NC-1.

COMPUTE XX(II,JJ+1)=W(II,JJ+1).

END LOOP.

COMPUTE YTEMP=YTEMP+LN(Y(II)).

END LOOP.

LOOP TEMP=1 TO 6100.

COMPUTE LAMBDA=-3.001 + TEMP * 0.001.

DO IF LAMBDA=0.

COMPUTE YLAM(:)=LN(Y(:)).

ELSE.

COMPUTE YLAM(:)=(Y(:)&**LAMBDA -1)/LAMBDA.

END IF.

COMPUTE BETA=INV(T(XX)*XX)*T(XX)*YLAM.

COMPUTE MSE = T(YLAM-XX*BETA)*(YLAM-XX*BETA)/NR.

COMPUTE LOGLIKE=-1*NR/2*LN(MSE)+(LAMBDA-1)*YTEMP.

COMPUTE BOXCOX(TEMP,1)= LAMBDA.

COMPUTE BOXCOX(TEMP,2)= LOGLIKE.

END LOOP.

SAVE BOXCOX /OUTFILE=*.

END MATRIX.

RENAME VARIABLES COL1= LAMBDA COL2= LOGLIKE.

GRAPH

/SCATTERPLOT(BIVAR)=LAMBDA WITH LOGLIKE /MISSING=LISTWISE

/TITLE= 'Log-Likelihood versus lambda'.

首先在spss中打開我們需要使用的數據(本文案例使用是從國家統計局下載的2016年不同省份的gdp數據),打開後將要進行轉換的變量(gdp2016)放在第一列,要保證該變量是一個數值型的變量,數據類型要設置成數字,並且度量類型要設置為【標度】。然後我們先暫時將數據集中的其它不需要進行轉換的變量刪除此處暫時刪除後,在計算得到我們所需的box-cox轉換的lambda/λ 參數後,通過撤銷操作可恢復原始數據,為了確保安全,防止誤操作導致數據無法恢復,建議在分析前,對數據文件進行備份操作,另外此數據集後面的幾個變量表示的是通過幾種不同轉換得到的新變量。

在SPSS中进行BOX-COX转换

然後用spss新建一個語法文件,將上面的代碼複製到新建的語法文件中,操作完成後,在spss中的界面如下圖所示:圖中用紅色框線標註的部分,是我修改過的部分,你可以對照原論文中的程序代碼進行查看,我這裡的修改是為了使程序輸出的box-cox轉換函數的lambda參數有更加精確的取值。

在SPSS中进行BOX-COX转换

然後,我們選中語法文件中的全部代碼,點擊運行代碼的按鈕,程序將會對所需要進行轉換的變量進行分析,會在結果窗口中輸出一個x軸為λ值,y軸為loglike數值(對數似然函數值)的散點圖:

在SPSS中进行BOX-COX转换

並且會在一個新的數據集窗口中保存這些λ值和對數似然函數值:

在SPSS中进行BOX-COX转换

選擇最大的對數似然函數值取值對應的lambda取值作為box-cox轉換的參數,使用box-cox轉換函數,計算得到轉換後的新變量。

在SPSS中进行BOX-COX转换

然後再對此新變量進行檢驗,觀察轉換後的變量是否滿足正態分佈,這裡我將展示另外幾種函數轉換以及box-cox轉換後的變量的正態性檢驗結果,正態性檢驗使用的檢驗方法是我們前面介紹過的單樣本K-S檢驗(相關內容見《單樣本K-S檢驗》),下面的圖形展示的是如下6種情況下的正態分佈檢驗結果:

① 原始變量;

② 對數轉換;

③ 平方根轉換;

④ lambda取值為0.3(原論文程序輸出的λ值);

⑤ lambda取值為0.33(我修改後的程序輸出的λ值);

⑥ lambda取值為0.3340586(stata計算得到lambda值);

可以發現,除了原變量和對數轉換後的變量外,其它變量都滿足正態分佈。

在SPSS中进行BOX-COX转换

本文所介紹的內容也以視頻的形式進行了講解,該視頻收錄在我的在線課程《SPSS統計分析》中,你可以訪問

下方鏈接或者閱讀原文查看,數據文件以及本文的參考論文在課程的資料中也有提供

https://study.163.com/course/courseMain.htm?courseId=1003683033&utm_campaign=commission&utm_source=400000000126045&utm_medium=share


分享到:


相關文章: