y(λ)=(x^λ-1)/λ, 若λ≠0
y(λ)=Log(x), 若λ=0
Box-Cox轉換可以使資料更加符合常態分佈或類似常態分佈的假設,從而提高模型的預測能力和準確性。在實際應用中,通常需要對資料進行多次Box-Cox轉換,並選擇轉換後使資料分佈最接近正態分佈的λ值。當λ > 1時,它可以將正偏的資料變得更加對稱,而當λ < 1時,它可以將負偏的資料變得更加對稱。當λ = 0時,Box-Cox轉換即為對數轉換。
需要注意的是,Box-Cox轉換只適用於正數資料。如果數據中包含負數,則可以使用相關的技術,如Yeo-Johnson轉換。另外,Box-Cox轉換不適用於包含零值的資料。在這種情況下,可以使用對數加一(log(x+1))轉換。
data=Flatten[{#,Exp[#+RandomReal[NormalDistribution[0,1],1]]}]&/@Range[1,8,0.025]; (*畫出資料的散佈圖*) ListPlot@data (*計算各Lambda之R-Square*) mymodel[n_]:=Block[{nlm,ntemp=n,datatemp}, datatemp={First@#, If[ntemp==0,Log[Last@#],((Last@#)^ntemp-1)/ntemp]}&/@data; nlm=LinearModelFit[datatemp,x,x]; nlm["RSquared"] ] (*可發現當Lambda=0時,R-Square最大,所以最適轉換為取Ln*) {#,mymodel[#]}&/@Range[-3,3,0.25]//TableForm ListPlot[{#,mymodel[#]}&/@Range[-3,3,0.25]] (*計算模式*) myfun[x_]=Limit[(x^\[Lambda]-1)/\[Lambda], \[Lambda]->SortBy[{#,mymodel[#]}&/@Range[-3,3,0.25],Last][[-1,1]]] lm=LinearModelFit[{First@#,myfun[Last@#]}&/@data,x,x] (*畫出轉換後之迴歸線及散佈圖*) Plot[lm[x],{x,0,8},Epilog->{Red,Point[{First@#,myfun[Last@#]}&/@data]}]
讀者回應 ( 0 意見 )
訂閱發佈留言 (Atom)
發佈留言
Please leave your name and tell me what you thought about this site. Comments, suggestions and views are welcomed.
如果這篇文章對你有幫助,那請留個訊息給我~