【獨家】手把手教線性回歸分析(附R語言實例)

2021-01-14 THU數據派

本文長度為8619,建議閱讀15分鐘

本文為你介紹線性回歸分析。


通常在現實應用中,我們需要去理解一個變量是如何被一些其他變量所決定的。


回答這樣的問題,需要我們去建立一個模型。一個模型就是一個公式之中,一個因變量(dependent variable)(需要預測的值)會隨著一個或多個數值型的自變量(independent variable)(預測變量)而改變的。我們能夠構建的最簡單的模型之一就是線性模型,我們可以假設因變量和自變量間是線性的關係。回歸分方法可用於預測數值型數據以及量化預測結果與其預測變量之間關係的大小及強度。本文將介紹如何將回歸方法應用到你自己的數據中,主要介紹學習內容:



一、理解回歸


回歸主要關注確定一個唯一的因變量(dependent variable)(需要預測的值)和一個或多個數值型的自變量(independent variable)(預測變量)之間的關係。我們首先假設因變量和自變量之間的關係遵循一條直線,即線性關係。


你可能還記得數學中是以類似於Y=aX + b的斜截式來定義直線的,其中,y是因變量,x是自變量。在這個公式中,斜率(slope)a表示每增加一個單位的x,直接會上升的高度;變量b表示X=0時y的值,它稱為截距,因為它指定了直線穿過y軸時的位置。


回歸方程使用類似於斜截式的形式對數據建立模型。該機器的工作就是確定a和b的值,從而使指定的直線最適合用來反映所提供的x值和y值之間的關係,這可能不是完美的匹配,所以該機器也需要有一些方法來量化誤差範圍,很快我們就會討論這個問題。


回歸分析通常用來對數據元素之間的複雜關係建立模型,用來估計一種處理方法對結果的影響和推斷未來。一些具體應用案例包括:


 根據種群和個體測得的特徵,研究他們之間如何不同(差異性),從而用於不同領域的科學研究,如經濟學、社會學、心理學、物理學和生態學;

 量化事件及其相應的因果關係,比如可應用於藥物臨床試驗、工程安全檢測、銷售研究等。

 給定已知的規則,確定可用來預測未來行為的模型,比如用來預測保險賠償、自然災害的損失、選舉的結果和犯罪率等。


回歸方法也可用於假設檢驗,其中包括數據是否能夠表明原假設更可能是真還是假。回歸模型對關係強度和一致性的估計提供了信息用於評估結果是否是由於偶然性造成的。回歸分析是大量方法的一個綜合體,幾乎可以應用於所有的機器學習任務。如果被限制只能選擇單一的分析方法,那麼回歸方法將是一個不錯的選擇。


本文只關注最基本的回歸模型,即那些使用直線回歸的模型,這叫做線性回歸(linearregression)。如果只有一個單一的自變量,那就是所謂的簡單線性回歸(simple linear regression),否則,稱為多元回歸(multiple regression),這兩個模型都假定因變量是連續的。對其他類型的因變量,即使是分類任務,使用回歸方法也是可能的。邏輯回歸(logistic regression)可以用來對二元分類的結果建模;泊松分布(Possion regression)可以用來對整型的計數數據建模。相同的基本原則適用於所有的回歸方法,所以一旦理解了線性情況下的回歸方法,就可以研究其他的回歸方法。


二、簡單線性回歸


讓我們從基礎開始。記得高中時學過的直線方程嗎?

Y=aX + b

a就是斜率,b就是y軸截距。簡單而言,線性回歸就是一系列技術用於找出擬合一系列數據點的直線。這也可以被認為是從數據之中反推出一個公式。我們會從最基礎的一些規則開始,慢慢增加數學複雜度,增進對這個概念了解的深入程度。但是在此之前,也許你會很好奇這裡的a和b的值分別是多少。接下來,我們通過一個例子,使用軟體R來為我們計算,我們的數據來源於一組真實的關於兒童的身高和年齡,記錄的數據。首先我們先直觀地顯示年齡與身高之間的關係,畫出一張散點圖,以年齡age為橫坐標,身高height為縱坐標,R的代碼如下:

> age=18:29    #年齡從18到29歲

> height=c(76.1,77,78.1,78.2,78.8,79.7,79.9,81.1,81.2,81.8,82.8,83.5)

> plot(age,height,main = "身高與年齡散點圖")

散點圖結果如圖1所示。

圖1  身高與年齡散點圖


從圖中可以觀察到,年齡與身高基本在一條直線附近,可以認為兩者具有線性關係,接下來建立回歸模型,R代碼如下:

> lm.reg <- lm(height~age)  #建立回歸方程

> lm.reg

> abline(lm.reg)    #畫出擬合的線性回歸線

產生以下的輸出:

Call:

lm(formula = height ~ age)

cients:

(Intercept)          age  

     64.928        0.635  

 

圖2  身高與年齡擬合直線


我們可以看到兩個數值,「截距」和「斜率」。無論我們用什麼軟體來做線性回歸(本文中的例子統一採用R語言),它都會用某種形式來報告這兩個數值。截距就是我們的公式中的b,斜率就是Y和自變量之間的傾斜程度。


