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

2021-01-08 網易

  關注

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

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

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

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

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

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

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

  

  溫馨提示

  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.

相關焦點

  • 機器學習 · R語言包大全(共99個包)
    有很多R語言包都可以實現機器學習相關的思想和方法。,可回復「深度學習」查看統計諮詢公眾號前期的文章《Deep Learning in R · R語言深度學習》。:回歸、分類、生存分析等的樹狀結構模型,被推薦進行分類回歸樹分析(Classification and Regression Tree, CART)tree:同rpartRWeka:t提供接口連接到懷卡託智能分析環境(Waikato Environment for Knowledge Analysis, Weka),該軟體擁有豐富的分類算法,包括J4.8、C4.5、M5等
  • R語言 馬賽克圖
    馬賽克圖是《R語言實戰》書籍開篇中的彩圖,偶然遇到了學習分享一下~Library(vcd)mosaic
  • 實踐入門NLP:基於深度學習的自然語言處理
    如何才能選擇低成本,高效率的方式來入門和學習NLP呢?【NLP工程師入門實踐班】——基於深度學習的自然語言處理開車啦!!還不趕緊上車!?分類與回歸模型二、自然語言基礎Word vector與Word embedding什麼是分詞、詞性標註、依存句法分析等?
  • 蒙太奇是必須要掌握的視聽語言!帶你從入門到精通(上)
    前言上篇文章我們主要介紹了「視聽語言的基本內容(下)」,如果沒有看過的小夥伴可以看一下,因為我們的課程是由淺入深的。今天我們介紹的是關於「視聽語言的重要部分——蒙太奇的介紹與了解」。蒙太奇作為視聽語言裡面最難理解,最難把控的一部分需要單獨拎出來講解。這篇文章我將分成「什麼是蒙太奇?」
  • 電腦入門程式語言
    今天和大家介紹一下電腦入門編程學什麼語言更合適。首選python語言,python 是一門開源免費、通用型的腳本程式語言,現在社會上會python語言的人很吃香的。它上手簡單,功能強大,堅持「極簡主義」。
  • 精通多種語言的明星,鄧麗君會十幾種語言,他是湯唯的老師
    林依晨大學時就讀臺灣政治大學韓文系,學習韓文,她精通國語、英語、韓語。正因為林依晨的韓文專業,其他演員進軍韓國時遇到的最大困難語言障礙對林依晨來說卻絲毫不成問題。莫文蔚:精通英文、法文、意文,粵語、普通話也不錯張智堯曾去過20多個國家,在巴拉圭、巴西、義大利、西班牙等國都居住過,而他會的語言也不少,他精通英語、西班牙語、葡萄牙語、法語、義大利語、臺語、粵語、國語等語言,可以說是娛樂圈語言實力最強的男星。林依晨大學時就讀臺灣政治大學韓文系,學習韓文,她精通國語、英語、韓語。
  • 回歸、分類與聚類:三大方向剖解機器學習算法的優缺點(附Python和R...
    機器學習任務在本次梳理中,我們將涵蓋目前「三大」最常見機器學習任務:回歸方法分類方法聚類方法說明:本文的梳理不會涵蓋具體領域的問題,比如自然語言處理。本文也不會對每個算法都進行梳理。因為現有太多算法,而且新的算法也層出不窮。然而,這份清單將向讀者展現對每個任務而言目前具有代表性的算法概覽。
  • 一個半圓的半徑是r,它的周長是()A.πrB.πr+rC.r(π+2)
    題目一個半圓的半徑是r,它的周長是A.πr B.πr+r C.r(π+2)普通學生思路:半圓的周長公式是:π×直徑÷2+直徑=半圓周長。半徑是r,則直徑是2r,代入公式得:π×2r÷2+2r=πr+2r=r(π+2) 故選C。
  • 是R的圖
    原來Rstudio還可以這麼使用,又方便了一些在R中讚揚下努力工作的你,獎勵一份CheatShet別人的電子書,你的電子書,都在bookdownR語言 - 入門環境RstudioR語言 - 熱圖繪製 (heatmap)R語言 - 基礎概念和矩陣操作R語言 - 熱圖簡化R語言 - 熱圖美化
  • 爐石傳說 了解魚人語:從入門到放棄 發音篇
    爐石傳說 了解魚人語:從入門到放棄 發音篇 上節課我們學習到了兩篇魚人文章,作者為魚人著名詩人,
  • 義大利語大舌顫音R怎麼發?
    一般剛開始都只能連續卷好幾下,但是義大利語裡面很多時候r只要輕輕卷一下(比如r在兩個元音之間時),這個就要更長時間的練習了。練習大舌顫必須要集中地練,據說她大一的時候每天上樓下樓飯堂排隊走路上課的時候都不停地練,連續練了三四周,然後就練會了。
  • 優秀機器學習和AI課程推薦,帶你從入門到精通
    字幕組雙語原文:最棒的免費機器學習和AI課程,讓你從入門到精通英語原文:Awesome Machine Learning and AI Courses翻譯:雷鋒字幕組(明明知道)這是一個精心策劃、超讚的、免費的機器學習和人工智慧課程與視頻講座清單。
  • 《Unreal Engine 4從入門到精通》國內首本UE4書籍面市
    Epic Games 公司為適應遊戲編程的特殊性需要而專門為虛幻系列遊戲引擎創建了 UnrealScript 程式語言,該語言讓遊戲引擎變得容易方便,因而虛幻遊戲引擎開始名聲大噪。2002 年,Epic 發布了 Unreal Engine 2,能夠對物體的屬性進行實時修改,也支持了當時的次世代遊戲機,PlayStation2、XBox 等。
  • r音發成l音,「吃肉」為什麼是「吃漏」!
    對於某些地方的人來說,區分「r」和「l」是存在一定難度的。這是因為在某些地區的方言中並沒有「r」這個聲母,發不出來r音。所以當他們遇到聲母是r的字時,通常會改讀成別的聲母,比如部分浙江人會把「好熱」念成「好樂」,江西人會把「吃肉」念成「吃漏」,雖然大家都知道他們念的是什麼意思,但難免還是會忍不住鬧出笑話~今天我們就來說說「r」音與「l」音的區別,以及如何進行有效的發音練習。一、r音與l音的區別先來個名詞解釋成阻的意思:發音時,發聲器官形成阻礙產生聲音的位置。
  • 蒂姆的英語課- 07 嵌入式 /r/ 發音 The intrusive -r
    In fluent speech, if a word ends in an // sound, like law and the next word begins in an //, you'll often hear a /r/ sound linking them together. Law-r-and order. Law-r-and order.
  • Go語言和Java、Python等其他語言的對比分析
    因為Go語言容易學習,所以一個普通的大學生花幾個星期就能寫出來可以上手的、高性能的應用。在國內大家都追求快,這也是為什麼國內Go流行的原因之一。Go 語言的語法特性簡直是太簡單了,簡單到你幾乎玩不出什麼花招,直來直去的,學習曲線很低,上手非常快。
  • 高考英語3500詞彙(R):單詞+詞組+句型
    光輝, 光線razor [ˈreɪzə(r)] n. 剃鬚刀reach [riːtʃ] v. 到達, 伸手(腳)夠到beyond (out of ) reach 夠不著within one’s reach 夠得著reach (one’s hand) for 伸手夠...
  • 新手入門後端服務,選什麼程式語言?
    那麼後端服務開發有好幾門語言,新手到底應該選擇什麼程式語言呢?程式語言分為面向過程和面向對象語言。這是啥,是不是有點懵。不用急,今天我們從簡單入手介紹下幾門語言。大家選擇適合自己的,著手學習就好。大家首先需要確定自己未來的開發領域,比如說遊戲,應用軟體,嵌入式等等。這是大家選擇語言的基礎。實際上,不管哪種程式語言對這些開發領域,都可以勝任。
  • 成年人說話不清楚很丟人麼,他們的語言康復怎麼辦
    同事的朋友很煩,說自己這些年一直飽受語言障礙困擾,尤其是近兩年,說話越來越不利索了,正常說話時吞字,讀文章都不連貫,想說的話在嘴邊,就是說不好,作為職場的成年人,語言表達不過關,一定會影響工作的。成年人語言障礙常見的問題有哪些?
  • 在四大歐洲語言中,哪個小語種最好學?
    一提到法德西意這些小語種,大部分初學者會覺得入門難。難在哪兒?小舌音或大舌音發不出,舌頭都捋不直了;背單詞還要記性別,陰性、陽性,甚至中性;動詞居然還要根據不同人稱不同時態進行變位……還不是單個語種這樣,而是每一個,每一個!這麼一比較,英語在入門階段簡直是業界良心!學了西語和義大利語,你會愛上彈舌的感覺,天天沒事就發個大舌音玩兒。