在 linear model 中判斷模型配適好壞(goodness of fit)常見的指標 為 \(R^{2}\), 以下將介紹 \(R^{2}\) 的用途

\(R^{2}\)

\(R^{2}\) 被定義成 \[\begin{align*} R^{2} &= \frac{TSS - RSS}{TSS}\\ &=1-\frac{\sum_{i = 1}^{n}(y_{i}-\hat{y_{i}})^{2 }}{\sum_{i = 1}^{n}(y_{i} - \bar{y})^{2}}\\ &= \frac{\sum_{i = 1}^{n}(\hat{y_{i}}-\bar{y})^{2}}{\sum_{i = 1}^{n}(y_{i} - \bar{y})^{2}}\\ &= \left( \frac{\sum_{i = 1}^{n}(y_{i} - \bar{y})(\hat{y_{i}} - \bar{y})}{\sqrt{\sum_{i = 1}^{n}(y_{i} - \bar{y})^{2}\sum_{i = 1}^{n}(\hat{y_{i}} - \bar{y})^{2}}}\right)^{2}\\ &= corr(Y, \hat{Y})^{2}\text{ (也就是 }Y, \hat{Y}\text{ 有多像)} \end{align*}\] 從中可以做一些討論 :

(1.) 從中不難看出 \(0<R^{2}<1\), 因為 correlation 介於 [0,1] 之間, 故平方也介於 [0,1] 之間

(2.) linear model 中的目的從來不是用一個 \(\hat{Y}\) 去完全估計 \(Y\), 而是 \(\hat{Y}\) 完美估計 mean structure \(X\beta\), \(\hat\epsilon\) 完美估計 error structure \(\epsilon\), \(\hat{Y}\) 過度解釋 \(Y\) 反而有很大的機會造成 overfitting

(3.) 若模型中沒有截距項 \(\beta_{0}\), 那 \(R^{2}\) 可能會高的不合理

(4.) 假設我們配適一個 saturated model (\(\hat{y_{i}} = y_{i}, \ \forall i\)), \(R^{2}\) 會直接變成 1


這時候就要問 : 是否 \(R^{2}\) 越高, 模型就越好, 答案是否定的, 要根據資料是哪個領域的來判斷, 或是根據過去已有的分析去做對照, 舉例來說, 抽菸和肺炎研究已有很多結果(利用 linear model), 在這些結果中普遍得到的 \(R^{2}\) 假設為 0.4, 今天你也做(利用 linear model)這筆資料, 得到 \(R^{2}\) 為 0.8 你心裡不會毛毛的嗎 ? 看 \(R^{2}\) 的意義就在於和過去的分析做比對, 若 \(R^{2}\) 差不多, 那 model 可能設定的不錯

操弄 \(R^{2}\)

生成 200 筆體重與身高的資料, 體重單位為公斤, 身高為公尺, 可以看到資料分布

現在對“體重”做回歸, 看看是否能夠用身高解釋,

## 
## Call:
## lm(formula = weight ~ height)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -10.834  -1.911   0.113   2.090  10.504 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -11.568      7.538  -1.535    0.126    
## height        56.865      4.552  12.493   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.198 on 198 degrees of freedom
## Multiple R-squared:  0.4408, Adjusted R-squared:  0.438 
## F-statistic: 156.1 on 1 and 198 DF,  p-value: < 2.2e-16

可以看到 \(R^{2}\) 為 0.4408

假若我們將截距項移除看看 \(R^{2}\) 大小

## 
## Call:
## lm(formula = weight ~ height - 1)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -10.9184  -1.7917   0.2092   2.1096  10.1811 
## 
## Coefficients:
##        Estimate Std. Error t value Pr(>|t|)    
## height   49.883      0.137     364   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.209 on 199 degrees of freedom
## Multiple R-squared:  0.9985, Adjusted R-squared:  0.9985 
## F-statistic: 1.325e+05 on 1 and 199 DF,  p-value: < 2.2e-16

可以看到 \(R^{2}\) 變得異常的高, 要知道 correlation = 0.9985 幾乎會使得 \(Y\)\(\hat Y\) 連成一條線, 但此資料並未顯示此狀況

現在我們故意收集一些比較極端的身高與體重, 去找 150 公分 以及 185 公分的樣本量測其體重並加數據中, 可以看到現在資料長這樣

## 
## Call:
## lm(formula = weight_merge ~ height_merge)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -10.8867  -2.1297  -0.0239   2.0671  10.3416 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    -6.255      3.717  -1.683   0.0936 .  
## height_merge   53.667      2.237  23.993   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.195 on 248 degrees of freedom
## Multiple R-squared:  0.6989, Adjusted R-squared:  0.6977 
## F-statistic: 575.7 on 1 and 248 DF,  p-value: < 2.2e-16

只是故意收集一些比較極端的資料, 我就直接將 \(R^{2}\) 拉至 0.6989, 那假若我今天故意將比較接近樣本平均的數值移除, \(R^{2}\) 會怎麼變化呢, 先看看資料分布

看一下 summary

## 
## Call:
## lm(formula = weight_adj ~ height_adj)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.6510 -2.1795 -0.4411  1.7313  9.2761 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -4.936      3.937  -1.254    0.215    
## height_adj    52.881      2.358  22.423   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.052 on 59 degrees of freedom
## Multiple R-squared:  0.895,  Adjusted R-squared:  0.8932 
## F-statistic: 502.8 on 1 and 59 DF,  p-value: < 2.2e-16

若我直接將中間的資料移除, 可以看到 \(R^{2}\) 被我操弄至 0.895,

現在我只保留中間的數值看 \(R^{2}\) 會怎麼變化

## 
## Call:
## lm(formula = weight_adj2 ~ height_adj2)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -10.8319  -1.9550   0.0192   2.1211  10.5191 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -12.235      8.929   -1.37    0.172    
## height_adj2   57.270      5.381   10.64   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.251 on 187 degrees of freedom
## Multiple R-squared:  0.3772, Adjusted R-squared:  0.3739 
## F-statistic: 113.3 on 1 and 187 DF,  p-value: < 2.2e-16

可以發現, \(R^{2}\) 甚至被我操弄至 0.4408 以下, 可見在收集資料的時候, 我真的可以操弄 \(R^{2}\) , 將一些資料視而不見, \(R^{2}\) 甚至可以達到 0.895 或是 0.3772, 看到這裡你大概可以猜到, 在工業統計裡, 我們可以調控溫度濕度等等, 刻意製造我們想要得到的數據, 所以在工業相關的資料中 \(R^{2}\) 通常較高, 在生物的資料中, 總不可能去控制日照雨淋, 這就導致在生物相關的資料中 \(R^{2}\) 通常較低