總結起來,我們有一個數據集(觀測值)和一個模型(我們猜測可以擬合數據的一個公式),我們還要去找出模型的參數(我們的最佳擬合模型中的參數a和b),這樣,模型就可以「最佳」擬合數據了。我們希望用我們的數據來找出一個公式的參數,這樣,這個公式也能夠「最佳」擬合數據了。


1. 用模型來做預測


一旦你目測出最佳擬合直線並且讀出a和b,也許你大概會說大意是這樣的話:「這些數據遵循一個形式為Y = aX + b 的線性方程,其中a(斜率)= 某個數,b(y軸截距)= 另外某個數」。你也許記得,這個等式並非是確切的表述,因為很有可能你的數據並不是所有的都在一條完美的直線上,所以數據點之間可能會有不同程度的誤差。你的目測是主觀地嘗試把一些直覺上的總的誤差給降到最低。你做的事情就是直覺上的「線性回歸」。你按照「我看起來很順眼」的算法來估計a和b。我們會以這個直覺的行為為開端,並迅速帶入一些重量級的機械,使得我們能夠解決一些相當複雜的問題。


在這個節點,你的實驗室練習也許會要求你為不在你的觀測值集合以內的,某個給定數值的X,給出Y的估值。然後你就會用上面的等式,比如說a是2.1,b是0.3的等式Y = 2.1 X + 0.3作為你的模型,你把X輸入進去,就會得到一個Y。這時候你就是在用你的模型去預測一個值,換句話說,你正在陳述這樣的事實:我在實驗之中並沒有用這個X值,並且我的數據裡也沒有它,但是我想要知道這個X值是怎樣投射到Y軸上的。你也許會想要能夠說出:「我的誤差會是某個數,所以我相信實際上的值會在[Y-誤差,Y+誤差]之間」。在這樣的情況下,我們把變量X叫做「預測變量」,而Y的值是基於X的一個值來預測的,所以變量Y是「反應」。


2. 一個概念:總誤差


我們想要創造一個有關誤差,或者說我們的直線所給出的Y值與我們數據集中的真實Y值之間的差異的簡單公式。除非我們的直線正好穿過一個特定的點,否則,這個誤差是非零的。它可能是正值,也可能是負值。我們可以取這個誤差的平方(或者我們也可以取它的絕對值),然後我們把每個點的誤差項相加起來,然後得到直線和這個數據集的總誤差。在同一個實驗的不同的樣例集合中,我們會得到一個不同的數據集,很有可能一條不同的直線,並且幾乎可以肯定一個不同的總誤差。我們所用的誤差的平方值是一個非常常用的總誤差形式,它就是「方差」。它用同樣的方式來處理正值的誤差和負值的誤差,所以方差總是正值的。從現在開始我們會使用「方差」作為我們誤差的代表。總的來說,回歸是我們所使用的任意的數據,最小化方差,來估測模型係數的手段。統計軟體用多變量微積分這些專業技術來最小化誤差,並且給我們提供係數的估測值。對於回歸方程回歸係數的檢驗,檢驗一般用方差分析或t檢驗,兩者的檢驗結果是等價的。方差分析主要是針對整個模型的,而t檢驗是關於回歸係數的。


對於上例中的回歸方程,我們對模型進行檢驗,方差分析的R代碼如下:

> anova(lm.reg)    #模型方差分析

產生以下的輸出:

Analysis of Variance Table

Response: height

          Df Sum Sq Mean Sq F value    Pr(>F)    

age        1 57.655  57.655  879.99 4.428e-11 ***

Residuals 10  0.655   0.066                      

---

Signif. codes:  0 『***』 0.001 『**』 0.01 『*』 0.05 『.』 0.1 『 』 1


由於P<0.05,於是在α=0.05水平下,本例的回歸係數有統計學意義,身高和年齡存在直線回歸關係。


同理,對於上例中的回歸方程,我們對模型進行回歸係數的t檢驗,t檢驗的R代碼如下:

> summary(lm.reg)   #回歸係數的t檢驗

產生以下的輸出:

Call:

lm(formula = height ~ age)

Residuals:

     Min       1Q   Median       3Q      Max

-0.27238 -0.24248 -0.02762  0.16014  0.47238

Coefficients:

            Estimate Std. Error t value Pr(>|t|)    

(Intercept)  64.9283     0.5084  127.71  < 2e-16 ***

age           0.6350     0.0214   29.66 4.43e-11 ***

Signif. codes:  0 『***』 0.001 『**』 0.01 『*』 0.05 『.』 0.1 『 』 1

Residual standard error: 0.256 on 10 degrees of freedom

Multiple R-squared:  0.9888,Adjusted R-squared:  0.9876

F-statistic:   880 on 1 and 10 DF,  p-value: 4.428e-11


同方差分析,由於P<0.05,於是在α=0.05水平下,本例的回歸係數有統計學意義,身高和年齡存在回歸關係。


三、多元線性回歸


