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

2021-01-07 網易

  關注

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

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

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

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

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

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

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

  

  溫馨提示

  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語言從入門到精通:Day1
    今天是我們的系統教程《R語言從入門到精通》的第一講,前面的背景講解中《從今天開始,每天學點R語言~》,已經深入探討過R語言的重要性以及學習R語言的必要性
  • R語言從入門到精通:Day1-R語言的安裝
    今天是我們的系統教程《R語言從入門到精通》的第一講,前面的背景講解中《從今天開始,每天學點R語言~》,已經深入探討過R語言的重要性以及學習R語言的必要性
  • R語言從入門到精通:Day13-R語言回歸分析
    廣義線性模型就包含了非正態因變量的分析,本次教程的主要內容就是關於廣義線性模型中流行的模型:Logistic回歸(因變量為類別型)和泊松回歸(因變量為計數型)。開始本次的教程之前,同樣的,我們默認大家已經了解了廣義線性模型的統計學理論背景,直接進入R語言的函數學習。
  • R語言從入門到精通:Day6-R語言數據操作進階及控制結構
    上面這些簡單而重要的統計函數將會伴隨你使用R語言的全部旅程。3.  概率函數(了解)數學課上,概率和統計都是放在一起學習的,有一門課程就叫做概統,但是這裡我們把概率函數和統計函數分開講解。下面是正態分布的d、p、q、r四個函數的舉例。
  • R語言從入門到精通:Day10-R語言統計入門代碼大全
    接下來的幾次教程內容就是為了解決這些問題,我們會逐步學習R語言中的一些統計方法,希望大家在學習新內容的同事,也可以回顧一下自己之前學過的統計學課程。本次教程將主要關注R語言中生成基本的描述性統計量和推斷統計量的R函數。寫在開篇的話,本篇教程內容較多,請務必靜下心來學習。1、本節內容重點內容較多,      務必緊跟紅色標記。
  • R語言從入門到精通:Day4
    這些數據類型在我們運用R語言解決實際問題的時候都非常有用,在上節的例子中我們是在R裡面直接生成的數據,但是實際數據分析中,如何快速靈活的讀取和處理多種格式的外部數據呢?這節課的主要內容,我們就來講講R語言中數據的讀取。1、本節內容重點內容較多,      務必緊跟紅色標記。2、測試數據及代碼      見文末客服小姐姐二維碼。
  • R語言從入門到精通:Day2
    今天,我們就開始進入到《R語言從入門到精通》的第二節:R和RStudio的使用。上節課程中,我們講解了R和RStudio的安裝,本節內容我們來學習如何使用他們。有同學可能覺得簡單,那不就是打開軟體直接敲擊幾個命令就行了嘛。其實不然哦,R和RStudio是我們這一系列課程最重要的基礎,特別是RStudio的使用,所以我們有必要把它們兩個詳細系統地給大家講解一下。
  • 利用R語言進行logistic回歸分析 | 30 天學會R DAY 26
    Logistic回歸以及它效應值指標OR值一起,是R語言學習最重要的內容之一。開展logistic回歸分析Logistic回歸分析採用R語言自帶函數glm(), 建模包括函數式和連接式。函數式即因變量~自變量+自變量,連接式為family=…。glm()本意為建立一個廣義線性模型,因此我們不僅可以建立線性回歸分析,logistic回歸分析,還可以建立Poisson回歸分析。
  • R語言從入門到精通:Day14(PCA & tSNE)
    主成分分析(Principle component analysis, PCA)前面我們已經用兩期教程跟大家講過理論和實際繪圖(在線主成分分析Clustvis和主成分分析繪圖)。今天,我們就從PCA的數理統計層面入手,去講講完整的PCA應該怎麼操作。
  • R 語言入門學習路線與資源匯總
    剛開始學習R語言,可以看一些免費入門視頻,可以在B站上面搜,B站有很多免費的R語言入門視頻,比如《尚學堂尹鴻的R語言速成實戰》[1],這個視頻是免費的,視頻講義素材來源於《R語言實戰》的第一章到第六章,這幾章可以邊看書邊跟著視頻學習,用來簡單入門基本夠了。
  • R語言從入門到精通:Day2-R和RStudio的運行視頻教程
    本來想著R語言雖然重要,但是肯花心思學習的人可能還是少數,大家可要持之以恆喲。
  • R語言 | 回歸分析(四)
    R: The R Project for Statistical Computinghttps://www.r-project.org/RStudio:https://rstudio.com/今天是我們最後一期R語言入門系列。從去年11月份到今天,中間也因學業停更了很久,好在堅持了下來。
  • 【萬字長文】R語言入門學習路線與資源匯總
    今天簡單介紹下R語言的學習路線以及R學習資源匯總。下面涉及到的R語言書籍我打包了PDF文件,有需要的在本公眾號後臺回復20210112即可免費獲取,整理不易,伸手黨勿擾。1.剛開始學習R語言,可以看一些免費入門視頻,可以在B站上面搜,B站有很多免費的R語言入門視頻,比如《尚學堂尹鴻的R語言速成實戰》[1],這個視頻是免費的,視頻講義素材來源於《R語言實戰》的第一章到第六章,這幾章可以邊看書邊跟著視頻學習,用來簡單入門基本夠了。
  • 醫學統計與R語言:Tobit回歸模型
    醫學統計與R語言:多重比較P值的可視化醫學統計與R語言:爬蟲抓取國自然基金信息醫學統計與R語言:多元方差分析與非參數多元方差分析醫學統計與R語言:使用R語言實現Johnson-Neyman分析醫學統計與R語言:多層線性模型圖示醫學統計與R語言:多層線性模型(混合線性模型醫學統計與R語言:best
  • Tidy時代R語言學習的一些ABC
    作為一種統計程式語言,R最初的用戶主要集中在學術領域,開源的優勢和快速、便利的統計建模,可以讓研究人員擺脫昂貴又不夠靈活的各種商業軟體。大數據革命的出現,將R帶到了數據科學舞臺的中央,R語言從學術界破圈而出,獲得了迅猛的發展。然而,R本身作為統計語言的一些固有缺點在越來越複雜的數據問題面前也逐漸暴露出來。比如,R的語法不夠規範,計算效率慢、工業化部署能力差等等。
  • R語言和Python實現回歸分析
    r的取值範圍是[-1,1],r=1表示完全正相關!r=-1表示完全負相關!r=0表示完全不相關。為什麼要對相關係數進行顯著性檢驗?多重共線性:多重共線性與統計假設沒有直接關聯,但是對於解釋多元回歸的結果非常重要。相關係數反應兩個變量之間的相關性;回歸係數是假設其他變量不變,自變量變化一個單位,對因變量的影響,而存在多重共線性(變量之間相關係數很大),就會導致解釋困難;比如y~x1+x2;x·1與x2存在多重共線性,當x1變化一個單位,x2不變,對y的影響;而x1與x2高度相關,就會解釋沒有意義。
  • 基於R語言的主成分和因子分析
    主成分分析主成分分析,是一種降維的分析方法,其考察多個變量間相關性的一種多元統計方法,研究如何通過少數幾個主成分來揭示多個變量間的內部結構
  • 如何入門R語言
    加上作者的語言也生動(統計之都幾位老師的翻譯功不可沒),讀起來特別愉悅。全書前5章是基本操作,後面是一些具體建模方法。整體內容非常充實,包括了因子分析,主成分分析等多元統計方法,也有線性回歸、廣義線性模型等回歸模型的詳細介紹。在畫圖方面,作者更是根據不同圖形特點,做出了詳盡說明。而且這本書是圖靈出的,裝幀精美,紙質上乘,捧在手裡感覺非常上檔次,價錢也不貴。
  • RStudio|用R Markdown生成你的R語言數據分析報告
    個人公眾號:數據科學家養成記 (微信ID:louwill12)R Markadown 作為一款通過R語言創建動態文檔的寫作排版工具,為數據科學提供了現成的寫作框架。通過 R Markdown 不僅可以運行和保存R代碼,還可以生成高質量的數據分析報告並以HTML、PDF或者word的形式分享。
  • R語言在醫學統計中的應用-基礎教程
    歡迎關注小號:醫學統計數據分析,今天我們來介紹一下醫學統計學中常用統計學方法的R語言基本操作。       R是用於統計分析、繪圖的語言和操作環境。R是屬於GNU系統的一個自由、免費、原始碼開放的軟體,它是一個用於統計計算和統計製圖的優秀工具。