R與生物專題 | 第三十六講 R-多元線性回歸中的交互作用及更優模型選擇

2021-12-29 投必得學術

在「R與生物統計專題」中,我們會從介紹R的基本知識展開到生物統計原理及其在R中的實現。以從淺入深,層層遞進的形式在投必得學術公眾號更新。

在前一講中,我們介紹了如何用多個預測變量(x)建立用於預測連續型數值的結果變量(y)的多元線性回歸模型(第三十五講 R-多元線性回歸)。

例如,要預測血糖,根據在胰島素水平和懷孕次數,模型方程式為Glucose = b0 + b1*Insulin + b2*Pregnancies,其中b0是截距;b1 和b2是分別與預測變量血壓、懷孕次數和懷孕次數相關聯的回歸係數。

上面的方程,也稱為加法模型,僅研究預測變量的主要影響。它的前提條件是,假設給定的預測變量與結果之間的關係獨立於其他預測變量。

但是,各個預測變量之間是不是相互獨立的呢?如果懷孕次數的增加可以提高胰島素水平對血糖的影響,則認為懷孕次數與胰島素水平之間有協同效應,在統計學上,稱為交互作用。


具有兩個預測變量(x1和x2)之間的相互作用的多元線性回歸方程可寫為:

y = b0 + b1*x1 + b2*x2 + b3*(x1*x2)

考慮我們的示例,它變為:

Glucose = b0 + b1*Insulin + b2* Pregnancies + b3*(Insulin* Pregnancies)

也可以寫成:

Glucose = b0 + (b1 + b3* Pregnancies)*Insulin + b2* Pregnancies

或為:

Glucose = b0 + b1*Insulin + (b2 +b3*Insulin)* Pregnancies

b3 可以解釋為胰島素提高,而懷孕次數額外增加一個單位(反之亦然)。



tidyverse 用於數據可視化

caret 用於簡化機器學習的工作流程

library(tidyverse)library(caret)


我們將使用一組糖尿病的數據,它包含768人糖尿病相關的數據,包括懷孕情況,血糖,血壓,皮膚厚度,胰島素水平,懷孕次數,糖尿病譜系功能,年齡和糖尿病診斷結果(Outcome)。

如需獲取數據diabetes.csv,請關注投必得醫學公眾號,後臺回復「diabetes.csv」獲取數據。


導入數據:

my_data<-read.csv('diabetes.csv')

檢查數據:

[1] 768   9

輸出結果

Pregnancies Glucose BloodPressure SkinThickness Insulin  PREGNANCIES DiabetesPedigreeFunction Age Outcome1           6     148            72            35       0 33.6                    0.627  50       12           1      85            66            29       0 26.6                    0.351  31       03           8     183            64             0       0 23.3                    0.672  32       14           1      89            66            23      94 28.1                    0.167  21       05           0     137            40            35     168 43.1                    2.288  33       16           5     116            74             0       0 25.6                    0.201  30       0

數據清理

new_data<-my_data[my_data$Glucose>0 & my_data$Insulin >0,]dim(new_data)

#[1] 393   9


研究問題:胰島素水平和懷孕次數、及其交互作用預測血糖水平。

set.seed(123)training.samples <- new_data$Glucose %>%createDataPartition(p = 0.8, list = FALSE)train.data  <- new_data[training.samples, ]test.data <- new_data[-training.samples, ]


標準線性回歸模型可以計算如下:

model1 <- lm(Glucose ~ Insulin + Pregnancies, data = train.data)summary(model1)

輸出結果

Call:lm(formula = Glucose ~ Insulin + Pregnancies, data = train.data)

Residuals:Min 1Q Median 3Q Max-59.368 -17.110 -3.895 13.805 83.981

Coefficients:Estimate Std. Error t value Pr(>|t|)(Intercept) 93.91665 2.61539 35.909 < 2e-16 ***Insulin 0.15017 0.01182 12.700 < 2e-16 ***Pregnancies 1.55894 0.42649 3.655 0.000301 ***Signif. codes: 0 『***』 0.001 『**』 0.01 『*』 0.05 『.』 0.1 『 』 1