很自然地,如果Y依賴於多於一個變量的時候,會發生什麼。這時候,數學上的普遍性的力量就顯現了。這個簡單的原理在多維的情況下同樣適用。不僅僅是兩個或者三個,還有更多更大的數值。如果我們想要構建現實數據的模型的話,二十個,三十個,甚至百來個自變量都毫無問題。但現在我們就看看Y,作為一個含有多個自變量的函數,例如含有來個自變量X1和X2的形式:

Y = a0 + a1X1 + a2X2


這裡的a0 就是截距項,a1,a2 就是自變量X1 ,X2 的係數。 為了看看具有多個潛在的自變量的真實數據集,我們會在下一步使用具體的數據——醫療費用的數據。


多元線性回歸優缺點

優點

缺點

迄今為止,它是數值型數據建模最常用的方法

對數據做出了很強的假設

可適用於幾乎所有的數據

該模型的形式必須由使用者事先指定

提供了特徵(變量)與結果之間關係的強度和大小的估計

不能很好地處理缺失數據

只能處理數值特徵,所以分類數據需要額外的處理

需要一些統計知識來理解模型

 

四、線性回歸數據探索:醫療費用


醫療費用很難估計,因為花費最高的情況是罕見的而且似乎是隨機的。但是有些情況對於部分特定的群體還是比較普遍存在的。例如,吸菸者比不吸菸者得肺癌的可能性更大,肥胖的人更有可能得心臟病。此分析的目的是利用病人的數據,來預測這部分群體的平均醫療費用。這些估計可以用來創建一個精算表,根據預期的治療費用來設定年度保費價格是高一點還是低一點。我們想要去探索這些數據,嘗試從中獲得一些對於建立線性回歸模型有用處的見解。


我們會依據以下步驟完成,將來,我們還會對其他數據集座同樣的事情。


1) 收集/觀察數據;

2) 探索和準備數據;

3) 基於數據訓練模型;

4) 評估模型的性能;

5) 提高模型的性能。


第1步——收集/觀察數據


為了便於分析,我們使用一個模擬數據集,該數據集包含了美國病人的醫療費用。而本文創建的這些數據使用了來自美國人口普查局(U.S. Census Bureau)的人口統計資料,因此可以大致反映現實世界的情況。


