R語言從入門到精通:Day12--R語言統計--回歸分析

2021-01-09 網易

  關注

  從許多方面來看,回歸分析都是統計學的核心。它其實是一個廣義的概念,通指那些用一個或多個預測變量(也稱自變量)來預測響應變量(也稱因變量) 的方法。通常,回歸分析可以用來挑選與響應變量相關的預測變量,可以描述兩者的關係,也可以生成一個等式,通過預測變量來預測響應變量。

  回歸分析在現代統計學中非常重要,本次教程內容安排如下:

  首先:看一看如何擬合和解釋回歸模型,然後回顧一系列鑑別模型潛在問題的方法,並學習如何解決它們;

  其次:我們將探究變量選擇問題(對於所有可用的預測變量,如何確定哪些變量包含在最終的模型中?);

  然後:我們將討論一般性問題(模型在現實世界中的表現到底如何?);

  最後:我們再看看相對重要性問題(模型所有的預測變量中,哪個最重要,哪個第二重要,哪個最無關緊要?)。

  所以這次的內容很多,估計會成為這個系列中最長最複雜的一篇教程,不過堅持下來應該也是收穫最多的一篇教程

  

  溫馨提示

  1、本節內容重點內容較多,

  務必緊跟紅色標記。

  2、測試數據及代碼

  見文末客服小姐姐二維碼。

  回歸作為一個廣義的概念,涵蓋了許多變種,R語言中也為其提供了強大而豐富的函數和選項(但顯然選項越多,對初學者越不友好),早在2005年,R中就有200多種關於回歸分析的函數 (https://cran.r-project.org/doc/contrib/Ricci-refcard-regression.pdf,這個文檔提供了部分回歸分析函數列表,供大家參考)。

  這些R函數對應了回歸分析的各種變體(如Logistic回歸,泊松回歸等等),而這次的內容主要關於OLS(普通最小二乘)回歸法,包括了簡單線性回歸、多項式回歸和多元線性回歸,下次再介紹其它常用的回歸分析。

  OLS回歸是通過預測變量的加權和來預測量化的因變量,其中權重是通過數據估計而得的參數,一些典型的可以用OLS回歸解決的問題包括了:

  

  如果你讀到這裡發現自己還不知道什麼是OLS(普通最小二乘)回歸,建議去補習一下統計學知識了,否則作為未來的統計學家卻不知道基礎的統計學知識,也太不像話了,被說認識我科研貓~~

  

  
所以這裡默認大家都了解OLS回歸的數學原理和基礎術語,直接進入R函數的介紹了。

  1、線性擬合的常用函數

  在R中,擬合線性模型最基本的函數就是函數lm(),格式為:

  myfit <- lm(formula, data)

  回歸分析裡的參數formula對應著要擬合的模型形式,data是一個數據框,包含了用於擬合模型的數據。閱讀過本系列的上一篇關於方差分析的教程的同學對參數formula肯定很熟悉了,這裡同樣提供了一個參數formula中常用符號的表格:

  

  表1:參數formula中的常用符號

  除了函數lm(),表2還列出了其他一些對做簡單或多元回歸分析有用的函數。擬合模型後,將這些函數應用於函數lm()返回的對象,可以得到更多額外的模型信息。

  

  表2: 對擬合線性模型非常有用的其他函數

  2、回歸模型中的變量

  當回歸模型包含一個因變量和一個自變量時,我們稱為簡單線性回歸。當只有一個預測變量, 但同時包含變量的冪(比如,X、X2、X3)時,我們稱為多項式回歸。當有不止一個預測變量時,則稱為多元線性回歸。首先從一個簡單的線性回歸例子開始,然後逐步展示多項式回歸和多元線性回歸,最後介紹一個包含交互項的多元線性回歸的例子。

  基礎安裝中的數據集women提供了15個年齡在30~39歲間女性的身高和體重信息,我們通過身高來預測體重,獲得一個等式可以幫助我們分辨出那些過重或過輕的個體。圖1展示了擬合結果,通過代碼的輸出結果,可以得到預測等式:weight` = -87.52+3.45*height。輸出結果中的F 統計量檢驗所有的預測變量預測響應變量是否都在某個機率水平之上。由於簡單回歸只有一個預測變量,此處F檢驗等同於身高回歸係數的t檢驗。

  

  圖1:簡單線性回歸圖示

  圖1 中可以看出我們其實可以用一個彎曲的曲線(多項式回歸)來提高預測的精度,多項式回歸允許你用一個解釋變量預測一個響應變量,它們關係的形式即n次多項式。圖2展示了擬合含二次項等式的結果,可以看出曲線確實擬合得較好。大家可以嘗試自己從代碼的輸出結果中得出預測的結果等式。

  

  圖2:多項式回歸

  當然你也可以用三次甚至更高次的多項式來完成這次回歸分析,但我發現使用比三次更高的項幾乎沒有必要car包中的函數scatterplot()可以很容易、方便地繪製二元關係圖,大家可以參考後臺代碼學習。

  當預測變量不止一個時,簡單線性回歸就變成了多元線性回歸,分析也稍微複雜些。從技術上來說,多項式回歸可以算是多元線性回歸的特例:二次回歸有兩個預測變量(X和X2),三次回歸有三個預測變量(X、X2和X3)。以基礎包中的state.x77數據集為例,探究一個州的犯罪率和其他因素的關係,包括人口、文盲率、平均收入和結霜天數(溫度在冰點以下的平均天數)。多元回歸分析中,第一步檢查一下變量間的相關性(如圖3)。

  

  圖3:變量相關性檢查

  從圖中可以看到,謀殺率是雙峰的曲線,每個預測變量都一定程度上出現了偏斜。謀殺率隨著人口和文盲率的增加而增加,隨著收入水平和結霜天數增加而下降。同時,越冷的州府文盲率越低,收入水平越高。多元回歸的結果顯示文盲率的回歸係數為4.14,表示控制人口、收入和溫度不變時,文盲率上升1%,謀殺率將會上升4.14%,它的係數在p<0.001的水平下顯著不為0。相反,Frost的係數沒有顯著不為0(p=0.954)。

  以上分析中,並沒有考慮預測變量的交互項。接下來,我們將考慮一個包含此因素的例子。以mtcars數據框中的汽車數據為例,把汽車重量和馬力作為預測變量,並包含交互項來擬合回歸模型。通過effects包中的函數effect(),可以用圖形展示交互項的結果。

  

  圖4:交互項圖形

  回歸分析的結果告訴我們,馬力與車重的交互項是顯著的(p=0.00081),說明每加侖汽油行駛英裡數與汽車馬力的關係依車重不同而不同。若兩個預測變量的交互項顯著,說明響應變量與其中一個預測變量的關係依賴於另外一個預測變量的水平。從圖4中可以很清晰地看出,隨著車重的增加,馬力與每加侖汽油行駛英裡數的關係減弱了。當wt=4.2時,直線幾乎是水平的,表明隨著hp的增加,mpg不會發生改變。

  3、模型的評估

  討論完以上內容中,我們使用lm()函數來擬合OLS回歸模型,通過summary()函數獲取模型參數和相關統計量。但是,沒有任何輸出告訴我們模型是否合適,對模型參數推斷的信心依賴於它在多大程度上滿足OLS模型統計假設(這將決定回歸分析得出的模型應用到真實世界中時的預測效果)。下面我們要對模型進行診斷(回歸診斷)。

  R基礎安裝中提供了大量檢驗回歸分析中統計假設的方法。最常見的方法就是對函數lm()返回的對象使用函數 plot(),可以生成評價模型擬合情況的四幅圖形。

  

  圖5:簡單回歸分析的診斷圖

  理解上面這些圖形需要一些回歸分析的基礎知識,這可能需要你的數學老師花一個上午來講解,在這裡我只能簡單解釋四幅圖的含義:

  

  圖5中左上圖中可以清楚地看到一個曲線關係,這暗示著你可能需要對回歸模型加上一個二次項(這裡檢查了回歸分析統計假設中的「線性」);

  

  右上圖檢查正態性,若滿足正態假設,那麼圖上的點應該落在呈45度角的直線上;

  

  左下圖檢查同方差性,滿足的條件下水平線周圍的點應該隨機分布;

  

  右下圖提供了你可能關注的單個觀測點的信息,從圖形可以鑑別出離群點、高槓桿值點和強影響點。

  

  圖6則是二次擬合的診斷圖。圖6表明多項式回歸擬合效果比較理想,基本符合了線性假設、殘差正態性(除了觀測點13)和同方差性(殘差方差不變)。觀測點15看起來像是強影響點(根據是它有較大的 Cook距離值),刪除它將會影響參數的估計。事實上,刪除觀測點13和15,模型會擬合得會更好。但是對於刪除數據,要非常小心,因為本應是模型去匹配數據,而不是反過來。

  

  圖6:二次擬合的診斷

  最後,用這個方法去診斷多元回歸分析的結果。

  

  圖7:多元回歸的診斷

  這些R中的基礎函數的診斷結果對初學者並不友好,相信你們已經體會到了這一點,不過我們還有更好的工具可以選擇。car包中就提供很多診斷函數,見表3。

  

  表3:car包中的回歸診斷函數

  利用這些函數依次檢查回歸分析的統計假設,函數qqPlot()提供了更為精確的正態假設檢驗方法;函數durbinWatsonTest()檢查誤差的獨立性;函數crPlots()檢查因變量與自變量之間是否呈非線性關係;函數ncvTest(),函數spreadLevelPlot()檢查同方差性;函數vif()檢查多重共線性。

  

  圖8:函數qqPlot()的結果

  除了Nevada,所有的點都離直線很近,並都落在置信區間內,這表明正態性假設符合得很好。代碼中還提供了一個自定義的生成學生化殘差柱狀圖(即直方圖),感興趣的同學可以試一下。函數durbinWatsonTest()的結果不顯著(p= 0.282)說明無自相關性,誤差項之間獨立。

  

  圖9:函數crPlots()的結果

  圖9說明成分殘差圖證實了你的線性假設,線性模型形式對該數據集看似是合適的(如果不合適,就需要添加一些曲線成分,比如多項式項,或對一個或多個變量進行變換(如用log(X)代 替X),或用其他回歸變體形式而不是線性回歸)。

  

  圖10:同方差性檢查結果

  可以看到,函數ncvTest()的結果不顯著(p=0.19),說明滿足方差不變假設,還可以通過分布水平圖 (圖10)看到這一點。

  函數vif()的結果則表明預測變量不存在多重共線性問題。

  最後,gvlma包中的函數gvlma()能對線性模型假設進行綜合驗證,同時還能做偏斜度、峰度和異方差性的評價。換句話說,它給模型假設提供了一個單獨的綜合檢驗(通過/不通過)。代碼中已提供示例。

  4、異常值的處理

  前面的回歸分析中出現了一些不符合模型的點,當時的建議是刪除這些「不聽話「的點,但這並不是一個嚴謹的辦法。一個全面的回歸分析要覆蓋對異常值的分析,包括離群點、高槓桿值點和強影響點。這些數據點需要更深入的研究,因為它們在一定程度上與其他觀測點不同,可能對結果產生較大的負面影響。

  離群點是指那些模型預測效果不佳的觀測點。Q-Q圖不失為一種識別離群點的方法,car包也提供了一種離群點的統計檢驗方法,函數outlierTest()。

  高槓桿值觀測點,即與其他預測變量有關的離群點。代碼中提供了一個自定義的函數來檢查這些點,結果如圖11。

  

  圖11:高槓桿值的檢查

  強影響點,即對模型參數估計值影響有些比例失衡的點。有兩種方法可以檢測強影響點:Cook距離,或稱D統計量,以及變量添加圖。代碼中繪製了一個Cook距離的示例圖,圖12。圖中可以看到三個強影響點。

  

  圖12:Cook距離圖

  Car包中函數avPlots()也有對應的功能,代碼中已提供例子。

  當然,利用car包中的函數influencePlot(),你還可以將離群點、槓桿值和強影響點的信息整合到一幅圖形中(代碼中已提供例子)。

  發現了這些異常點之後,一般有四種辦法來處理:刪除、變量變換、變量增刪、使用其他回歸方法。這四種方法中的變量變換在car包中有函數boxTidwell()和函數powerTransform() 幫助我們確定確定該如何進行變換(代碼已提供例子)。

  變量增刪換一個說法,其實就是選擇合適的自變量,有以下兩種流行的方法:逐步回歸法(stepwise method)和全子集回歸(all-subsets regression)。MASS包中的函數stepAIC()可以實現前者(代碼例子中給出了向後回歸(逐步回歸中的一種))。全子集回歸則可用leaps包中的regsubsets()函數實現(代碼例子中提供兩個繪圖方法,供大家自己選擇)。變量的選擇在有大量變量的情況似乎會帶來很大的困擾,這時就需要背景知識來幫助你做出選擇,不要把時間浪費在毫無實際意義的變量上。

  而第四種方法則帶來了新的問題:怎麼判斷哪種回歸模型是最適合數據的呢?當只需要在兩個模型之間選擇時,函數anova()和函數AIC()可以解決這個問題(代碼中已提供例子)。如果有100個甚至更多模型呢,交叉驗證就不失為一個好方法了。所謂交叉驗證,即將一定比例的數據挑選出來作為訓練樣本,另外的樣本作保留樣本,先在 訓練樣本上獲取回歸方程,然後在保留樣本上做預測。bootstrap包中的函數crossval()可以實現交叉驗證,在此基礎上可以自定義一個函數來對模型的R平方統計量做了k重交叉驗證(函數及例子見代碼)。

  做完回歸分析,對模型進行診斷,解決了模型,異常點的問題,最後一個問題是哪些變量對模型最重要呢?或者說根據相對重要性對預測變量進行排序。最簡單的莫過於比較標準化的回歸係數,它表示當其他預測變量不變時,該預測變量一個標準差的變化可引起的響應變量的預期變化(在此之前,需要用函數scale()對數據進行標準化處理,例子見代碼)。同時,relaimpo包涵蓋了一些相對重要性的評價方法。最後,相對權重(relative weight)是一種比較有前景的新方法,它是對所有可能子模型添加一個預測變量引起的R平方平均增加量的一個近似值(代碼中提供了一個生成相對權重的函數)。圖13表明Illiteracy有最大的相對重要性,這和回歸係數的結果是一致的。

  

  圖13:相對權重

  小結

  總的來說,在統計中,回歸分析是許多方法的一個總稱,它是一個交互性很強的方法,包括擬合模型、檢驗統計假設、修正數據和模型,以及為達到最終結果的再擬合等過程,所以本次教程內容很長。下一次將會討論更加複雜的回歸模型,但總體思路是類似的,學習起來也不會很複雜。

  加油

  ·

  R語言統計-回歸分析

  資源獲取方法新規

  2

  0

  2

  1

  新年快樂

  科研繪圖神器—hiplot,是2020年7月19日openbiox聯合科研貓鄭重推出的全網首個開源繪圖平臺,目前提供基於R語言的70餘種基礎可視化和50餘種進階繪圖的功能,同時還部署了多個 openbiox社區項目(如bget下載文獻附錄、UCSCXenaShiny 等)。

  截止目前,網站的總訪問量大約37萬餘次,日均訪問量五千餘次,註冊用戶上萬人。

  https://hiplot.com.cn

  點擊圖片進入Hiplot平臺介紹

  所有功能免費

  更多科研新鮮資訊、文獻精讀和生物信息技能

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺「網易號」用戶上傳並發布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關焦點

  • 自然語言處理(NLP)入門指南
    displaCy網站上的可視化依賴解析樹https://demos.explosion.ai/displacy/?&model=en&cpu=1&cph=0記得我曾經讀到過這樣一段話,如果你覺得有必要回答兩次同樣的問題,那就把答案發到博客上,這可能是一個好主意。根據這一原則,也為了節省回答問題的時間,我在這裡給出該問題的標準問法:「我的背景是研究**科學,我對學習NLP很有興趣。應該從哪說起呢?」
  • C語言入門級教程:基礎數據類型與基本算法,學編程從此刻開始!
    ● 指針類型 指針是C語言的精華所在,許多程式語言中都支持某種形式的指針,但最著名的是C語言。 指針的特殊性在於它的值是一個內存地址。關於指針後面我們會詳細說明。
  • R語言中使用lines函數繪製折線圖
    lines函數概述R語言中,abline函數每次僅能繪製一條直線,如果給出若干點,依次用線段連接起來的話,這可以藉助lines函數。R語言中lines函數的使用格式如下:lines(x, y = NULL,...)其中,x和y為繪製直線的點向量,x和y應為數值型向量。附加參數可以用來指定線型(如點線,點劃線等)、線的顏色、線的寬度等等。
  • 電腦入門程式語言
    今天和大家介紹一下電腦入門編程學什麼語言更合適。首選python語言,python 是一門開源免費、通用型的腳本程式語言,現在社會上會python語言的人很吃香的。它上手簡單,功能強大,堅持「極簡主義」。
  • 比利時公主精通5門語言:語言人文對孩子一生的影響深入骨髓
    比利時準女王12歲精通5門語言伊莉莎白公主出生於2001年10月25日,她是比利時國王菲利普和王后瑪蒂爾德的第一個女兒。語言人文奠定人生基石在現代社會,語言能力很大程度上決定一個人的發展潛力。現代社會幾乎所有的知識都建立在語言基礎上,即便是口頭傳授的經驗,其內容本身也會受到語言表達的影響。
  • c語言入門教程
    這本書被 C語言開發者們稱為"K&R",很多年來被當作 C語言的非正式的標準說明。人們稱這個版本的 C語言為"K&R C"。  c語言宣傳圖1970到80年代,C語言被廣泛應用,從大型主機到小型微機,也衍生了C語言的很多不同版本。
  • 神操作:教你如何將Vim變成一個R語言IDE
    R In Vim  首先,在Vim中尋求R語言支持就是很殘酷的,不僅選擇少,而且支持也很少!  R file + R console  值得注意的一點是,控制臺並沒有綁定到當前緩衝區。這意味著您可以將多個緩衝區都輸入到同一個控制臺。
  • C語言中宏定義的用法
    說到宏定義,我們應該先了解什麼是預處理指令,相信大家並不會陌生,之前我們編程時,程序的開頭#include指令,#define指令都是預處理指令,它能使我們的編譯更加的高效,便捷,因此C語言中是允許用戶自己加入一些特定的預處理指令的。
  • R語言基本功:數據集取子集
    如果讓我推薦一門統計軟體,我就推薦你學R語言。R不僅具有非常強大的統計分析能力和繪圖能力,更重要的是免費。在未來,越來越來的期刊會要求使用正版軟體。網上有不少針對R語言的教程,有一些確實不錯,但使用起來,總有些實際很常用,卻沒有講的內容,所以我想著從實戰出發,自己爭取出個系列教程,方便大家使用。
  • 語言模型上
    ,xn1)2.2 從聯合概率鏈規則到n-gram語言模型上面的聯合概率鏈規則公式雖然考慮到了所有的詞和詞之間的依賴關係,但是非常複雜,在實際生活中幾乎沒辦法使用,於是我們就想了很多辦法去近似這個公式,效果又要求比獨立性假設好。
  • 精通多門語言,對你的大腦有什麼好處?
    精通多門語言,可以在實質上改變你大腦的結構和工作方式:Hablas espaol? Parlez-vous franais?你會說中文嗎?如果你能回答,「sí」, 「oui」或者「會」,或者看英文視頻無障礙,那麼說明你很可能精通,並可以使用多種語言。
  • 在R中學習R語言:swirl
    一、安裝環境swirl要求R語言版本>=3.1.0,作者十分推薦安裝RStudio,但不是強制的。
  • 英語發音教學 04 R音 R sound
    This video is about the /r/ sound, the letter R.在這段視頻中,我將向你展示如何準確地發出五個最常發錯的輔音中的一個和它最典型的字母(組合)。那麼,我們開始吧。本集視頻關於字母 R 的發音/r/音。
  • 爐石傳說 了解魚人語:從入門到放棄 發音篇
    爐石傳說 了解魚人語:從入門到放棄 發音篇 上節課我們學習到了兩篇魚人文章,作者為魚人著名詩人,
  • 學員問:C語言入門要掌握哪些基礎知識?
    4.4 字符常量—字符常量的標誌是一對單引號『 』,c語言中的字符常量有兩類:1)由一對單引號括起來的一個字符,如『a 』, 『r』 ,『#』。#include #define PI 3. main() {float r,s; r=12.5; S=PI *r*r; printf(「s= %f 」,s); }說明:#define 是宏定義,此程序中所有出現PI的地方都代表3
  • 2020 年七大 AI 程式語言大盤點
    太多的自由,會導致沒有人能讀懂別人的代碼;太少的自由,會傷害到語言的表現力。——Guido van Rossum使用Python,你不僅可以獲得優秀的社區支持和大量的庫,還可以享受程式語言提供的靈活性。Python最有可能讓你受益的一些特性是:平臺獨立性和可以用於深度學習和機器學習的廣泛框架。
  • R語言描述統計第一彈|計算鐵達尼號不同艙位的存活率
    作者:丁點helper來源:丁點幫你今天開始學習在R語言中做描述性統計。想要把一個.csv格式的數據導入R,可以用read.csv()這個函數:# 將本地文件titanic.csv導入到R中,# 並存儲到titanic這個對象中titanic <- read.csv("//Users//Desktop//titanic.csv",header = TRUE)假設該本地文件存儲的是1912
  • Semgrep代碼靜態分析:從入門到實戰xss掃描
    靜態分析是一個非常有用的工具,使用它可以幫助開發者或者安全人員在開發階段就能發現代碼中存在的bug和安全問題。靜態分析是一個綜合性和系統性的工程,對於每一個開發者和安全人員來說了解其原理,並能使用工具進行初步的分析很有必要。
  • 潮科技行業入門指南 | 深度學習理論與實戰:提高篇(14)——Mask R...
    作者李理,環信人工智慧研發中心vp,有十多年自然語言處理和人工智慧研發經驗,主持研發過多款智能硬體的問答和對話系統,負責環信中文語義分析開放平臺和環信智慧機器人的設計與研發。以下為正文。= results[0] visualize.display_instances(image, r['rois'], r['masks'], r['class_ids'], class_names, r['scores'])檢測結果r包括rois(RoI)、masks(對應RoI的每個像素是否屬於目標物體)、scores(得分)和class_ids(類別)。
  • 一起來捉妖極坐標方程r=aθ是什麼意思 r=aθ線索答案
    一起來捉妖520新出的活動就是全新的套裝貓,其中給了玩家4個線索,最後一個線索直接出了一個方程式r=aθ,那麼r=aθ是什麼意思呢?下面來和小編一起看看吧。  一起來捉妖極坐標方程r=aθ什麼意思