R Simple Linear Regressions 簡單線性迴歸

寫在前面

這篇文章不是告訴‘不知道什麼是線性模型的人’線性模型是什麼,你可以自行Google。

它是在對線性模型有一定了解的基礎上的一個細節探索。

我一開始也覺得lm沒什麼,挺簡單的,但後來我越來越覺得並非如此...

用GLM表示普通線性模型

如果你不知道GLM,可以跳過這一小節

說lm是GLM的一個特例, 我也更喜歡用GLM的形式描述什麼是 “線性模型 ”(Normal theory linear model),也就是這樣的:

看起來非常清晰。當然,如果你不知道GLM,可以跳過這一小節。

普通線性模型

線性模型的數據限制: 

仔細觀察上圖,其實我們定義的是 :

“1 一個線性關係= 截距+斜率*預測變量”

“2 一個誤差(燥音)項, 它恆定不變”

“3 (每一個)響應變量遵循正態分佈,其位置參數是 1 的運算結果(這個1 的運算結果 因不同的Xi 而改變),形狀參數是2(也就是燥音,它恆定不變) ”

這就對 線性模型的數據 提出瞭如下限制 (注意這四點限制,完全是由 上面說的 那 123 得到來):

  1. Linearity: The relationship between X and the mean of Y is linear. (由上面的1 而來)
  2. Homoscedasticity: The variance of residual is the same for any value of X. (由上面的2)
  3. Independence: Observations are independent of each other. (這是上面的3,也就是數據符合正態分佈的基礎條件,)
  4. Normality: For any fixed value of X, Y is normally distributed. (這是由上面的3)

不滿足這 1-4限制 時怎麼辦?

 What if assumptions violated? 

1. Transformation:

  • Can sometimes fix linearity. (變量的更高次冪,互相的交互等)
  • Can sometimes fix non-normality and heteroscedasticity. (scale?)

2. Change error structure:

  • Generalised Linear Models

 

如何得到我們定義模型中的參數?

即:如何得到 我們上訴模型定義中的截距 和 斜率 。

更廣泛的說,如何得到模型參數的點估計?(什麼是點估計?基礎,這裏不多說)。

這個是個很有意思的問題 (在lm和GLM中 使用的方法不同,但某種場景下他們又巧妙地 對等 ,

GLM中我們用的是maximum likelihood estimation ,也就是說最大化 likelihood 來得到模型的最優參數 (這是一種常見的得到模型參數 點估計 的方法,這個最大化likelihood 是 先log likelihood (簡化運算),再用 牛頓- XXX(Newton-Raphson) 迭代法   迭代運算出來

還可以再擴展一下,我們真的 一定要 到模型參數的點估計嗎?----當然不必,這就引出了 貝葉斯模型 (標準(和非標準)迴歸模型可以很容易地在貝葉斯框架內建立。)不過這裏我不細說,後面我會寫的。

 

好了,回到 lm中 參數獲取 :

我們使用的是 least squares minimisation 最小二乘法,對於最小二乘參數估計,我們希望找到使數據點和迴歸線之間的總平方距離最小的直線 

 

這個最小化有兩個方法可以實現

方法1  梯度下降,

使用梯度下降算法尋找最優解的位置 (這個需要對 梯度下降 有一定了解),推導一下,然後 寫一個計算函數就可以算出來

gradientDesc <- function(x, y, learn_rate, conv_threshold, n, max_iter) {
  plot(x, y, col = "blue", pch = 20)
  m <- runif(1, 0, 1)
  c <- runif(1, 0, 1)
  yhat <- m * x + c
  MSE <- sum((y - yhat) ^ 2) / n
  converged = F
  iterations = 0
  while(converged == F) {
    ## Implement the gradient descent algorithm
    m_new <- m - learn_rate * ((1 / n) * (sum((yhat - y) * x)))
    c_new <- c - learn_rate * ((1 / n) * (sum(yhat - y)))
    m <- m_new
    c <- c_new
    yhat <- m * x + c
    MSE_new <- sum((y - yhat) ^ 2) / n
    if(MSE - MSE_new <= conv_threshold) {
      abline(c, m) 
      converged = T
      return(paste("Optimal intercept:", c, "Optimal slope:", m))
    }
    iterations = iterations + 1
    if(iterations > max_iter) { 
      abline(c, m) 
      converged = T
      return(paste("Optimal intercept:", c, "Optimal slope:", m))
    }
  }
}


# Run the function 

gradientDesc(disp, mpg, 0.0000293, 0.001, 32, 2500000)

 

方法2  直接推導出來

殘差平方和的數據形態是一個U型曲線,因此當且僅當導數爲0時,我們得到最低點,重點是導數爲0時,此時爲殘差平方和曲線的最低點,即此時的殘差最小,結果最接近實際值。求解過程:求導--->導數結果爲0時爲正確結果--->求出a、b的計算公式

 

https://zhuanlan.zhihu.com/p/73494604

 

給出最終結果,推導過程就不貼了

 

 

Model fit :(模型評估)

Sum of squared deviations (誤差平方和):即求解實際值與在擬合線上的預測值的誤差的平方和

MSE(均方差、方差): MSE= SSE/n

Residual standard error

RMSE(均方根、標準差): RMSE = 根號下 MSE

The R2 (R-square)statistic is defined as

where SST is the total sum of squares,

R2 (R-square) is a scale-free measure of how well the model fits the data.Indicates the proportion of variance of the response explained by the model.表示模型解釋的響應方差的比例, Takes values between 0 and 1, with 0 indicating the model does not explain changes in the response and 1 indicating a ‘perfect’ model. 接受0到1之間的值,0表示模型不解釋響應中的更改,1表示“完美”模型。 High values of R2 indicate good model fit. R2 (R-square)值越高,說明模型擬合越好。 R 2 will always increase as more explanatory variables are added to the model (Adjusted R2 penalises models with lots of parameters). 隨着更多的解釋變量被添加到模型中,R2 (R-square)總是會增加(調整後的R2懲罰了帶有大量參數的模型)。

 

R lm 輸出解釋

一個 lm 的輸出如下

 

  • intercept Estimate : 截距,也就是 線性部分 的常數部分,
  • age Estimatet : 線性部分中,預測變量 age (連續數字型變量)的係數(斜率),是正數,則表明 對響應變量 chol, 預測變量age 有正向影響。當多變量(多變量不互相交互或交互)場景且有變量是分類型變量時,會出現兩個變量的組合的Estimate 的場景,這是因爲 分類變量的存在導致了 平行斜率模型或交互模型的產生 
  • age Pr : 預測變量 age 的P-vale ,說明該預測變量是重要的 (基於P<0.05)
  • Residual standard error: RSE是 誤差平方和(SSE)除以 (n-2) 再開方, degrees of freedom = n-2
  • Multiple R-squared :模型擬合數據的fit 程度,越靠近1 越好
  • Adjusted R-squared : 預測變量的數量的上升會使得R^2上升,所以這個指標在 R^2的基礎上 懲罰了 預測變量的數量,它適合多變量的場景,它也是越靠近1越好
  • F-statistic: f統計量用來反應我們的預測和反應變量是否有關係。f統計量離1越遠越好。然而,f統計值需要多大取決於數據點的數量和預測因子的數量。一般情況下,當數據點數量較大時,只要f統計量略大於1,就足以拒絕原假設(H0:預測和反應變量沒有關係)。反之亦然,如果數據點的數目很小,則需要一個大的f統計量才能確定預測值和響應變量之間可能存在關係。在我們的示例中,f統計量是102.7,根據我們的數據大小,它相對大於1。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章