:如果你想一起學習這個例子,那麼你需要從Packt出版社的網站(https://github.com/stedy/Machine-Learning-with-R-datasets/find/master)下載insurance.csv文件,並將該文件保存到R的工作文件夾中。


該文件(insurance.csv)包含1338個案例,即目前已經登記過的保險計劃受益者以及表示病人特點和歷年計劃計入的總的醫療費用的特徵。這些特徵是:


age: 這是一個整數,表示主要受益者的年齡(不包括超過64歲的人,因為他們一般由政府支付)。

 sex: 這是保單持有人的性別,要麼是male,要麼是female。

bmi: 這是身體質量指數(Body Mass Index,BMI),它提供了一個判斷人的體重相對於身高是過重還是偏輕的方法,BMI指數等於體重(公斤)除以身高(米)的平方。一個理想的BMI指數在18.5~24.9的範圍內。

children: 這是一個整數,表示保險計劃中所包括的孩子/受撫養者的數量。

 smoker: 根據被保險人是否吸菸判斷yes或者no。

region: 根據受益人在美國的居住地,分為4個地理區域:northeast、southeast、southwest和northwest。


如何將這些變量與已結算的醫療費用聯繫在一起是非常重要的。例如,我們可能認為老年人和吸菸者在大額醫療費用上是有較高的風險。與許多其他的方法不同,在回歸分析中,特徵之間的關係通常由使用者指定而不是自動檢測出來。


第2步——探索和準備數據


在R中,我們將使用read.csv()函數來加載用於分析的數據。我們可以使用stringAsFactors = TRUE,因為將名義變量轉換成因子變量是恰當的:

> insurance <- read.csv("insurance.csv",stringsAsFactors = TRUE)

函數str()確認該數據轉換了我們之前所期望的形式:

> str(insurance)

產生以下的輸出:

'data.frame':1338 obs. of  7 variables:

 $ age     : int  19 18 28 33 32 31 46 37 37 60 ...

 $ sex     : Factor w/ 2 levels "female","male": 1 2 2 2 2 1 1 1 2 1 ...

 $ bmi     : num  27.9 33.8 33 22.7 28.9 ...

 $ children: int  0 1 3 0 0 0 1 3 2 0 ...

 $ smoker  : Factor w/ 2 levels "no","yes": 2 1 1 1 1 1 1 1 1 1 ...

 $ region  : Factor w/ 4 levels "northeast","northwest",..: 4 3 3 2 2 3 3 2 1 2 ...

 $ charges : num  16885 1726 4449 21984 3867 ...

既然因變量是changes,那麼讓我們一起來看一下它是如何分布的:

> summary(insurance$charges)

產生以下的輸出:

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.

   1122    4740    9382   13270   16640   63770

因為平均數遠大於中位數,表明保險費用的分布是右偏的,我們可以用直方圖證實這一點。

> hist(insurance$charges)


圖3  charges直方圖


在我們的數據中,絕大多數的個人每年的費用都在0~15000美元,儘管分布的尾部經過直方圖的峰部後延伸得很遠。即將面臨的另一個問題就是回歸模型需要每一個特徵都是數值型的,而在我們的數據框中,我們有3個因子類型的特徵。很快,我們會看到R中的線性回歸函數如何處理我們的變量。


1.探索特徵之間的關係——相關係數矩陣


在使用回歸模型擬合數據之前,有必要確定自變量與因變量之間以及自變量之間是如何相關的。相關係數矩陣(correlation matrix)提供了這些關係的快速概覽。給定一組變量,它可以為每一對變量之間的關係提供一個相關係數。


為insurance數據框中的4個數值型變量創建一個相關係數矩陣,可以使用cor()命令:

> cor(insurance[c("age","bmi","children","charges")])

產生以下的輸出:

               age       bmi   children    charges

age      1.0000000 0.1092719 0.04246900 0.29900819

bmi      0.1092719 1.0000000 0.01275890 0.19834097

children  0.0424690 0.0127589 1.00000000 0.06799823

charges   0.2990082 0.1983410 0.06799823 1.00000000


該矩陣中中的相關係數不是強相關的,但還是存在一些顯著的關聯。例如,age和bmi顯示出中度相關,這意味著隨著年齡(age)的增長,身體質量指數(bmi)也會增加。此外,age和charges,bmi和charges,以及children和charges也都呈現處中度相關。當我們建立最終的回歸模型時,我們會儘量更加清晰地梳理出這些關係。


2.可視化特徵之間的關係——散點圖矩陣


或許通過使用散點圖,可視化特徵之間的關係更有幫助。雖然我們可以為每個可能的關係創建一個散點圖,但對於大量的特徵,這樣做可能會變得比較繁瑣。


另一種方法就是創建一個散點圖矩陣(scatterplot matrix),就是簡單地將一個散點圖集合排列在網格中,裡邊包含著相互緊鄰在一起的多種因素的圖表。它顯示了每個因素相互之間的關係。斜對角線上的圖並不符合這個形式。為何不符合呢?在這個語境下,這意味著找到某個事物和自身的關係,而我們正在嘗試確定某些變量對於另一個變量的影響。默認的R中提供了函數pairs(),該函數產生散點圖矩陣提供了基本的功能。對醫療費用數據之中的四個變量的散點圖矩陣如下圖所示。R代碼如下:

pairs(insurance[c("age","bmi","children","charges")])


圖4  散點圖矩陣


與相關係數矩陣一樣,每個行與列的交叉點所在的散點圖表示其所在的行與列的兩個變量的相關關係。由於對角線上方和下方的x軸和y軸是交換的,所以對角線上方的圖和下方的圖是互為轉置的。


你注意到這些散點圖中的一些圖案了嗎?儘管有一些看上去像是隨機密布的點,但還是有一些似乎呈現了某種趨勢。age和charges之間的關係呈現出幾條相對的直線,而bmi和charges的散點圖構成了兩個不同的群體。


如果我們對散點圖添加更多的信息,那麼它就會更加有用。一個改進後的散點圖矩陣可以用psych包中的pairs.panels()函數來創建。R中如果你還沒有安裝這個包,那麼可以輸入install.packages("psych")命令將其安裝到你的系統中,並使用library(psych)命令加載它。R代碼及散點圖矩陣如下:

pairs.panels(insurance[c("age","bmi","children","charges")])


圖5  散點圖矩陣


在對角線的上方,散點圖被相關係數矩陣所取代。在對角線上,直方圖描繪了每個特徵的數值分布。最後,對角線下方的散點圖帶有額外的可視化信息。


每個散點圖中呈橢圓形的對象稱為相關橢圓(correlation ellipse),它提供了一種變量之間是如何密切相關的可視化信息。位於橢圓中心的點表示x軸變量的均值和y軸變量的均值所確定的點。兩個變量的相關性由橢圓的形狀所表示,橢圓越被拉伸,其相關性越強。一個幾乎類似於圓的完美的橢圓形,如bmi和children,表示一種非常弱的相關性。


散點圖中繪製的曲線稱為局部回歸平滑(loess smooth),它表示x軸和y軸變量之間的一般關係。最好通過例子來理解。散點圖中age和childr的曲線是一個倒置的U,峰值在中年附近,這意味著案例中年齡最大的人和年齡最小的人比年齡大約在中年附近的人擁有的孩子更少。因為這種趨勢是非線性的,所以這一發現已經不能單獨從相關性推斷出來。另一方面,對於age和bmi,局部回歸光滑是一條傾斜的逐步上升的線,這表明BMI會隨著年齡(age)的增長而增加,從相關係數矩陣中我們也可推斷出該結論。


第3步——基於數據訓練模型


  用R對數據擬合一個線性回歸模型時,可以使用lm()函數。該函數包含在stats添加包中,當安裝R時,該包已經被默認安裝並在R啟動時自動加載好。使用R擬合稱為ins_model的線性回歸模型,該模型將6個自變量與總的醫療費用聯繫在一起。代碼如下:

ins_model <- lm(charges~age+children+bmi+sex+smoker+region,data=insurance)

建立模型後,只需輸入該模型對象的名稱,就可以看到估計的a係數:

> ins_model   

產生以下的輸出:

Call:

lm(formula = charges ~ ., data = insurance)

Coefficients:

    (Intercept)              age          sexmale  

       -11938.5            256.9           -131.3  

            bmi         children        smokeryes  

          339.2            475.5          23848.5  

regionnorthwest  regionsoutheast  regionsouthwest  

         -353.0          -1035.0           -960.1


你可能注意到,在我們的模型公式中,我們僅指定了6個變量,但是輸出時,除了截距項外,卻輸出了8個係數。之所以發生這種情況,是因為lm()函數自動將一種稱為虛擬編碼(dummy coding)的技術應用於模型所包含的每一個因子類型的變量中。當添加一個虛擬編碼的變量到回歸模型中時,一個類別總是被排除在外作為參照類別。然後,估計的係數就是相對於參照類別解釋的。在我們的模型中,R自動保留sexfemale、smokerno和regionnortheast變量,使東北地區的女性非吸菸者作為參照組。因此,相對於女性來說,男性每年的醫療費用要少$131.30;吸菸者平均多花費$23848.50,遠超過非吸菸者。此外,模型中另外3個地區的係數是負的,這意味著東北地區傾向於具有最高的平均醫療費用。


線性回歸模型的結果是合乎邏輯的。高齡、吸菸和肥胖往往與其他健康問題聯繫在一起,而額外的家庭成員或者受撫養者可能會導致就診次數增加和預防保健(比如接種疫苗、每年體檢)費用的增加。然而,我們目前並不知道該模型對數據的擬合有多好?我們將在下一部分回答這個問題。


第4步——評估模型的性能


通過在R命令行輸入ins_model,可以獲得參數的估計值,它們告訴我們關於自變量是如何與因變量相關聯的。但是它們根本沒有告訴我們用該模型來擬合數據有多好。為了評估模型的性能,可以使用summary()命令來分析所存儲的回歸模型:

> summary(ins_model)

產生以下的輸出:

Call:

lm(formula = charges ~ ., data = insurance)

 

Residuals:

     Min       1Q   Median       3Q      Max

-11304.9  -2848.1   -982.1   1393.9  29992.8

 

Coefficients:

                Estimate Std. Error t value Pr(>|t|)    

(Intercept)     -11938.5      987.8 -12.086  < 2e-16 ***

age                256.9       11.9  21.587  < 2e-16 ***

sexmale           -131.3      332.9  -0.394 0.693348    

bmi                339.2       28.6  11.860  < 2e-16 ***

children           475.5      137.8   3.451 0.000577 ***

smokeryes        23848.5      413.1  57.723  < 2e-16 ***

regionnorthwest   -353.0      476.3  -0.741 0.458769    

regionsoutheast  -1035.0      478.7  -2.162 0.030782 *  

regionsouthwest   -960.0      477.9  -2.009 0.044765 *  

---

Signif. codes:  0 『***』 0.001 『**』 0.01 『*』 0.05 『.』 0.1 『 』 1

 

Residual standard error: 6062 on 1329 degrees of freedom

Multiple R-squared:  0.7509,Adjusted R-squared:  0.7494

F-statistic: 500.8 on 8 and 1329 DF,  p-value: < 2.2e-16


開始時,summary()的輸出可能看起來令人費解,但基本原理是很容易掌握的。與上述輸出中用標籤編號所表示的一樣,該輸出為評估模型的性能提供了3個關鍵的方面:


1) Residuals(殘差)部分提供了預測誤差的主要統計量;

