[R]線性回歸
線性回歸是利用數理統計中的回歸分析,來確定兩種或兩種以上變數間相互依賴的定量關係的一種統計分析方法,運用十分廣泛。
回歸分析中,只包括一個自變數和一個因變數,且二者的關係可用一條直線近似表示,這種回歸分析稱為一元線性回歸分析。如果回歸分析中包括兩個或兩個以上的自變數,且因變數和自變數之間是線性關係,則稱為多元線性回歸分析。
下面將介紹R語言和python兩種方法實現一元線性回歸:
R語言實現
- 讀取數據並分析
mydata <- read.table("F:/R代碼/LinearRegression/shuju.txt",head = T)nmydatanplot(mydata$y~mydata$x)n
通過散點圖可以大致判斷數據分布在一條直線附近,可以假設x和y是線性關係,用公式
y = a+ b*x + c 表示。
其中,y為因變數 x為自變數 a為截距 b為自變數係數
a+b*x, 表示y隨x的變化而線性變化的部分
c為殘差或隨機誤差,是其他一切不確定因素影響的總和,其值不可觀測。通常假定c是符合均值為0方差為σ^2的正態分布記作c~N(0,σ^2)
對於上面的公式,稱函數y = a+ b*x 為一元線性回歸方程,a為回歸常數,b為回歸係數,統稱回歸參數。x 為回歸自變數或回歸因子,y為回歸因變數或響應變數。
- 回歸參數估計
參數估計時,我們只考慮y隨x的線性變化的部分,而殘差c是不可觀測的,參數估計法並不需要考慮殘差,對於殘差的分析在後文中介紹。
建立線性回歸模型:
attach(mydata) #綁定數據框nreg <- lm(y ~ x, mydata) nregn
第一個為a的值,第二個為b的值,可以近似計算公式:y = 10.278+ 4.919*x
畫出回歸線:
plot(y ~ x)nabline(reg)n
這條直線是我們用數據擬合出來的,是一個近似的值。我們看到有些點在線上,有些點不在線上。那麼要評價這條回歸線擬合的好壞,我們就需要對回歸模型進行顯著性檢驗。
- 回歸方程的顯著性檢驗
在計算過程中並不一定要知道y和x是否有線性相關的關係,如果不存相關關係,那麼回歸方程就沒有任何意義了,如果y和x是有相關關係的,即y會隨著x的變化而線性變化,這個時候一元線性回歸方程才有意義。所以,我們需要用假設檢驗的方法,來驗證相關性的有效性。
通常會採用三種顯著性檢驗的方法:
- T檢驗法:T檢驗是檢驗模型某個自變數xi對於y的顯著性,通常用P-value判斷顯著性,小於0.01說明這個自變數Xi與y相關關係顯著。
- F檢驗法:F檢驗用於對所有的自變數x在整體上看對於y的線性顯著性,也是用P-value判斷顯著性,小於0.01說明整體上自變數與Y相關關係顯著。
- R^2(R平方)相關係統檢驗法:用來判斷回歸方程的擬合程度,R^2的取值在0和1之間,越接近1說明擬合程度越好。
已經通過lm()函數構建一元線性回歸模型,然後可以summary()函數來提取模型的計算結果。
summary(reg)n
模型解讀:
- Call,列出了回歸模型的公式。
- Residuals,列出了殘差的最小值點,1/4分位點,中位數點,3/4分位點,最大值點
- Coefficients,表示參數估計的計算結果。
- Intercept行表示常數參數a的估計值,x行表示自變數x的參數b的估計值。
- Estimate,為參數估計列。Std. Error,為參數的標準差,sd(a), sd(b)
- t value,為t值,為T檢驗的值
- Pr(>|t|) ,表示P-value值,用於T檢驗判定,匹配顯著性標記
顯著性標記,***為非常顯著,**為高度顯著, *為顯著,·為不太顯著,沒有記號為不顯著
- Residual standard error,表示殘差的標準差,自由度為n-2。
- Multiple R-squared,為相關係數R^2的檢驗,越接近1則越顯著。
- Adjusted R-squared,為相關係數的修正係數,解決多元回歸自變數越多,判定係數R^2越大的問題。
- F-statistic,表示F統計量,自由度為(1,n-2),p-value:用於F檢驗判定,匹配顯著性標記。
通過查看模型的結果數據,我們可以發現通過T檢驗的截距和自變數x都是非常顯著,通過F檢驗判斷出整個模型的自變數是非常顯著,同時R^2的相關係數檢驗可以判斷自變數和因變數是高度相關的。
最後,我們通過回歸參數的檢驗與回歸方程的檢驗,得到最後一元線性回歸方程為:
y = 10.2779+ 4.9193*x
- 殘差分析和異常點檢測
在得到的回歸模型進行顯著性檢驗後,還要再做殘差分析(預測值和實際值之間的差),檢驗模型的正確性,殘差必須服從正態分布N(0,σ^2)。
計算殘差:
res <- residuals(reg) nresn
正態分布檢驗:
shapiro.test(res) n
畫出殘差散點圖:
plot(res)nabline(h = 0) #y軸水平線n
對殘差進行Shapiro-Wilk正態分布檢驗,W接近1,p-value>0.05,證明殘差數據集符合正態分布!
- 繪製圖形
plot(reg) #回車顯示下一張n
圖1,殘差和擬合值對比圖
對殘差和擬合值作圖,橫坐標是擬合值,縱坐標是殘差。殘差和擬合值之間,數據點均勻分布在y=0兩側,呈現出隨機的分布,紅色線呈現出一條平穩的曲線並沒有明顯的形狀特徵,說明殘差數據表現非常好。
圖2,殘差QQ圖
殘差QQ圖,用來描述殘差是否符合正態分布。圖中的數據點按對角直線排列,趨於一條直線,並被對角直接穿過,直觀上符合正態分布。
圖3,標準化殘差平方根和擬合值對比圖
對標準化殘差平方根和擬合值作圖,橫坐標是擬合值,縱坐標是標準化後的殘差平方根。與殘差和擬合值對比圖(圖1)的判斷方法類似,數據隨機分布,紅色線呈現出一條平穩的曲線,無明顯的形狀特徵。
圖4,標準殘差和槓桿值對比圖
對標準化殘差和槓桿值作圖,虛線表示的cooks距離等高線,通常用Cook距離度量的回歸影響點。本圖中沒有出現紅色的等高線,則說明數據中沒有特別影響回歸結果的異常點。
如果想把4張圖畫在一起進行展示,可以改變畫布布局:
par(mfrow = c(2,2))nplot(reg)n
推薦閱讀:
※機器學習筆記9 —— 過擬合和正則化
※10分鐘快速入門PyTorch (1)
※【預測演算法】01. 線性回歸原理及R語言實現
※廣義線性模型(Generalized Linear Model)