分析遇到非正态数据该怎么办?
總第194篇/張俊紅
我們在前面講過數據的正態性檢驗:正態性檢驗,介紹了檢驗數據是否正態的兩種方法。這一節我們來看一下,如果數據不滿足正態時該怎么辦,答案就是將非正態數據通過Box-Cox變換進一步轉換成符合正態分布的數據。這一篇就給大家分享下Box-Cox變換的具體內容。
Box-Cox變換是多種變換的總稱,具體的公式如下:
上面公式中y(λ)表示變換后的值,根據λ的值不同,屬于不同的變換,當λ值取以下特定的幾個值時就變成了特殊的數據變換:
當λ=0時,Box-Cox變換就變成了對數變換,y(λ) = ln(y);
當λ=0.5時,Box-Cox變換就變成了平方根變換,y(λ) = y^1/2
當λ=1時,Box-Cox變換變換就是它本身,y(λ) = y
當λ=2時,Box-Cox變換就變成了平方變化,y(λ) = y^2
當λ=-1時,Box-Cox變換就變成了倒數變化,y(λ) = 1/y。
λ值除了可以選擇上述特定的值以外,還可以選擇其他值,那當我們拿到一份非正態數據時,我們應該取λ值等于多少對齊進行變換呢?這個又該怎么定呢?
λ值取多少,我們可以利用Python中現成的函數,讓函數自動去探索,然后返回給我們最優的值是多少就可以。這個函數就是boxcox_normmax,這個函數用來計算給定的非正態數據對應的最優λ值。
boxcox_normmax(x[,?brack,?method])參數:x:非正態數據brack:?λ值搜索間隔,默認即可method:計算λ值的方法,有pearsonr、mle、all三種可選,默認為pearsonr,即按照相關性的方法去計算,如果選all,則會返回各種方法的計算結果返回值:返回λ值當我們得到最優的λ值以后,就可以根據λ值進行數據轉換了,這個時候可以用另外的一個函數boxcox,這個函數是根據指定的λ值對原始數據進行轉換。
boxcox(x[,?lmbda,?alpha])參數:x:非正態數據lambda:轉換的λ值alpha:計算置信區間時所用到的alpha值返回值:boxcox:經過轉換以后的數據maxlog:如果在傳入時lambda參數值沒有指定的話,該函數也會計算一個λ值出來(min_ci, max_ci):如果lambda參數為空且alpha參數不為空時,會計算maxlog的一個置信區間出來我們上面講了計算λ值有不同的方法,那到底哪種方法計算出來的λ值更加可靠一些呢?我們可以通過另外一個函數boxcox_normplot來查看到底哪種方法計算出來的λ值更可靠。
boxcox_normplot(x,?la,?lb,?plot=None,?N=80)參數:x:非正態數據la,lb:λ值的上下界plot:繪圖的畫布N:橫軸的坐標點個數返回值:lmbdas:通過box-cox算出來的多個λ值ppcc:相關系數,可以理解成λ值的可靠程度以上就是box-cox變換過程中用到的三個不同的函數,接下來我們給大家實際演示一下這三個函數如何使用。
首先,我們導入一份非正態數據,并繪制這份數據的概率密度圖,需要這份數據的在公眾號后臺回復非正態數據,即可獲得。
import?pandas?as?pd import?numpy?as?np import?seaborn?as?sns df?=?pd.read_excel(r"非正態數據集.xlsx") sns.distplot(df["price"],color?=?"#D86457")通過上面的概率密度圖,我們可以看出這是一份偏態數據,也就是非正態。接下來我們先利用boxcox_normmax函數來尋找最優λ值,代碼如下:
在獲得最優λ值以后,我們再利用boxcox函數來進行數據轉換,具體代碼如下:
x?=?stats.boxcox(df["price"],stats.boxcox_normmax(df["price"])) sns.distplot(x,color?=?"#D86457")對轉換后的數據再次進行概率密度圖的繪制,我們可以看到,數據就很正態了。
接下來再來我們再看一下我們計算出來的λ值是不是最優的,具體代碼如下:
fig?=?plt.figure() ax?=?fig.add_subplot(111) stats.boxcox_normplot(df["price"],?-20,?20,plot?=?ax) plt.axvline(x?=?stats.boxcox_normmax(df["price"]),color?=?"#D86457") plt.show()中間紅色那條線的位置就是我們求出來最優的λ值,結果很吻合。
以上就是關于Box-Cox變換的理論和實戰內容,大家多多練習。
總結
以上是生活随笔為你收集整理的分析遇到非正态数据该怎么办?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英雄td值得培养的英雄
- 下一篇: 有的时候入门只是一瞬间