Residual standard error: 24.45 on 312 degrees of freedomMultiple R-squared: 0.3731, Adjusted R-squared: 0.369F-statistic: 92.83 on 2 and 312 DF, p-value: < 2.2e-16

predictions <- model1 %>% predict(test.data)

# (a) 預測誤差, RMSERMSE(predictions, test.data$Glucose)

[1] 25.86233

R2(predictions, test.data$Glucose)

[1] 0.3167198


在R中,使用*運算符號來表示變量之間的交互作用:

model2 <- lm(Glucose ~ Insulin + Pregnancies + BloodPressure: Pregnancies,data = new_data)

model2 <- lm(Glucose ~ Insulin* Pregnancies, data = train.data)summary(model2)

輸出結果

Call:lm(formula = Glucose ~ Insulin * Pregnancies, data = train.data)

Residuals:Min 1Q Median 3Q Max-56.176 -16.922 -4.239 13.203 85.592

Coefficients:Estimate Std. Error t value Pr(>|t|)(Intercept) 92.133076 3.301245 27.909 <2e-16 ***Insulin 0.162520 0.018282 8.890 <2e-16 ***Pregnancies 2.142610 0.784902 2.730 0.0067 **Insulin:Pregnancies -0.003746 0.004229 -0.886 0.3763Signif. codes: 0 『***』 0.001 『**』 0.01 『*』 0.05 『.』 0.1 『 』 1

Residual standard error: 24.45 on 311 degrees of freedomMultiple R-squared: 0.3746, Adjusted R-squared: 0.3686F-statistic: 62.11 on 3 and 311 DF, p-value: < 2.2e-16

# 用該模型計算驗證數據集中預測值

# 模型在驗證數據集中的預測評估情況

predictions <- model2 %>% predict(test.data)RMSE(predictions, test.data$Glucose)

[1] 25.61056

# 計算 R平方

R2(predictions, test.data$Glucose)

[1] 0.3299708



可以看出,當我們考慮胰島素水平和懷孕次數的交互作用時,該交互作用並不能預測血糖水平,其係數與0間沒有差異。即最終模型中,我們不應該考慮胰島素水平和懷孕次數間的交互作用,其對血糖沒有交互作用。

我們可以進一步使用anova()函數,對兩個預測模型進行對比比較其R平方。

輸出結果

Analysis of Variance TableModel 1: Glucose ~ Insulin + PregnanciesModel 2: Glucose ~ Insulin * PregnanciesRes.Df    RSS Df Sum of Sq      F Pr(>F)1    312 1864542    311 185984  1    469.35 0.7848 0.3763

從結果我們可以看出,model2並沒有比model1好。殘差平方和(Residual sum of squares,RSS)在model1中為186454,在model2中為185984。兩者進行卡方檢驗,P = 0.2763,即兩者殘差平方和沒有統計學差異。

所以,最後更好的模型為model1。

有時交互作用項很重要,但不是主要影響。如果模型中交互作用沒有統計學意義,最終的模型中,不應該加入交互作用項。


如果模型中包括交互作用,並且交換作用有統計學意義,那麼在模型中,即便原預測因素的係數與0沒有統計學差異,也應該包括在最終的模型中。


1. Alboukadel Kassambara, Machine Learning Essentials: Practical Guide in R


好了,本期講解就先到這裡。小夥伴們趕緊試起來吧。

在之後的更新中,我們會進一步為您介紹R的入門,以及常用生物統計方法和R實現。歡迎關注,投必得學術手把手帶您走入R和生物統計的世界。

提前預告一下,下一講我們將學習多元線性回歸中的多重共線性和方差膨脹因子。

當然啦,R語言的掌握是在長期訓練中慢慢積累的。一個人學習太累,不妨加入「R與統計交流群」,和數百位碩博一起學習。


快掃二維碼撩客服,

帶你進入投必得學術交流群,

讓我們共同進步!

