數據分享|用加性多元線性回歸、隨機森林、彈性網絡模型預測|附代碼數據

2023-07-17     tecdat拓端

原標題:數據分享|用加性多元線性回歸、隨機森林、彈性網絡模型預測|附代碼數據

原文連結:http://tecdat.cn/?p=24127

最近我們被客戶要求撰寫關於預測鮑魚年齡的研究報告,包括一些圖形和統計輸出。

鮑魚是一種貝類,在世界許多地方都被視為美味佳肴

養殖者通常會切開貝殼並通過顯微鏡計算環數來估計鮑魚的年齡。因此,判斷鮑魚的年齡很困難,主要是因為它們的大小不僅取決於它們的年齡,還取決於食物的供應情況。而且,鮑魚有時會形成所謂的「發育不良」種群,其生長特徵與其他鮑魚種群非常不同。這種複雜的方法增加了成本並限制了其普及。我們在這份報告中的目標是找出最好的指標來預測鮑魚的環,然後是鮑魚的年齡。

數據集

背景介紹

這個數據集 查看文末了解數據獲取方式 來自一項原始(非機器學習)研究。

從原始數據中刪除了有缺失值的例子(大多數預測值缺失),連續值的範圍被縮放用於NA(通過除以200)。在本分析中,我們將通過乘以200的方式將這些變量恢復到其原始形式。

數據集中的觀測值總數:4176

數據集中的變量總數:8個

變量列表

變量數據類型測量描述性別分類(因子)M、F 和 I(嬰兒)長度連續毫米最長殼測量直徑連續毫米垂直長度高度連續毫米帶殼肉整體重量連續克整隻鮑魚去殼重量連續克肉的重量內臟重量連續克腸道重量外殼重量連續克曬乾後鮑魚的環連續+1.5 給出以年為單位的年齡下面是分析

「使用回歸預測鮑魚的年齡」

數據匯總與統計

balne$Sx <- s.acor(aalne$Sex)

kale(abaoe[1:10,],fomt 'madw')

分類變量

數值變量

看一下數據集的摘要,我們可以看到,數據在雄性、雌性和嬰兒這三個因素水平之間的分布是相當均勻的。

因變量

因果變量Rings包含在數據集中。它被測量為切割和檢查鮑魚後觀察到的環的數量。雖然它不能直接表示一個給定的鮑魚的年齡,但它可以或多或少完美地確定它。一個鮑魚的年齡等於環數+1.5。由於這種關係是可靠的,環數將被視為因變量。數據中測量的環數從1到29不等,大多數鮑魚的環數在5到15之間。分布也有輕微的正偏斜,但沒有問題。(見下面的圖)

配對圖

pairs(aalone, es(colour =Sex, aph = 0.)

從配對圖中觀察到的情況。

首先要注意的是數據的高度相關性。例如,直徑和長度之間的相關性非常高(約98.7)。

點擊標題查閱往期內容

r語言中對LASSO回歸,Ridge嶺回歸和彈性網絡Elastic Net模型實現

左右滑動查看更多

01

02

03

04

同樣,Whole_weight似乎與其他重量預測因子高度相關,是Shucked_weight、Viscera_weight和Shell_weight之和。

其次,預測因子Sex的分布與所有其他預測因子的因子水平值雌性和雄性非常相似。

對於雌性和雄性的因子水平,分布的形狀也是非常相似的。

我們可以考慮重新定義這一特徵,將性別定義為嬰兒與非嬰兒(其中非嬰兒=雌性和雄性都是)。

大多數的abalones環都在5到15之間。

數據質量

增加變量。我們將更新鮑魚數據集,創建名為 "嬰兒 "的新變量,它的值將基於性別變量的原始值。當性別變量為I時,它的值為I,否則為NI。

我們還觀察到,預測高度的最小值是0,實際上這是不可能的,我們將調查這些觀察結果,仔細研究。

##高度為0的數據質量檢查

kable(abloe[aban$Height == 0,])

我們看到,有兩個觀測值的高度可能沒有被正確記錄,因為其他預測因子似乎都有有效的值。另外,如果我們看一下預測因子Whole_weight,我們會發現這些值與其他觀察值相比真的很小,而且低於第一個四分法。這告訴我們,這可能不是一個數據錯誤,因此我們不能將這些數據從我們的數據集中排除。

我們還將添加一個名為weight.diff的新變量。我們可以在摘要中看到有四種不同的重量測量方法,即Whole_weight、Shucked_weight、Viscera_weight和Shell.weight。Whole_weight是其他重量預測因子的線性函數,在剝殼過程中損失的水/血的質量未知。

str(aane, give.attr= FASE)

我們看到變量Whole_weight應該是Shucked_weight、Viscersa_weight和Shell_weight的線性函數,我們可以寫成Whole_weight = Shucked_weight + Viscera_weight + Shell_weight + 剝殼過程中損失的未知水/血質量。

然而,當我們計算Whole_weight和其他重量變量之間的差異時,我們發現有153個觀測值違反了這一規定,也就是說,這似乎不符合邏輯,可能是記錄數據時的錯誤。

如果我們繪製新添加的weight.diff變量的直方圖,我們可以看到,當weight.diff為負數時,有一些觀察結果。

#確定沒有正確記錄的觀察結果

#不符合邏輯的觀察結果的柱狀圖

ggplt(aalone, as(x=weight.diff)) +,ill=rb(1,.4,0,.7), bins = 30)