2) 星號(例如,***)表示模型中每個特徵的預測能力;

3) 多元R方值(也稱為判定係數)提供度量模型性能的方式,即從整體上,模型能多大程度解釋因變量的值。


給定前面3個性能指標,我們的模型表現得相當好。對於現實世界數據的回歸模型,R方值相當低的情況並不少見,因此0.75的R方值實際上是相當不錯的。考慮到醫療費用的性質,其中有些誤差的大小是需要關注的,但並不令人吃驚。如下節所述,我們會以略微不同的方式來指定模型,從而提高模型的性能。


第5步——提高模型的性能


正如前面所提到的,回歸模型通常會讓使用者來選擇特徵和設定模型。因此,如果我們有關於一個特徵是如何與結果相關的學科知識,我們就可以使用該信息來對模型進行設定,並可能提高模型的性能。


1. 模型的設定——添加非線性關係


在線性回歸中,自變量和因變量之間的關係被假定為是線性的,然而這不一定是正確的。例如,對於所有的年齡值來講,年齡對醫療費用的影響可能不是恆定的;對於最老的人群,治療可能會過於昂貴。


2. 轉換——將一個數值型變量轉換為一個二進位指標


假設我們有一種預感,一個特徵的影響不是累積的,而是當特徵的取值達到一個給定的閾值後才產生影響。例如,對於在正常體重範圍內的個人來說,BMI對醫療費用的影響可能為0,但是對於肥胖者(即BMI不低於30)來說,它可能與較高的費用密切相關。我們可以通過創建一個二進位指標變量來建立這種關係,即如果BMI大於等於30,那麼設定為1,否則設定為0。


