拓端tecdat|R語言進行數據結構化轉換:Box-Cox變換、“凸規(guī)則”變換方法
原文鏈接:http://tecdat.cn/?p=22251
原文出處:拓端數據部落公眾號
線性回歸時若數據不服從正態(tài)分布,會給線性回歸的最小二乘估計系數的結果帶來誤差,所以需要對數據進行結構化轉換。
在討論回歸模型中的變換時,我們通常會簡單地使用Box-Cox變換,或局部回歸和非參數估計。
這里的要點是,在標準線性回歸模型中,我們有
但是有時候,線性關系是不合適的。一種想法可以是轉換我們要建模的變量,然后考慮
這就是我們通常使用Box-Cox變換進行的操作。另一個想法可以是轉換解釋變量,
例如,我們有時會考慮連續(xù)的分段線性函數,也可以考慮多項式回歸。
“凸規(guī)則”變換
“凸規(guī)則”(Mosteller. F?and?Tukey, J.W. (1978).?Data?Analysis?and?Regression)的想法是,轉換時考慮不同的冪函數。
1.“凸規(guī)則”為糾正非線性的可能變換提供了一個起點。
2 .通常情況下,我們應該嘗試對解釋變量進行變換,而不是對因變量Y進行變換,因為Y的變換會影響Y與所有X的關系,而不僅僅是與非線性關系的關系
3.然而,如果因變量是高度傾斜的,那么將其轉換為以下變量是有意義的
更具體地說,我們將考慮線性模型。
根據回歸函數的形狀(上圖中的四個曲線,在四個象限中),將考慮不同的冪。
例如讓我們生成不同的模型,看看關聯(lián)散點圖。
> plot(MT(p=.5,q=2),main="(p=1/2,q=2)")
> plot(MT(p=3,q=-5),main="(p=3,q=-5)")
> plot(MT(p=.5,q=-1),main="(p=1/2,q=-1)")
> plot(MT(p=3,q=5),main="(p=3,q=5)")
如果我們考慮圖的左下角部分,要得到這樣的模式,我們可以考慮
或更一般地
其中
和都大于1.并且
越大,回歸曲線越凸。
讓我們可視化數據集上的雙重轉換,例如cars數據集。
> tukey=function(p=1,q=1){
+ regpq=lm(I(y^q)~I(x^p) )
+ u=seq(min(min( ?x)-2,.1),max( x)+2,length=501)
+ polygon(c(u,rev(u)),c(vic[,2],rev(vic[,3]))^(1/q)
+ lines(u,vic[,2]^(1/q)
+ plot(x^p, ?y^q )
+ polygon(c(u,rev(u))^p,c(vic[,2],rev(vic[,3])) )
+ lines(u^p,vic[,2])
例如,如果我們運行
> tukey(2,1)
我們得到如下圖,
左側是原始數據集,右側是經過轉換的數據集,
其中有兩種可能的轉換。在這里,我們只考慮了汽車速度的平方(這里只變換了一個分量)。在該轉換后的數據集上,我們運行標準線性回歸。我們在這里添加一個置信度。然后,我們考慮預測的逆變換。這條線畫在左邊。問題在于它不應該被認為是我們的最佳預測,因為它顯然存在偏差。請注意,在這里,有可能考慮另一種形狀相同但完全不同的變換
> tukey(1,.5)
Box-Cox變換?
當然,也可以使用Box-Cox變換。此外,還可以尋求最佳變換??紤]
> for(p in seq(.2,3,by=.1)) bc=cbind(bc,boxcox(y~I(x^p),lambda=seq(.1,3,by=.1))$y)
> contour(vp,vq,bc)
顏色越深越好(這里考慮的是對數似然)。 最佳對數在這里是
> bc=function(a){p=a[1];q=a[2]; (-boxcox(y~I(x^p),data=base,lambda=q)$y[50]
> optim(bc,method="L-BFGS-B")
實際上,我們得到的模型還不錯,
最受歡迎的見解
1.用R語言模擬混合制排隊隨機服務排隊系統(tǒng)
2.R語言中使用排隊論預測等待時間
3.R語言中實現(xiàn)馬爾可夫鏈蒙特卡羅MCMC模型
4.R語言中的馬爾科夫機制轉換(Markov regime switching)模型
5.matlab貝葉斯隱馬爾可夫hmm模型
6.用R語言模擬混合制排隊隨機服務排隊系統(tǒng)
7.Python基于粒子群優(yōu)化的投資組合優(yōu)化
8.R語言馬爾可夫轉換模型研究交通傷亡人數事故預測
9.用機器學習識別不斷變化的股市狀況——隱馬爾可夫模型的應用