我們來看看其中的一些記錄。

nrow(ablon[abaoneweihtdff < 0,])

請注意,總共有153個觀測值的綜合權重超過了Whole_weight。當我們看了10個這樣的觀測值時,似乎其他的值都是正確的,沒有任何相似之處,所以我們確信這可能是一個數據輸入錯誤。因此,我們將保留這些觀察結果,以便進一步分析。

我們將首先在訓練和測試中潛入我們的數據集。數據集將以70/30的比例在訓練和測試之間進行分割,並隨機選擇觀測值。

訓練和測試拆分

set.ee(4)

#使用70/30方法在訓練和測試中分割數據

ndxes <-spl(1:owabaone, size= 0.3 nrw(bone))

aboetrai <- ablon[-indxs,]

abetest <- abloneindxe,]

我們已經開始用所有的變量擬合一個加法模型,並將研究參數的重要性。在此基礎上,我們將修改我們的模型。現在我們將使用變量Sex的原始值,它的因子水平為F、I和M。

加性多元線性回歸模型

summary(abneadd)

在第一個加性模型中,注意因子水平雌性是性別變量的參考水平。

在用所有預測因子擬合加性模型後,我們可以看到,除了長度之外,測試統計顯示所有變量都是顯著的。正如我們之前從配對圖中看到的那樣,長度和直徑的預測因子是高度相關的。我們還看到,不同重量的預測因子也是顯著的,儘管它們應該是彼此的線性函數。

RMSE 分數

kable(rmse(aaloe_ad,"Aditve odel"))

我們將計算方差膨脹因子,以發現數據集存在的多重共線性問題。

多重共線性

vif

我們看了所有變量的變量膨脹係數,似乎所有的預測因子都有多重共線性問題,除了我們之前在配對圖中看到的性別和身高。預測因子Whole_weight的VIF值最高,因為它是其他體重的線性函數。

Whole_weight & Rings 之間的偏相關係數:我們將首先計算Whole_weight 變量和因變量(Rings)的偏相關係數 。

#檢查高共線性關係變量的異方差性

wole_wigt_it <- lm(holweight ~Sx LnhDametr + eit +Sucked_ght + Visrwght Shl_wegh data=alotrin)

變量添加圖

同樣地,變量添加圖將這些殘差相互之間的關係可視化。將因變量的殘差與預測的殘差進行回歸,並將回歸線添加到圖中,也是有幫助的。

cor(resid(whole_weight),resid(addwtouwolwigh))

cre_plot(baead_itht_whe_eght,wleeghtfit)

沒有Whole_weight的加法模型的方差膨脹因子

但直徑和長度的VIF還是很高。

vif(abaln_ddithu_whoeeiht)

直徑和環之間的偏相關係數

我們現在將 在模型中Diameter 沒有Whole_weight變量的情況下計算變量和因變量(環) 的偏相關係數 。

mete_i <- lm(Diameter ~ Sex + Length + Height + Shucked_weight + Viscera_weight + Shell_weight)

abaoned_sal <- lm(Rings ~ Sex + Length + Height + Shucked_weight + Viscera_weight + Shell_weight)

這兩個殘差的相關性接近於零,這意味著未被性別、長度、高度、去殼重量、內臟重量和貝殼重量解釋的環的變化與未被性別、長度、高度、去殼重量、內臟重量和貝殼重量解釋的直徑的變化的相關性很小。因此,在模型中加入直徑可能沒有什麼好處。

cor(resid(damer_it),resid(abonead_mll))

creaevarlt(ablone_d_smaldiaete_fi)

沒有 Whole_weight & Diameter 的加法模型的方差膨脹因子

vif(ablonadd_mll)

現在的VIF要低得多。我們將同時使用abalone_add和abalone_add_small進行分析。

abalone_add_small 的 RMSE 分數