:如果你在決定是否要包含一個變量時遇到困難,一種常見的做法就是包含它並檢驗其顯著性水平。然後,如果該變量在統計上不顯著,那麼就有證據支持在將來排除該變量。


3. 模型的設定——加入相互作用的影響


到目前為止,我們只考慮了每個特徵對結果的單獨影響(貢獻)。如果某些特徵對因變量有綜合影響,那麼該怎麼辦呢?例如,吸菸和肥胖可能分別都有有害的影響,但是假設它們的共同影響可能會比它們每一個單獨影響之和更糟糕是合理的。


當兩個特徵存在共同的影響時,這稱為相互作用(interaction)。如果懷疑兩個變量相互作用,那麼可以通過在模型中添加它們的相互作用來檢驗這一假設,可以使用R中的公式語法來指定相互作用的影響。為了體現肥胖指標(bmi30)和吸菸指標(smoker)的相互作用,可以這樣的形式寫一個公式:charge~bmi30*smoker。


4. 全部放在一起——一個改進的回歸模型


基於醫療費用如何與患者特點聯繫在一起的一點學科知識,我們採用一個我們認為更加精確的專用的回歸公式。下面就總結一下我們的改進:


 增加一個非線性年齡項

為肥胖創建一個指標

 指定肥胖與吸菸之間的相互作用


我們將像之前一樣使用lm()函數來訓練模型,但是這一次,我們將添加新構造的變量和相互作用項:

> ins_model2 <-lm(charges~age+age2+children+bmi+sex+bmi30*smoker+region,data=insurance)

接下來,我們概述結果:

> summary(ins_model2)

產生以下的輸出:

Call:

lm(formula = charges ~ age + age2 + children + bmi + sex + bmi30 *

    smoker + region, data = insurance)

 

Residuals:

     Min       1Q   Median       3Q      Max

-17296.4  -1656.0  -1263.3   -722.1  24160.2

 

Coefficients:

                  Estimate Std. Error t value Pr(>|t|)    

(Intercept)       134.2509  1362.7511   0.099 0.921539    

age               -32.6851    59.8242  -0.546 0.584915    

age2                3.7316     0.7463   5.000 6.50e-07 ***

children          678.5612   105.8831   6.409 2.04e-10 ***

bmi               120.0196    34.2660   3.503 0.000476 ***

sexmale          -496.8245   244.3659  -2.033 0.042240 *  

bmi30           -1000.1403   422.8402  -2.365 0.018159 *  

smokeryes       13404.6866   439.9491  30.469  < 2e-16 ***

regionnorthwest  -279.2038   349.2746  -0.799 0.424212    

regionsoutheast  -828.5467   351.6352  -2.356 0.018604 *  

regionsouthwest -1222.6437   350.5285  -3.488 0.000503 ***

bmi30:smokeryes 19810.7533   604.6567  32.764  < 2e-16 ***

---

Signif. codes:  0 『***』 0.001 『**』 0.01 『*』 0.05 『.』 0.1 『 』 1

 

Residual standard error: 4445 on 1326 degrees of freedom

Multiple R-squared:  0.8664,Adjusted R-squared:  0.8653

F-statistic: 781.7 on 11 and 1326 DF,  p-value: < 2.2e-16


分析該模型的擬合統計量有助於確定我們的改變是否提高了回歸模型的性能。相對於我們的第一個模型,R方值從0.75提高到約0.87,我們的模型現在能解釋醫療費用變化的87%。此外,我們關於模型函數形式的理論似乎得到了驗證,高階項age2在在統計上是顯著的,肥胖指標bmi30也是顯著的。肥胖和吸菸之間的相互作用表明了一個巨大的影響,除了單獨吸菸增加的超過$13404的費用外,肥胖的吸菸者每年要另外花費$19810,這可能表明吸菸會加劇(惡化)與肥胖有關的疾病。


作者簡介

慕生鵬,數據派研究部志願者。北京林業大學計算數學專業碩士在讀學生。

日常喜歡長跑,健身等活動。對數據的分析、學習很感興趣。日常會藉助網絡等資源,自助學習各類數據的分析方法。希望在數據的分析算法方面,不斷地加強功底。

數據派研究部成立於2017年初,志於打造一流的結構化知識分享平臺、活躍的數據科學愛好者社群,致力於傳播數據思維、提升數據能力、探索數據價值、實現產學研結合!

研究部的邏輯在於知識結構化、實踐出真知:梳理打造結構化基礎知識網絡;原創手把手教以及實踐經驗等文章;形成專業興趣社群,交流學習、組隊實踐、追蹤前沿
興趣組是研究部的核心,各組既遵循研究部整體的知識分享和實踐項目規劃,又會各具特色:
算法模型組:積極組隊參加kaggle等比賽,原創手把手教系列文章;
調研分析組:通過專訪等方式調研大數據的應用,探索數據產品之美;
系統平臺組:追蹤大數據&人工智慧系統平臺技術前沿,對話專家;
自然語言處理組:重於實踐,積極參加比賽及策劃各類文本分析項目;
製造業大數據組:秉工業強國之夢,產學研政結合,挖掘數據價值;
數據可視化組:將信息與藝術融合,探索數據之美,學用可視化講故事;
網絡爬蟲組:爬取網絡信息,配合其他各組開發創意項目。

