R語言中使用線性模型、迴歸決策樹自動組合特徵因子水平
原文連結: http://tecdat.cn/?p=14569
每次我們在應用計量經濟學課程中遇到實際應用時,我們都要處理類別變數。學生也提出了同樣的問題:我們如何自動組合因子水平?有簡單的R函式嗎?
因此我想編寫一個R函式。為了說明這一點,請考慮以下內容
'data.frame': 200 obs. of 3 variables:$ y : num 1.345 1.863 1.946 2.481 0.765 ...$ x1: num 0.266 0.372 0.573 0.908 0.202 ...$ x2: Factor w/ 10 levels "I","A","H","F",..: 4 4 6 4 3 6 7 3 4 8 ...table(b$x2)[LETTERS[1:10]]A B C D E F G H I J11 12 23 34 23 36 12 32 3 14
沒有定義一個(連續的)因變數,沒有定義一個連續的協變數,也沒有定義一個分類變數,此處有十個級別。我們可以使用
plot(b$x1,y,col="white",xlim=c(0,1.1))text(b$x1,y,as.character(b$x2),cex=.5)
線性迴歸的輸出得出以下預測
for(i in 1:10){lines(u,v)}
斜率是相同的,我們只需為每個級別新增一個不同的常數。如我們所見,某些級別非常接近,因此將它們組合為一個類別。這是線性迴歸的輸出,
Coefficients:Estimate Std. Error t value Pr(>|t|)(Intercept) 0.843802 0.119655 7.052 3.23e-11 ***x1 1.992878 0.053838 37.016 < 2e-16 ***x2A 0.055500 0.131173 0.423 0.6727x2H 0.009293 0.121626 0.076 0.9392x2F -0.177002 0.121020 -1.463 0.1452x2B -0.218152 0.130192 -1.676 0.0955 .x2D -0.206970 0.121294 -1.706 0.0896 .x2G -0.407417 0.129999 -3.134 0.0020 **x2C -0.526708 0.123690 -4.258 3.24e-05 ***x2J -0.664281 0.128126 -5.185 5.54e-07 ***x2E -0.816454 0.123625 -6.604 3.94e-10 ***---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1Residual standard error: 0.2014 on 189 degrees of freedomMultiple R-squared: 0.8995, Adjusted R-squared: 0.8942F-statistic: 169.1 on 10 and 189 DF, p-value: < 2.2e-16AIC[1] -60.74443BIC[1] -21.16463
這裡的參考類別是“ I”。看起來我們實際上可以將該類別與其他幾個類別結合起來。這裡的一種策略是選擇似乎沒有顯著差異的所有類別,然後執行(多個)測試
Hypothesis:x2A = 0x2H = 0x2F = 0Model 1: restricted modelModel 2: y ~ x1 + x2Res.Df RSS Df Sum of Sq F Pr(>F)1 192 8.46512 189 7.6654 3 0.79971 6.5726 3e-04 ***---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
我們可以將這四個類別結合在一起。
我們看到更改參考類別時的情況(在所有類別上迴圈)
plot(1:nlevels(b$x2),1:nlevels(b$x2),col="white",xlab="",ylab="",axes=F,xlim=c(0,10.5),ylim=c(0,10.5))points(((1:10))[idx],rep(i,length(idx)),pch=1,cex=2)points(((1:10))[idx],rep(i,length(idx)),pch=19,cex=2)}
|
我們看到它是對稱的:如果將“ H”與“ I”組合,則“ I”也應與“ H”組合。
我們可以手動預定義一些順序
for(i in 1:nlevels(b$x2)){points(((1:10))[idx],rep(i,length(idx)),pch=1,cex=2)idx=which(p>.1)points(((1:10))[idx],rep(i,length(idx)),pch=19,cex=2)}
我們得到
我們已經合併了類別。
實際上,可以使用其他策略。我們從某個級別開始,說“ A”。然後,我們將其與所有不顯著不同的級別合併。如果“ B”不是其中之一,我們將其用作新參考。
for(i in 1:nlevels(b$x2)){b$x2=recode(b$x2, paste("c('",paste(mix,collapse = "','"),"')='",paste(mix,collapse = "+"),"'",sep=""))}}
最後的類別是
table(b$x2)A+I+H B+D+F C+G E J46 82 35 23 14
有以下回歸輸出
Coefficients:Estimate Std. Error t value Pr(>|t|)(Intercept) 0.86407 0.03950 21.877 < 2e-16 ***x1 1.99180 0.05323 37.417 < 2e-16 ***x2B+D+F -0.21517 0.03699 -5.817 2.44e-08 ***x2C+G -0.50545 0.04528 -11.164 < 2e-16 ***x2E -0.83617 0.05128 -16.305 < 2e-16 ***x2J -0.68398 0.06131 -11.156 < 2e-16 ***---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1Residual standard error: 0.2008 on 194 degrees of freedomMultiple R-squared: 0.8975, Adjusted R-squared: 0.8948F-statistic: 339.6 on 5 and 194 DF, p-value: < 2.2e-16AIC[1] -66.76939BIC[1] -43.68117
這與我們之前得到的組一致。但是,如果我們更改順序,我們可以得到不同的組合。例如,如果我們從“ J”到“ A”,而不是從“ A”到“ J”,我們得到
for(i in nlevels(b$x2):1){mix=c(LETTERS[i],names(p)[idx])b$x2=recode(b$x2, paste("c('",paste(mix,collapse = "','"),"')='",paste(mix,collapse = "+"),"'",sep=""))}}table(b$x2)E G+C I+A+B+D+F+H J23 35 128 14
這裡有不同的資訊標準
AIC(lm(y~x1+x2,data=b))[1] -36.61665BIC(lm(y~x1+x2,data=b))[1] -16.82675
最後但重要的一點是,可以使用迴歸樹。問題是還有另一個可能相互干擾的解釋變數。所以我建議(1)擬合線性模型,計算殘差(2)執行迴歸樹,解釋未定義分類變數
觀察葉子與我們得到的葉子具有相同的組。
arbren= 200node), split, n, deviance, yval* denotes terminal node1) root 200 22.563500 7.771561e-182) x2=G,C,J,E 72 4.441495 -3.232525e-014) x2=J,E 37 1.553520 -4.578492e-01 *5) x2=G,C 35 1.509068 -1.809646e-01 *3) x2=I,A,H,F,B,D 128 6.366628 1.818295e-016) x2=F,B,D 82 2.983381 1.048246e-01 *7) x2=I,A,H 46 2.030229 3.190993e-01 *
我想有可能改善迴歸的水平組合。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69982319/viewspace-2713741/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 從線性模型到決策樹再到深度學習的分位數迴歸模型深度學習
- 機器學習——線性迴歸-KNN-決策樹(例項)機器學習KNN
- 決策樹模型(2)特徵選擇模型特徵
- 在R語言中,因子是什麼R語言
- 通用機器學習演算法:線性迴歸+決策樹+Xgboost機器學習演算法
- R:alpha多樣性線性迴歸
- 多元線性迴歸模型模型
- PRML 迴歸的線性模型模型
- 一元線性迴歸模型模型
- 使用線性迴歸模型預測黃金ETF價格模型
- 線性迴歸
- 線性迴歸 go 語言實現Go
- 決策樹模型(3)決策樹的生成與剪枝模型
- 線性迴歸與邏輯迴歸邏輯迴歸
- 線性迴歸——lasso迴歸和嶺迴歸(ridge regression)
- Lasso迴歸及其R語言操作R語言
- 1.3 - 線性迴歸
- 分類——決策樹模型模型
- 線性迴歸模型公式推導完整簡潔版模型公式
- R語言學習-迴歸診斷R語言
- Origin進行多元線性迴歸、指數擬合和非線性曲面擬合
- 4-線性迴歸
- 1維線性迴歸
- 線性迴歸實戰
- 線性迴歸總結
- 線性迴歸推導
- 【火爐煉AI】機器學習006-用決策樹迴歸器構建房價評估模型AI機器學習模型
- python實現線性迴歸之簡單迴歸Python
- 對比線性迴歸、邏輯迴歸和SVM邏輯迴歸
- 正規方程法來求解線性迴歸模型引數模型
- R 語言中取色器
- 決策樹中結點的特徵選擇方法特徵
- 迴歸樹
- 機器學習——決策樹模型機器學習模型
- 線性迴歸-程式碼庫
- pytorch實現線性迴歸PyTorch
- 資料分析:線性迴歸
- 線性迴歸演算法演算法