↓↓


來源:投必得醫學R與生物統計

聲明:本文僅做學術分享,版權歸原作者所有,並不代表本平臺的觀點,如有侵權,請先聯繫topedit2021刪除,萬分感謝!

發表SCI論文很迷茫?

來找「投必得」幫忙↓↓↓

相關焦點

  • R與生物專題 | 第三十五講 R-多元線性回歸
    3.182598e-02對於給定的預測變量,t統計量評估預測變量和結果變量之間是否存在顯著關聯,即預測變量的β係數是否顯著不同於零。例如,在固定的胰島素水平和懷孕次數下,體重指數每增加一個單位,平均可以使血糖增加大約0.39 * 1 = 0.39個單位。如果我們的模型中,存在有某個預測變量與結果變量不相關,則在最後的多元回歸模型中,我們應該刪除該預測變量。
  • R與生物專題 | 第四十四講 R-非線性回歸
    但是,我在真實世界裡,事物間的關係並不都是線性的。當自變量(預測變量)與因變量(結果變量)的真實關係為非線性時,之前學過的線性回歸模型將不再適用。data("Boston", package = "MASS")set.seed(123)training.samples<-Boston$medv%>% createDataPartition(p=0.8
  • R語言 | 一個多元線性回歸在R中的實現示例
    回歸的目的是找到一組最優的模型參數(斜率和截距值的組合),使響應變量的觀測值和預測值之間的殘差平方和最小化。從技術上來說,簡單多項式回歸也可以視為多元線性回歸的特例,例如二次回歸有兩個預測變量(X1=X和X2=X2),三次回歸有三個預測變量(X1=X、X2=X2和X3=X3)。 本篇繼續通過一個示例,展示在R語言中擬合多元線性回歸的方法過程。
  • R與生物專題 | 第三十四講 R-簡單線性回歸模型(2)
    在「R與生物統計專題」中,我們會從介紹R的基本知識展開到生物統計原理及其在R中的實現。
  • 基於R軟體實現多元線性回歸
    一個多元線性回歸在R中的實現示例在一元回歸中,只包含一個預測變量和響應變量間的關係。與此相比,當存在兩個或以上的預測變量時,稱為多元回歸(Multiple Regression)。如果只考慮變量間的線性關係時,就是多元線性回歸(Multiple Linear Regression)。
  • R與生物專題 | 第五十四講 R-樣本量及實驗效能計算
    我們使用pwr.t.test() 函數[在pwr包中] 幫助我們對t檢驗計算樣本量。= 0.05, power = NULL)w是期望效應量,即效應差異大小除以效應方差(Δ/α),N是總觀察樣本數,df是自由度,其他同pwr.t.test()
  • R與生物專題 | 第四十八講 R-逐步回歸
    那麼,假如我們有很多個預測變量,想要一一確定這些預測變量是否真對結果變量起到了預測功能,我們有沒有辦法讓這個「刪除」變量的步驟可以自動實現呢?於是我們引入了逐步回歸。以確保每次引入新的變量之前回歸方程中只包含顯著性變量。這是一個反覆的過程,直到既沒有顯著的預測變量選入回歸方程,也沒有不顯著的預測變量從回歸方程中剔除為止。以保證最後所得到的預測變量集是最優的。
  • R與生物專題 | 第三十二講 R-回歸分析概述
    線性回歸方程可以寫成 y = b0 + b*x,其中:b0是截距,b是與預測變量x相關的回歸權重或係數。從技術上講,我們需要確定一個線性回歸係數,使得預測結果值的誤差到達最小。在某些情況下,某些預測變量之間可能存在交互作用,例如,增加預測變量x1的值可能會提高預測變量x2解釋結果變量變化的有效性。在這種情況下,建立回歸模型時,交互作用也需要考慮。
  • 一元(多元)線性回歸分析之R語言實現
    上篇介紹了《一元(多元)線性回歸分析之Excel實現》,本篇來探討一下回歸分析在R語言中的實現,我們將從更專業的角度對模型進行一些解讀。
  • R與生物專題 | 第四十三講 R-回歸預測模型的自舉重採樣驗證(boostrap-resampling)
    研究問題:根據社會經濟相關的多個指標(Agriculture,Examination,Education,Catholic,Infant.Mortality)預測生育力得分(Fertility)。,data=swiss,method= "lm", trControl=train.control)#輸出結果Linear Regression47 samples5 predictorNo pre-processingResampling: Bootstrapped (100 reps)Summary of sample
  • 第四十講 R-線性回歸:預測模型及可信區間
    在「R與生物統計專題」中,我們會從介紹
  • 多元線性回歸的模型解釋、假設檢驗、特徵選擇
    多元線性回歸:這是一種線性回歸的形式,當有兩個或多個預測因子時使用。我們將看到多個輸入變量如何共同影響輸出變量,同時還將了解計算與簡單LR模型的不同之處。我們還將使用Python構建一個回歸模型。最後,我們將深入學習線性回歸,學習共線性、假設檢驗、特徵選擇等內容。
  • R與生物專題 | 第五十二講 統計方法選擇全解析2
    在「R與生物統計專題」中,我們會從介紹R的基本知識展開到生物統計原理及其在R中的實現。
  • 使用Matlab解決多元線性回歸問題
    上期我們分享了使用matlab進行數組最值的搜尋,有同學留言想了解matlab多元線性回歸,安排!
  • R筆記:多重線性回歸(三)_模型評估與診斷
    (1)模型擬合優度評估在模型擬合完畢通過summary()函數可以獲得參數估計表,同時函數也給出了模型的決定係數、校正的決定係數。本例多重線性回歸模型的決定係數R^2=0.2352,即結局變量的總變異中可由回歸模型中解釋變量解釋的部分僅佔23.52%,參見《多重線性回歸(一):模型擬合》。
  • 第三十一講 R-機器學習與回歸概述
    在「R與生物統計專題」中,我們會從介紹R的基本知識展開到生物統計原理及其在R中的實現。
  • 線性回歸分析詳解7:多元回歸方程的精度,R平方與調整後的R平方
    許栩原創專欄《從入門到高手:線性回歸分析詳解》第七章,回歸方程的精度,R平方與調整後的R平方。多元線性回歸分析,我們在求出多元線性回歸方程後,這個方程到底怎麼樣,能不能起到效果,需要對求出的回歸方程進行一系列評價和評估。這些評價和評估,首先要做的,是確認回歸方程的精度。本章,我將分如下三個小節講述回歸方程的精度,歡迎閱讀與探討。我的《線性回歸分析》專欄總目錄見下圖。
  • 機器學習:回歸分析——多元線性回歸分析
    我們把包括兩個或兩個以上自變量的回歸稱為多元線性回歸。生活中的現象常常是與多個因素相聯繫的,由多個自變量的最優組合共同來預測或估計因變量,比只用一個自變量進行預測或估計更有效,更符合實際。所以相比一元線性回歸,多元線性回歸的實際意義更大。
  • spss多元線性回歸模型專題及常見問題 - CSDN
    多元線性回歸,主要是研究一個因變量與多個自變量之間的相關關係,跟一元回歸原理差不多,區別在於影響因素(自變量)更多些而已,例如:一元線性回歸方程 為:    毫無疑問,多元線性回歸方程應該為:上圖中的 x1,  x2, xp分別代表「自變量」Xp截止,代表有P個自變量,如果有「N組樣本,那麼這個多元線性回歸,將會組成一個矩陣
  • 值 多元線性回歸模型專題及常見問題 - CSDN
    多元線性回歸模型通常用來研究一個應變量依賴多個自變量的變化關係,如果二者的以來關係可以用線性形式來刻畫,則可以建立多元線性模型來進行分析。1.模型簡介1.1模型的結構多元線性回歸模型通常用來描述變量y和x之間的隨機線性關係,即:如果對y和x進行了x次觀測,得到n組觀察值yi,x1i,…,xki(i