kable(rmse(abalone_add_small

方差分析 F 檢驗

anova(small,ablone_add)

根據Anova檢驗,我們可以拒絕無效假設。

現在讓我們嘗試對加性模型進行AIC和BIC的參數選擇。

#在加性模型上運行AIC和BIC

step(abae_add, dtonbackward" trace0)

step(abalon_ad, direction="backward"

我們使用之前Anova F測試中的最佳模型(abalone_add)運行了AIC和BIC方法,AIC和BIC都選擇了沒有Length預測器的相同模型。

我們選擇了BIC的模型(因為兩個模型都是一樣的),並將繪製擬合與殘差和QQ正態圖。

加性模型假設

assumptions(aln_odad_bic,"baln_meddbic")

這裡我們看到,擬合圖與殘差圖表明,模型違反了恆定方差,似乎有一種模式,即殘差隨著擬合值的增加而增加。

正態QQ圖也有肥尾,表明誤差可能不是正態分布。

表明我們可能需要尋找改進這個模型。儘管多重共線性對預測沒有影響,但這看起來是一個極端的案例,有一個明顯的模式違反了模型的假設。這可以通過幾種技術來實現,例如變量選擇和轉換。讓我們來看看變量選擇方法,看看哪些變量可以用來創建另一個不違反恆定方差和正態性假設的模型。

窮舉搜索

#窮舉搜索

allabaone_add<- sumr(ruetsings Sex + Legth Diamter + Hight + Whole_eght + Shllweigh + Shucke_weght + Viscea_weigh , data=ablontra))

for(i in c(1:8)){

vr_nm[i]=sum(all_abwh[i,])-1

}

plot(var_num,all_a)

(besr <- which.max(adjr2))

alabaoe_ad$hch[bsj2,]

#畫出模型參數與AIC的關係圖

n * log(a_aln_dd$rs / n) + 2 * (2:p)

plot(aloe_mo_ac ~ I(2:), ylab = "AIC"

")

現在我們看到了一些有趣的結果。之前我們看到t檢驗顯示一些預測因子是不顯著的,但是當我們進行窮舉搜索時,它表明我們確實需要所有的預測因子來創建AIC值最低的模型。從圖中可以看出,AIC值隨著8個參數的模型大小而下降,並且是最小的。我們將再次使用數據集中的所有預測因子來創建模型,並尋找變量轉換技術。

接下來,為了穩定恆定的變化,我們將進行一些因變量和預測變量的轉換。

因變量轉換

Box-Cox 變換

穩定方差的方法之一是使用對數轉換因變量。為了得到正確的順序,我們使用了boxcox方法,該方法建議使用$0的值。因為在0的值上,對數可能性最大,而且區間非常接近。因此,我們將使用log(Rings)形式的轉換,用於我們的加性模型。

boxcox(abloe_ad lambda = seq(-0.1, 0.1, by = 0.1))

Additive 模型與對數因變量轉換

summary(abaone_dd_log)

將因變量進行對數轉換後,我們看到t檢驗是顯著的,它也增加了先前加法模型的調整r平方值。我們還看到,在這個模型中,幾乎所有的預測因子都是顯著的。讓我們檢查一下假設。

模型假設

下面的擬合與殘差圖和Q-Q圖顯示,對因變量進行對數轉換後,結果有了很大的改善。

assumptionsba

均方根分數

kable(log_rmse(abalo)

然而,我們沒有看到RMSE分數有任何改善。恆定方差問題似乎得到了改善,QQ圖也看起來不錯。

下一步,我們將對預測器進行一些轉換,並評估模型,看看這是否有助於進一步提高預測的準確性。

Predictor 轉換

回歸分析

為了使我們能夠進行任何預測器的轉換,首先讓我們看看每個預測變量和因變量的關係。轉換將取決於數據的形狀以及預測因子和因變量之間的關係。

scatter(abale_tra$Lngt,abaone_train$Rngs,"Lenth""Rngs"),

我們可以看到環和預測指標長度、直徑、高度的關係幾乎是線性的。我們還可以看到,重量預測指標之間的關係並不是真正的線性關係,而是可以從多項式轉換中受益。因此,讓我們使用高階多項式創建一個模型,即所有重量預測指標Whole_weight、Viscera_weight、Shucked_weight和Shell_weight。

多項式

在模型中使用二階項後,模型假設相同。

asumptons(abloe_dd_oly2,"Poly2 Log Model")

均方根分數

kable(log_rmse(abaoly2,"Poly2 Log Moel)

均方根分數

在這裡,我們進行了一些變量轉換。首先,我們按照Boxcox方法的建議對因變量進行了對數轉換,並按照對數圖的建議對權重預測因子進行了多項式轉換。在擬合模型後,我們看到rmse比以前的模型要低,與以前擬合的加性模型相比,它也有更好的恆定方差和Q-Q圖。由於我們已經進行了程度為2的多項式轉換,讓我們嘗試擬合程度為3的另一個模型並檢查其意義。

方差分析 F 檢驗

anova(abaloe_addpoy2,aalon_add_oy3)

均方根分數

kable(log_rmse(abaloe_dd_pol4

方差分析 F 檢驗

anova

均方根分數

kable(log_rmse(abloneaddpoly5

方差分析 F 檢驗

anova

  • 我們再次看到測試對於較低的 rmse 是顯著的。讓我們嘗試擬合度數為 6 的模型。

均方根分數

kable(log_rmseaban_dd_poly6

方差分析 F 檢驗

anova

現在在用多項式次數為 6 進行擬合後,我們看到即使 F 檢驗表明它很重要,但檢驗的 RMSE 上升了。這表明我們現在可能已經開始過度擬合數據,即我們的模型非常接近地擬合數據,這是我們不希望發生的。

在此之前,我們看到多項式次數為 5 和 4 的測試和訓練 RMSE 之間存在非常細微的差異。測試 RMSE 幾乎相同。因此,我們願意犧牲相對於更簡單模型的 RMSE 非常微小的改進(第三個小數點)。因此我們選擇多項式次數為 4 的模型,即模型 abalone_add_poly4。

for(d in um_poly){

abalone_add_polyestmodel(d)

rmse=g_log_mse(balone_ad_poly)

train_rmse[d]rmse$tran

test_re[d]=rse$st

}

plot(train_rmse

我們看到多項式次數為 5 和 4 的測試和訓練 RMSE 之間存在非常細微的差異。測試 RMSE 幾乎相同。因此,我們願意犧牲相對於更簡單模型的 RMSE 非常微小的改進。因此我們選擇多項式次數為 4 的模型,即模型 abalone_add_poly4。

既然我們已經選擇了模型,讓運行 AIC 和 BIC 方法進一步選擇合適的模型,看看我們是否可以做進一步的改進。

現在讓我們計算和比較高階項的 RMSE,並繪製訓練和測試數據的均方根誤差。

多加法模型上的 AIC 和 BIC:

  • 既然我們已經選擇了模型,讓我們運行 AIC 和 BIC 方法來進一步選擇合適的模型。

step(abane_ad_poy4, directin="backwrd", trac=FALSE)

Compare AIC 與 BIC 模型參數

_aic$call[2]

add_bic$call[2]

Anove F 檢驗

anova(abalone_mode

  • 選擇的模型 BIC 中沒有預測器 Length 。Anova F 檢驗的 p 值很大,因此我們無法拒絕原假設。abalone_model_add_bic 模型很重要,因此我們將繼續推進並檢查模型假設。

模型假設(AIC 和 BIC):

model_assumption

  • 在這種情況下,恆定方差和正態性看起來都不錯。

RMSE 分數 - AIC

kable(log_rmse(abaone_mde_down')

RMSE 分數 - BIC

kable(log_rmse(abalone_model_add_bic,paste("Additive Model - Degree 4 - BIC")), digits = 4,format = 'markdown')

在使用AIC 和 進行變量選擇後 BIC,我們從中選擇了模型 BIC 並檢查了 t 統計量和假設。有趣的是, BIC 模型丟棄了很少的預測變量,但也具有與我們開始使用的原始模型(多項式次數為 4 的模型)相似的測試 RMSE。這表明我們可以刪除一些變量並仍然保持較低的 RMSE。這將我們帶到下一個修改和引入BIC 上述模型選擇的變量之間的交互項 。

來自BIC 模型的模型假設 也看起來更好。

接下來,我們將介紹交互項,並將嘗試使用BIC 方法建議的預測變量來擬合模型 。

交互模型

log(Rings) ~ Height + Diameter + poly(Whole_weight, 4) +

poly(Viscera_weight, 4) + poly(Shucked_weight,4) + poly(Shell_weight, 4) + Sex + Diameter:poly(Shucked_weight, 4) + poly(Shucked_weight, 4):Sex

RMSE 分數

方差分析 F 檢驗

anova

在擬合交互模型並使用最佳可加模型執行 F 檢驗後,我們看到該檢驗表明交互模型是一個顯著模型,具有改進的調整 r 平方值。RMSE 也變低了 因為它更好地解釋了可變性,我們現在將選擇交互模型並嘗試在交互模型上運行 AIC 和 BIC。

同時,我們會比較交互模型的多個度數,以計算和比較高階項的 RMSE,並繪製訓練和測試數據的均方根誤差。

for(d in num_poly){

ablone_int_poly=test_itmodel(d)

rmse=et_lg_rmseaaloneint_poly)

trainrse_int[d]=rmse$train

test_mse_it[d]=rme$tst

}

plot(tran_rse_n

  • 我們可以看到,隨著多項式次數的增加,RMSE 越來越低。儘管對於此分析而言,RMSE 的這種改進非常微小,我們可以忽略這種對模型簡單性的改進。考慮到這一點,我們可以看到多項式次數為 4 的模型性能更好,因此我們將繼續使用該模型。

交互模型上的 AIC 和 BIC

step(aalone_int, diretin="backar", trac=FALSE)

step(aalone_nt, diection="bacward", =loce=ALE)

RMSE 分數 - BIC/AIC

kable(log_rmse(abalone_model_int_bic,paste("Interaction Model - Degree 4 - BIC")), digits = 4,format = 'markdown')

在我們的交互模型上運行 AIC 和 BIC 後,我們看到該模型選擇了相同的模型。由於這是我們迄今為止看到的最好的模型之一,具有合理的複雜性,我們將把它視為我們比較的候選模型之一,作為本分析的最佳擬合模型。

談到候選模型,在詳盡的搜索過程中,我們已經看到,當我們使用所有預測變量時,模型附帶了最低的 AIC。我們可以嘗試構建一個模型,其中包含所有具有交互作用和多項式次數的預測變量,並與我們選擇的第一個候選模型進行比較,看看它的表現如何。因此,讓我們擬合一個包含所有預測變量的模型。

在最初的數據分析中,我們發現Sex 因子水平為 female 和 的分類變量的分布 male 極其相似。因此,我們決定將這兩個因子水平合併為一個,並且總因子水平為 2 infant 和 non-infant。我們創建了新變量 Infant。這裡 non-infant 代表 female 和 male 兩者。我們也通過這種方法進行了分析(可以在本報告的附錄部分找到)。

讓我們看看 Infant 模型分析,看看這個模型如何與我們上面選擇的模型相抗衡。

嬰兒模型分析

我們討論過針對此分析採用不同的方法。我們引入了一個新的分類預測變量名稱 Infant。我們使用現有的Sex 具有 3 個因子水平的分類預測變量,並創建了一個具有 2 個因子水平的新分類預測變量 。我們這樣做是因為我們從原始分類預測變量female 和 中 確定了 2 個因子水平上的相似分布 male。新的因素水平現在是 I (嬰兒 = 雌性和雄性組合)和 NI (非嬰兒)。

這個新分類的分析與上面的分析完全一樣,所以我們將用最少的解釋和細節快速進行這個分析。

summary(abae_d_nf)

均方根分數

rmse <- funcin(atual predicted) {

sqrt(mean((actual - predicted ^ 2))

}

加性模型假設

model_assumption

Box-Cox 變換

boxcox(abon_adinf,lmda seq(-0.1, 0.1, by = 0.1))

具有對數因變量轉換的附加嬰兒模型

summary(abaln_ad_log)

均方根分數

kable(log_mseabalone_d_lo_f,"")

加性模型假設

model_assumptions

多項式模型

lm(log(Rings) ~ Diameter + Length + Height + poly(Whol_weiht,3) + poly(Viscra_weight,3) + polyShuckwegt,3) + poly(Selweight,3) + Infant, data=abaone_rain

均方根分數

kable(log_rmse(abalnead_poly

多項式模型假設

model_assumption

方差分析 F 檢驗

``````

anova

交互模型

lm(log(Rings) ~ Height + Diaeter + poly(Whole_weight, 4) +

poly(Viscera_weght, 4) + poly(Shucke_weght,4) + poly(Shel_weight, 4) + Infant + Diameter:poly(Shckedweight, 4) + poly(Shckd_weight, 4):Infant, data=aboe_tain)

均方根分數

kable(log_rms(abaoe_int_infan,"

交互模型假設

model_assumption

方差分析 F 檢驗

anova

在這裡,我們選擇性能最佳的交互模型作為我們的候選模型之一。該模型具有較低的複雜性以及最低的 rmse。

我們在這裡看到的是,與前兩個完整模型相比,該模型在未見數據(測試數據)上的 rmse 最低。除此之外,這個模型也沒有前兩個複雜,這些特性使得這個模型成為我們選擇的候選模型之一。

現在,由於我們有一些我們喜歡的候選模型,讓我們將它們相互比較並尋找最佳模型。

候選模型

從上面的分析中,我們選擇了多項式次數為 4 的交互模型,因為我們已經看到它具有最低的測試 rmse 之一,並且具有良好的模型假設。我們將把它作為第一選擇的候選模型之一。該模型包含一些預測變量,而不是具有高度多重共線性的預測變量。這個模型是 abalone_model_int_bic。

另一個選定的模型是所有預測變量都具有相似較低 rmse 的交互模型。雖然這個模型將有更多的參數,因此是一個比早期模型更複雜的模型,但由於我們的目標是預測,我們不關心模型的複雜性。這個型號是 abalone_int_full

另一種候選模型將是具有 2 個因子水平的分類變量的交互模型。在開始或我們的分析中,我們看到該預測變量的分布在級別之間相似 male , female 因此我們決定引入一個新變量,該變量基本上有 2 個級別,嬰兒和非嬰兒,其中非嬰兒 = 雄性和雌性。該模型也是多項式次數為4的交互模型 。這個模型是 abalone_int_infant。註:(附錄部分增加了使用嬰兒預測器的加法模型和相關分析)。使用分類預測變量和具有3 值和 2 值的因子水平進行分析的整個過程 是相同的。

候選模型的 RMSE 比較

  • 候選模型1(abalone_model_int_bic)

``````

kable(log_rmseabaone_modlint_bic

  • 候選模型2(abalone_int__candidate_full)

kable(log_rmse(aalone_int_l,pte

kable(log_rmse(abalone_nt_nan

  • 候選模型 3 (abalone_int_infant)
  • 從上面我們可以看到, 候選模型 3 (abalone_int_infant) 在所有三個模型中表現最好。

候選模型的模型假設

  • 候選模型1(abalone_model_int_bic)

候選模型的模型假設

  • 候選模型1(abalone_model_int_bic)

model_assumptions(abalone_model_int_bic,"Candidate model 1")

  • 候選模型 2 (abalone_int_full)

``````

model_assumption

  • 候選模型 3 (abalone_int_infant)

model_assumption

  • 基於這些圖,我們可以看到我們所有的候選模型都很好地滿足了恆定方差和正態性假設。
  • 接下來,我們將比較所有這些候選模型的預測和置信區間,並觀察數據中的任何影響點。讓我們看看它。

異常觀察樣本:高槓桿、離群點和影響點

我們將查看每個候選模型的訓練數據集中存在的異常觀察結果。首先我們將分別尋找高槓桿點、離群點和影響點,然後通過公共數據點得到具有高槓桿、離群點和影響力的數據點。

候選模型1(abalone_model_int_bic)

## [1] 16

  • 我們看到有 16 個觀察值是高槓桿、異常值和影響點。

候選模型2(abalone_int_full)

length(comon_mdel_2)

## [1] 15

  • 在這個模型中,我們看到有 15 個觀察值是高槓桿、異常值和有影響的點。

候選模型3(abalone_int_infant)

length(comon_odl_3)

## [1] 19

  • 這個模型有 19 個這樣的觀察結果,它們是高槓桿、離群點和有影響力的點。

所有候選模型之間的異常觀察

  • 我們現在已經編制了候選模型中常見的觀察結果列表。讓我們來看看這些,看看是否有任何相似之處。

``````

intersect(commodl,intersect(commodel1,omomodl_2))

length(cmmondaa)

## [1] 13

我們立即注意到的第一件事是,我們最初在數據集中確定為不合邏輯或數據輸入錯誤的觀察結果很少。這些觀察結果具有負權重差異,這是不可能的。這是有道理的,因為在記錄此數據時可能會出現一些錯誤。

另一種模式是其中一些觀察結果的整體權重與平均整體權重相比超過 2。此外,這些觀察結果具有大量環,即這些是較老的鮑魚。

由於存在其他符合異常觀察條件的觀察結果,因此總體而言,它們之間沒有特定的模式。因此,我們不能從我們正在考慮進行預測的模型和分析中排除這些。

我們將使用平行坐標圖來可視化結果部分中的任何明顯模式。

讓我們看看一旦我們刪除這些數據集,我們的候選模型的表現如何。

刪除異常觀察後的RMSE 分數

接下來,我們將通過從訓練數據集中刪除異常觀察並計算測試數據集的 RMSE 分數來執行快速實驗。

obs_rmse <- get_log_rmse_obs(lmlog(_updated)

result <- ata.frae( "Mdel" = modelnames,

"RMSE Train" = c(

),

"RMSE Test" = c(

"RMSE Train all Data" = c(

"RMSE Test all data" = c(

get_lo_ms(aaloe_modl_intbic)$test,

  • 有趣的是,所有在沒有異常觀察的情況下訓練的模型在測試數據上產生了更好的 rmse。在上表中我們可以看到不同RMSE值的比較。
  • 由於這些不尋常的觀察沒有揭示任何特定的模式或任何不尋常的行為,我們無法從我們的數據集中刪除這些,並將使用候選模型繼續我們的分析。

預測和置信區間

#model 1

vif(abalone_mdl_ntbic)

#model 2

#model 3

讓我們從置信區間開始。我們所有候選模型的置信區間都在相似的範圍內。即平均而言,在任何一點,所有模型的區間範圍似乎都相同。請注意,3 個候選模型中有 2 個使用了所有預測變量,因此具有非常高的共線性。由於我們的模型很好地擬合了數據,因此平均減少了任何點的方差範圍。這很好。

此外,與置信區間類似,模型之間的預測區間也在相同的範圍內。模型擬合再次對這個較窄的區間範圍產生影響。請注意,預測區間比我們預期的置信區間寬得多。由於所有模型的預測區間即使在高度共線性之後也處於相似的範圍內,我們會說這些是好的。我們使用默認的 95% 公式來計算所有候選模型的置信區間和預測區間。

基於我們對所有這些候選模型的分析,我們認為候選模型 3 abalone_int_infant 將是預測鮑魚年齡的最佳選擇。與其他兩個候選模型相比,該模型更小,複雜度更低,但 rmse 最低。此外,模型之間的預測和置信區間非常相似。由於這些原因,我們將選擇模型 abalone_int_infant 作為我們分析的最佳模型。

預測鮑魚的年齡

  • 現在讓我們使用我們選擇的模型預測鮑魚的年齡。我們將從測試數據中隨機選擇 5 個觀察值並嘗試預測年齡。請注意,該模型實際上預測了鮑魚中的環數。我們需要在環數中加上 1.5 才能確定鮑魚的真實年齡。所以本質上,我們將比較模型預測的環數與測試數據集中的實際環數。

``````

#從測試數據中隨機抽取5個觀察值

sample <- sample_n(test_data, 5)

exp(predict( ta=sample )

我們可以從上面的例子中看到,我們從測試和模型中計算了環數和年齡,用於少數觀察。我們看到我們的模型正確預測了鮑魚的年齡,或者非常接近鮑魚的實際年齡。這些是模型以前從未見過的測試數據中的 5 個樣本觀察值。我們可以多取一些並執行相同的過程,看看我們的模型對鮑魚年齡的預測效果如何。

在這份分析報告中,我們應用了各種多元回歸技術和方法,但這並不意味著這個問題不能使用其他更先進的技術來解決。我們嘗試應用一些超出本報告範圍的先進方法,只是為了評估這些技術是否可以進一步改進我們的預測。

使用先進技術

  • 在本節中,我們超越了傳統的常見回歸技術,並嘗試應用一些先進的技術,看看我們是否可以創建一個具有較低測試 RMSE 的模型。

Elastic Net 彈性網絡是一種正則化回歸方法,它線性組合了 lasso 和 ridge 方法的 L1 和 L2 懲罰。

  • 我們將嘗試使用彈性網絡來進一步優化我們的預測。
  • 與 lasso 和 ridge 一樣,截距不會受到懲罰,並且 glment 在內部負責標準化。
  • 我們將使用與候選模型 3 (abalone_int_infant) 中相同的預測變量。

train(

Rings ~ke_ight, 4) + pol(Shell_weigh, 4) + Infant + Diameter:poly(Shucked_weight, 4) poly(Shuckedwight, 4:Infant,daa=abalone_trai

method = "glmnet",

trControl = cv_10,

kable(result, digit

  • 我們看到訓練和測試 rmse 結果都低於我們的候選模型。

隨機森林回歸

隨機森林或隨機決策森林是一種用於分類、回歸和任務的集成學習方法,它通過在訓練時構建大量決策樹並輸出類別(在分類的情況下)或平均預測來進行操作(在回歸的情況下)單個樹。隨機決策森林糾正了 Doe 決策樹過度擬合訓練數據集的習慣。

我們在這裡實現了隨機森林回歸模型進行預測,看看我們是否可以進一步改進。隨機森林回歸模型的 RMSE 結果比候選模型的 RMSE Score 更好。

bm(Rig ~, daa aloeran stbton = "gausian", ntre =, inrtindeth 3, shrinkage = 0.01)

以下是隨機森林方法的一些優缺點

它不對數據分布做出任何假設。

自動擬合高度非線性的交互。

通過接近度很好地處理缺失值。

即使對於大型數據集也能快速擬合。

已經觀察到隨機森林對某些具有嘈雜分類/回歸任務的數據集過度擬合。

如果樹不小就不容易解釋

結果

本報告系統地處理了預測鮑魚年齡的任務。探索了第一個數據集,發現了不尋常的觀察結果,並對變量進行了適當的標準化。

我們從一個加法模型開始,該模型包含所有名為abalone_add的預測變量 。我們繼續檢查各種假設和測試,以進一步提高模型的準確性並降低 rmse。

然後,我們對因變量和預測變量進行了多次轉換。當我們執行各種變量選擇程序時,我們看到了 rmse 的改進。

經過我們的分析,我們找到了幾個不錯的候選模型,我們選擇了模型 abalone_int_infant 作為我們的最佳模型。

以下是一些重要的關鍵點,說明了我們對這一結論的選擇。

應用上述技術後,我們得出了 3 個可能的候選模型。

候選模型 1 是 abalone_model_int_bic ,這是對交互模型的各種選擇過程的結果。我們看到這個模型 AIC 得分最低,rmse 排名第二。模型包含一些高共線預測變量,但當檢查 rmse、預測和置信區間時,這是一個合適的選擇。

候選模型 2 是 abalone_int_full。回想一下,詳盡的搜索過程表明,當我們所有的預測變量,我們得到最好的模型。所以我們決定添加模型中交互項和多項式次數為 4 的所有預測變量。該模型具有最高的多重共線性,但從 rmse 和預測以及置信區間來看是非常合理的。

候選模型 3 是 abalone_int_infant。正如我們最初的數據分析表明分類變量 Sex 有 3 個因子水平。female, male 和 infant。水平 female 和 male 我們在分布方面極其相似,因此我們將這兩個水平合二為一,使預測變量的總水平為 Sex 兩個。由於這種級別的降低,與前兩個模型相比,該模型可能是最簡單的模型。我們對此進行了徹底的分析,最終模型具有相似的 rmse、預測和置信區間。這就是我們選擇該模型作為候選模型之一的原因。

在以上 3 個候選模型中,候選模型 3 abalone_int_infant 稍微好一點,同時也不太複雜,因此它是我們進行此分析的首選模型。這有很多原因。讓我們討論一下。

以下是為此分析選擇的模型的公式

lm(log(Rings) ~ Height + Diameter + poly(Whole_weight, 4) +

poly(Viscera_weight, 4) + poly(Shucked_weight,4) + poly(Shell_weight, 4) + Infant + Diameter:poly(Shucked_weight, 4) + poly(Shucked_weight, 4):Infant

  • 這是所有 3 個候選模型的測試/訓練 RMSE 的快速比較。

  • 下圖顯示了整個分析報告中所選模型的 rmse(以紅色標記)、候選模型和模型的其餘部分以及它們的測試 rmse 比較。我們可以清楚地看到,我們選擇的模型 abalone_int_infant 也在int infant 下面的圖中重命名 ,其測試 rmse 最低。

  • 這裡一個明確的模式是,當模型更小、更簡單時,測試 rmse 很高,但隨著我們改進模型並開始變得更加靈活(因此模型長度更大),測試 rmse 下降。
  • 以下是所選模型的正態性假設。我們可以清楚地看到,當我們用對數變換和交互項擬合模型時,常數變化和正態性假設變得越來越好。

這裡要注意的一個關鍵點是,多重共線性的存在並沒有真正影響預測(這是我們分析的目標),我們能夠將其影響降低到一定程度。我們通過擬合與殘差圖驗證了這一點,可以看出我們選擇的模型具有以殘差為中心的殘差, 0 並且大致是恆定的變化。

如果我們使用平行坐標圖繪製異常觀測值,我們可以看到 Height 這些觀測值與鮑魚的平均高度相比更短。Whole_weight 和 Viscera_weight which as lower也是如此 。此外 weight.diff ,其中一些觀察結果是否定的,這是我們在初始數據分析期間發現的。

下面的平行坐標圖描繪了這些異常觀察的特徵,其中嬰兒 = 1(橙色線)和非嬰兒 [男/女] = 2(藍線)。

現在,如果我們只是從我們的訓練數據中抽取一個樣本並使用平行坐標繪圖,我們可以看到一般情況下 Height, Whole_weight 並且 Viscera_weight 均勻分布。

  • 我們還看到從數據集中刪除異常觀察進一步降低了測試 rmse,但是我們沒有從我們的數據集中刪除那些,因為它們似乎是有效的假設而不是極端情況。
  • 我們可以看到的均方根誤差得分 Elastic Net 和 Random Forest 比我們的候選模型較低,但差別不是很顯著。

討論

讓我們從我們正在分析的數據集開始討論。從最初的匯總統計數據中,我們看到數據中存在非常高的共線性。幾乎所有的變量都有很高的 vif 值。

我們所做的另一個重要觀察是數據質量。我們發現在某些情況下沒有正確記錄觀察結果。例如,對於 2 個觀察,高度為 0,這實際上是不可能的。但是當我們查看整個觀察結果和其他變量時,我們沒有發現任何異常模式。我們意識到這可能是數據輸入錯誤,因此我們決定將它們保留在我們的數據集中進行分析。以下是這 2 個觀察結果。

我們還看到,有些觀察結果不符合邏輯。預測器 Whole_weight 被認為是預測的線性函數 Shucked_weight, Viscera_weight, Shell_weight 並在去殼過程中損失的血液/水的加成未知質量。換句話說,所有其他權重預測變量的總和應該等於或小於 Whole_weight。但是我們發現 153 這樣的觀察違反了這個假設。仔細觀察後,我們發現觀察結果之間沒有相似之處或任何模式,因此我們得出結論,這可能只是數據記錄錯誤,因此這些觀察結果並未從數據集中刪除。以下是這些 153 觀察結果。

我們在探索性分析中發現的下一個有趣趨勢是預測Sex 因子水平的分布 。因子水平female 和 male 所有其他預測因子 都非常相似。此外,整體數據也大致均勻地分布在female、 male 和 的 水平值之間 infant。以下是水平之間的分布及其相對於其他預測變量和響應變量的總體分布。

  • 在上面的箱線圖中,我們可以看到female 和 的分布形狀 male 對於所有預測變量都非常相似。
  • 現在讓我們來看看它的頻率。

同樣,它非常相似。這些結果為我們指明了另一個方向,通過將female 和 組合male 成一個級別名稱作為 ,我們在數據集中創建了一個新變量 non-infant。所以現在新的分類變量有兩個級別 infant 和 non-infant。在我們的一個候選模型中,我們使用這個新的分類而不是原始的來查看其效果。最後,這是我們選擇的模型。

初始數據分析期間的下一個重要發現是預測變量之間存在非常高的多重共線性。這是有道理的,因為我們之前發現 Whole_weight 預測在某種程度上依賴於其他重量預測。Length 鮑魚的 Diameter. 以下是 來自加法模型的模型係數的 變異膨脹因子值。

## SexI SexM Length Diameter Height

## 1.982824 1.400405 42.874862 44.907429 3.114493

## Whole_weight Shucked_weight Viscera_weight Shell_weight

## 118.819537 29.579686 18.591058 22.182789

初始模型違反了恆定方差和正態性假設。使用各種方差穩定技術和轉換,我們能夠提出一個很好的模型。這些選定的候選模型使用了交互項、預測變量的多項式變換和響應變量的對數變換。

有趣的是,即使存在高度多重共線性,在模型選擇過程中,我們最終還是選擇了具有所有 8 個參數的模型。即所有的選擇程序都表明當使用模型中的所有預測變量時,最低的 AIC 出現。儘管在我們使用各種響應和預測變量轉換進行模型選擇之後,我們能夠在保持相似的測試 rmse 的同時稍微減小模型的大小。

我們看到我們幾乎沒有對降低測試 rmse 有輕微影響的異常觀察,但由於這些觀察不代表顯著變化或移動模型係數,我們沒有將它們從數據集中刪除。

在數據的背景下談論這個分析,我們可以從模型中看到, Length 變量可能不會成為預測鮑魚年齡的重要因素。我們可以看到我們沒有在我們的模型中選擇這個。這種情況是有意義的,因為 Length 或多或少地相關 Diameter (即長度越大直徑越大),並且由於我們已經將直徑帶入我們的模型,所以我們不需要鮑魚數據集中的長度。

預測時另一個非常有趣的事實是,不能單獨使用整個體重來預測年齡。我們知道,鮑魚的去殼過程會使鮑魚的血液和水分變干,然後再稱重,不同階段(去皮、去殼、乾燥)的重量組合也是決定鮑魚年齡的重要因素。

我們從測試數據中抽取了 10 個樣本觀察值,並使用我們選擇的模型 (abalone_int_infant) 預測了年齡,平均而言,它正確預測了 10 次中的第 3 次。從所選模型 (2.2021) 的測試 rmse 值考慮出響應變量環的範圍(1 到 29),我們認為我們的模型非常適合預測鮑魚的年齡。

數據獲取

在下面公眾號後台回復「鮑魚數據」,可獲取完整數據。

本文摘選 R語言用加性多元線性回歸、隨機森林、彈性網絡模型預測鮑魚年齡和可視化 ,點擊「閱讀原文」獲取全文完整資料。

點擊標題查閱往期內容

R語言高維數據懲罰回歸方法:主成分回歸PCR、嶺回歸、lasso、彈性網絡elastic net分析基因數據(含練習題)

Python中LARS和Lasso回歸之最小角算法Lars分析波士頓住房數據實例

R語言Bootstrap的嶺回歸和自適應LASSO回歸可視化

R語言Lasso回歸模型變量選擇和糖尿病發展預測模型R語言實現貝葉斯分位數回歸、lasso和自適應lasso貝葉斯分位數回歸分析

基於R語言實現LASSO回歸分析

R語言用LASSO,adaptive LASSO預測通貨膨脹時間序列

R語言自適應LASSO 多項式回歸、二元邏輯回歸和嶺回歸應用分析

R語言懲罰logistic邏輯回歸(LASSO,嶺回歸)高維變量選擇的分類模型案例

Python中的Lasso回歸之最小角算法LARS

r語言中對LASSO回歸,Ridge嶺回歸和彈性網絡Elastic Net模型實現

r語言中對LASSO回歸,Ridge嶺回歸和Elastic Net模型實現

R語言實現LASSO回歸——自己編寫LASSO回歸算法

R使用LASSO回歸預測股票收益

python使用LASSO回歸預測股票收益

文章來源: https://twgreatdaily.com/zh-hk/0fb3c623c8ab6de1acd25737cc867ef7.html