點擊文末「閱讀原文」,報名數據派研究部志願者,總有一組適合你~

【一文讀懂】系列往期回顧:

【獨家】一文讀懂聚類算法

【獨家】一文讀懂關聯分析

【獨家】一文讀懂大數據計算框架與平臺

                                作者:慕生鵬

編輯:文婧

為保證發文質量、樹立口碑,數據派現設立「錯別字基金」,鼓勵讀者積極糾錯

若您在閱讀文章過程中發現任何錯誤,請在文末留言,或到後臺反饋,經小編確認後,數據派將向檢舉讀者發8.8元紅包

同一位讀者指出同一篇文章多處錯誤,獎金不變。不同讀者指出同一處錯誤,獎勵第一位讀者。

感謝一直以來您的關注和支持,希望您能夠監督數據派產出更加高質的內容。


轉載須知

如需轉載文章,請做到 1、正文前標示:轉自數據派THU(ID:DatapiTHU);2、文章結尾處附上數據派二維碼。

申請轉載,請發送郵件至datapi@tsingdata.com

相關焦點

  • 獨家 | 手把手教你用R語言做回歸後的殘差分析(附代碼)
    本文介紹了做殘差分析的方法及其重要性,以及利用R語言實現殘差分析。在這篇文章中,我們通過探索殘差分析和用R可視化結果,深入研究了R語言。殘差本質上是當一個給定的模型(在文中是線性回歸)不完全符合給定的觀測值時留下的gap。醫學中的病理學發現的殘留分析是一個形象的比喻。人們通常用代謝殘留水平來作為衡量藥物吸收的指標。
  • r語言多元線性回歸相關性_多元線性回歸調整相關性 - CSDN
    多元線性回歸多元線性回歸的核心問題:應該選擇哪些變量???RSS(殘差平方和)與R2  (相關係數的平方)選擇法:遍歷所有可能的組合,選出使RSS最小,R2  最大的模型。
  • R語言數據分析(二)回歸分析(4)
    多元線性回歸例題例:某品種水稻糙米含鎘量y(mg/kg)與地上部生物量x1(10g/盆)及土壤含鎘量x2(100mg/kg)的8組觀測值如表2.1。試建立多元線性回歸模型。9.08,1.89,3.06,10.2,0.05,0.73,1.03,6.25)y=c(4.93,1.86,2.33,5.78,0.06,0.43,0.87,3.86)由表可知,其Fvalue=392.5, Pr>F的值3.186e-06,遠小於0.01,故拒絕原假設,認為y1與x1,x2之間具有顯著性的線性關係; 由方差分析表可知
  • 手把手教你用R語言分析歌詞(附代碼)
    原標題:手把手教你用R語言分析歌詞(附代碼) 雷鋒網按 翻譯 | 劉朋 Noddleslee 程思婕 餘杭 整理 | 凡江 基於R語言對Prince的音樂的歌詞研究:用文本挖掘和探索性數據分析(EDA)來了解這位藝術家的生涯。 這是由三部分組成的系列輔導教程的第一部分,在這個系列裡,你將會使用R語言對傳奇藝術家Prince的歌詞通過各種分析任務進行實例研究。這三個教程覆蓋以下內容。
  • R 語言 lasso回歸
    在基因數據的分析中,經常會用到lasso(套索)這種方法來進行變量的篩選,其實就是在目標優化函數後邊加一個L1正則化項,其中參數lamda為超參數
  • R語言從入門到精通:Day12--R語言統計--回歸分析
    回歸作為一個廣義的概念,涵蓋了許多變種,R語言中也為其提供了強大而豐富的函數和選項(但顯然選項越多,對初學者越不友好),早在2005年,R中就有200多種關於回歸分析的函數 (https://cran.r-project.org/doc/contrib/Ricci-refcard-regression.pdf,這個文檔提供了部分回歸分析函數列表,供大家參考)。
  • R語言做主成分分析實例
    在做多樣本的RNA-Seq數據中經常會用到主成分分析(PCA)來分析,那麼什麼是PCA呢,這個可以百度一下,大概意思如下:主成分分析法是數據挖掘中常用的一種降維算法
  • 第四十講 R-線性回歸:預測模型及可信區間
    今天的課程將繼續帶大家學習R-線性回歸:預測模型及可信區間。線性回歸的一個主要目標是基於一個或多個預測變量來預測結果值。(我們也用它來研究兩個變量的相關性,同時校正其他混雜因素)。我們首先建立一個簡單的線性回歸模型,該模型根據速度預測汽車的停車距離。
  • Python數據分析|線性回歸
    Python數據分析學習筆記,今天分享下利用Python對業務進行數據預處理,並利用線性回歸進行數據預測。壹 數據導入Python下載及環境配置這裡就不贅述了哈,網上教程非常多,我們直接一開始就進入乾貨,打它一個開門見山。
  • 線性擬合與曲線擬合,直接在圖上添加擬合曲線、擬合方程、判別係數...
    1、什麼是線性擬合?線性擬合,顧名思義,針對兩組數據或多組數據,找出一條最佳擬合直線,常用於處理與自變量呈線性關係的因變量。線性擬合是數據處理的常用方法,擬合的目的是對呈現一定數值關係的因變量與自變量找出最佳擬合方程,一般用線性回歸來實現。
  • python多重線性回歸分析
    一個簡單的線性回歸模型測試。定義:線性回歸是利用數理統計中回歸分析,來確定兩種或兩種以上變量間相互依賴的定量關係的一種統計分析方法,運用十分廣泛。表達形式為y =aX+b,b為誤差服從均值為0的正態分布,a為截距。
  • R語言實現LASSO回歸模型
    對於線性模型來說,複雜度與模型的變量數有直接關係,變量數越多,模型複雜度就越高。 更多的變量在擬合時往往可以給出一個看似更好的模型,但是同時也面臨過度擬合的危險。此時如果用全新的數據去驗證模型(validation),通常效果很差。 一般來說,變量數大於數據點數量很多,或者某一個離散變量有太多獨特值時,都有可能過度擬合。
  • r語言一元回歸模型專題及常見問題 - CSDN
    一元線性回歸分析首先介紹回歸分析中最基礎的情況:一元線性回歸分析。它規定模型f函數只能是y=k*x+b的形式,即只使用一個變量x(故稱為一元)的線性形式來預測目標變量y。6.1.1引例利用某網站歷次促銷活動中促銷讓利費用和銷售金額的數據(單位是十萬元),將使用該數據集來說明線性回歸分析的應用。
  • R語言——交叉驗證法計算線性回歸模型擬合優度的第三種R方
    本來打算這周繼續更新一篇LaTex的小短文,但是貌似我已經很久沒有寫R語言相關的東西了。想來想去,今天就寫一篇和R語言有關的,畢竟不能忘記初心呀!凡是學過計量的同學,哪怕只記得一點點皮毛,對於R方和調整R方也應該是再熟悉不過了。R方和調整R方是判斷回歸模型擬合度的最為方便簡單的指標,一般來說,數值越大代表模型的擬合度越好。
  • r語言 多元回歸模型_r語言多元回歸模型殘差分析 - CSDN
    1、多元線性回歸模型1.1多元回歸模型與多元回歸方程設因變量為y,k個自變量分別為,描述因變量y如何依賴於自變量和誤差項ε的方程稱為多元回歸模型。其一般形式可表示為:式中,為模型的參數,ε為隨機誤差項。
  • 如何用EXCEL線性回歸分析法快速做數據分析預測
    回歸分析法,即二元一次線性回歸分析預測法先以一個小故事開始本文的介紹。仍清楚記得,筆者曾用得是標準的周轉天數計算公式反推法,而Edwin用的正是本文重點介紹的二元一次線性回歸分析法。二元一次線性回歸分析法是一種數據分析模型。
  • 多元線性回歸分析:納入多元回歸自變量的確定及求解多元回歸方程
    許栩原創專欄《從入門到高手:線性回歸分析詳解》第五章,多元線性回歸分析:如何求解多元線性回歸方程。在前面的章節中我講到,實際需求預測場景中,通常,影響需求的因素不止一個,對需求影響的因素可能多種多樣,也就是說自變量多種多樣,很少能用單一的變量(也即一元線性回歸分析)來做好需求預測。這時,我們需要用到多元線性回歸分析。回歸分析在需求預測的應用,也主要是多元線性回歸分析。對需求預測而言,多元線性回歸更具有實用性和有效性。
  • 統計計量 | 用R做多元線性回歸分析(文末有福利)
    回歸分析是一種統計學上分析數據的方法,目的在於了解兩個或多個變量間是否相關
  • 線性回歸分析詳解7:多元回歸方程的精度,R平方與調整後的R平方
    許栩原創專欄《從入門到高手:線性回歸分析詳解》第七章,回歸方程的精度,R平方與調整後的R平方。多元線性回歸分析,我們在求出多元線性回歸方程後,這個方程到底怎麼樣,能不能起到效果,需要對求出的回歸方程進行一系列評價和評估。這些評價和評估,首先要做的,是確認回歸方程的精度。本章,我將分如下三個小節講述回歸方程的精度,歡迎閱讀與探討。我的《線性回歸分析》專欄總目錄見下圖。
  • 用R進行Lasso regression回歸分析
    glmnet是由史丹福大學的統計學家們開發的一款R包,用於在傳統的廣義線性回歸模型的基礎上添加正則項,以有效解決過擬合的問題,支持線性回歸,邏輯回歸,泊松回歸,cox回歸等多種回歸模型,連結如下https://cran.r-project.org/web/packages/glmnet/index.html對於正則化,提供了以下3種正則化的方式