① 照節次讀:每節先讀說明,動手玩互動元件——先預測結果,再按按鈕驗證。 ② 對照講義:每個 §徽章都標了 ISLP 節號與講義頁碼,細節與完整推導請回講義與課本。 ③ 每節做 quiz:答錯就回到該節重讀,不要往下跳;錯的選項也寫了「錯在哪」。 ④ 最後翻關鍵詞彙卡自測術語,並用 REF 總覽當速查表。
桌上只有一張表:200 個市場,每個市場在電視、廣播、報紙上各花了多少錢 (單位:千美元),以及賣掉多少單位的產品(單位:千個)。四欄、200 列,沒有別的。 ISLP 第 3 章開場就從這張表問出七個問題——而回答它們的工具, 全部都是同一個線性模型。
這一頁的順序就是這些問題的順序。先把「一個 x 對一個 y」講到底 (怎麼估、估得準不準、配得好不好),再推到「多個 x 一起放進來」, 最後看這個模型什麼時候會壞掉、什麼時候該換工具。線性迴歸是 1805 年的東西, 但它幾乎是所有現代方法的骨架:第 6 章在它上面加懲罰項、第 7 章換掉基底函數、 第 4 章把它套進連結函數——這一章沒學牢,後面每一章都會卡。
先看答案。下面這一欄「Advertising 上的答案」全部是課本 §3.4 用實際資料算出來的, 本頁每個數字都能對回去:
| 問題 | 用什麼回答 | 在哪一節 | Advertising 上的答案 |
|---|---|---|---|
| ① 有關係嗎 | F 檢定 | P04 | F = 570.3,p 值接近 0 → 有 |
| ② 有多強 | RSE、R² | P03 | RSE = 1.69(sales 平均 14.02,約 12% 誤差)、R² = 0.897 |
| ③ 哪些媒體 | 個別 t 檢定 | P02、P04 | TV t = 32.81、radio t = 21.89、newspaper t = −0.18 → 只有前兩個 |
| ④ 效果多大 | 係數與信賴區間 | P02、P04 | TV 每千美元約 +46 單位(CI 0.043–0.049)、radio 約 +189(0.172–0.206)、newspaper 的 CI 是 (−0.013, 0.011),含 0 |
| ⑤ 預測多準 | 信賴區間 vs 預測區間 | P02 | 預測區間一定比信賴區間寬 |
| ⑥ 真的線性嗎 | 殘差圖 | P06 | 殘差有結構 → 不完全是 |
| ⑦ 有綜效嗎 | 交互作用項 | P05 | 加入 TV×radio 後 R² 從 89.7% 跳到 96.8% |
newspaper,
它跟 sales 的關聯是顯著的(t = 3.30、p = 0.00115)。
可是把 TV 與 radio 一起放進模型,它的係數變成 −0.001、t = −0.18,
完全不顯著。資料沒有變,模型變了,結論就翻了。
為什麼?答案在 P04 的 Q&A——這也是老師 FAQ 的第 4 題。
「三種媒體裡,哪些跟銷售量有關?」這個問題該看哪個統計量?
先只用一個變數。假設 sales 跟 TV 預算大致是一條直線:
$$Y \approx \beta_0 + \beta_1 X$$β₀ 是截距、β₁ 是斜率,兩個都不知道。手上有 n 對觀測值 $(x_1, y_1), \dots, (x_n, y_n)$,要挑一條「最靠近」這些點的線。 「靠近」有很多種定義,但幾乎所有人都用同一個:讓殘差平方和最小。 第 i 筆的殘差是 $e_i = y_i - \hat y_i$,於是
$$\mathrm{RSS} = e_1^2 + e_2^2 + \cdots + e_n^2 = \sum_{i=1}^{n} \left(y_i - \hat\beta_0 - \hat\beta_1 x_i\right)^2$$對 β₀、β₁ 各偏微分等於零,解出來就是封閉解——不需要迭代、不需要調學習率、 不需要任何機率假設:
$$\hat\beta_1 = \frac{\sum_{i=1}^{n}(x_i-\bar x)(y_i-\bar y)} {\sum_{i=1}^{n}(x_i-\bar x)^2}, \qquad \hat\beta_0 = \bar y - \hat\beta_1 \bar x$$第二式順便告訴你一件事:最小平方線一定通過 $(\bar x, \bar y)$。 下面這個元件是本頁最重要的一個——拖動任何一個點,係數、RSS、R² 全部即時重算。 先預測「把最右邊那個點往上拖,斜率會怎麼變」,再動手驗證。
接著把同一件事換個角度看。上面那張圖的橫軸是 x、縱軸是 y; 下面這張圖的兩個軸都是參數:橫軸 β₀、縱軸 β₁, 每一個點代表「一組候選的係數」,等高線代表「這組係數的 RSS 有多大」。 這就是老師 FAQ 裡問的誤差曲面(error surface):
$$\mathrm{RSS}(\beta_0, \beta_1) = \mathrm{RSS}_{\min} + n(\beta_0-\hat\beta_0)^2 + 2\left(\textstyle\sum_i x_i\right)(\beta_0-\hat\beta_0)(\beta_1-\hat\beta_1) + \left(\textstyle\sum_i x_i^2\right)(\beta_1-\hat\beta_1)^2$$這條式子是精確的(不是近似),推導只用到最小平方解的兩個性質 $\sum e_i = 0$ 與 $\sum e_i x_i = 0$。它是 β 的二次式, 所以誤差曲面是一個碗、等高線是同心橢圓、最小點唯一。 下面的等高線就是照這條式子畫的,而且會跟著上面那張圖的點一起變。
把損失函數看成參數的函數,畫出來就是誤差曲面。座標軸不是資料的 x 與 y,而是 β₀ 與 β₁;曲面的高度是「用這組參數時的 RSS」。等高線上的每一點 RSS 相同,最佳化就是從某個起點往下走到最低點。
線性迴歸的 RSS 是 β 的凸二次函數——上面那條精確式子就是證據——所以它只有一個最低點,而且對 β 微分等於零後是一組線性方程(正規方程 $X^\top X\beta = X^\top y$)。既然線性方程有封閉解 $\hat\beta = (X^\top X)^{-1}X^\top y$,就沒有必要用梯度下降一步一步爬。
那什麼時候才需要迭代?① 損失函數不是二次式(邏輯斯迴歸、SVM、神經網路);② n 或 p 太大,$X^\top X$ 這個 $p \times p$ 矩陣算不動或存不下;③ 加了不可微的懲罰項(lasso,第 6 章)。這時候才輪到梯度下降、牛頓法、座標下降上場。
看情境,而且兩種寫法的結論幾乎一樣。
實驗設計裡 x 是我們自己設定的(施肥 0、5、10 公斤),把它當常數很自然,模型寫成 $Y \sim N(\beta_0+\beta_1 X,\ \sigma^2)$。觀察性研究裡 x 是跟著樣本一起抽到的(某個市場剛好花了 230.1 千美元),它本來就是隨機的,這時模型要寫成條件分佈 $Y \mid X \sim N(\beta_0+\beta_1 X,\ \sigma^2)$。
為什麼結論一樣?因為我們關心的一直是條件期望 $E[Y \mid X]$——在均方誤差下它就是最好的預測。所有的推論(SE、t、F)都是「固定住觀測到的那組 x」之後做的,也就是條件在 X 上。所以課本裡 SE 的公式長得跟「x 是常數」一樣,並不代表課本認為 x 不隨機,而是代表那些式子都是條件式的。
差別會在哪裡冒出來?當你想推廣到「新的 x 分佈」時。訓練資料的 x 集中在 0–300,硬要拿去預測 x = 1000 的市場,模型沒有任何資訊支撐——這叫外推(extrapolation),跟 x 是不是隨機無關,但正是因為 x 有它自己的分佈,這件事才需要被提醒。
coef std err t P>|t| intercept 34.5538 0.563 61.415 0.0 lstat -0.9500 0.039 -24.528 0.0
lab 用 Boston 的 medv(房價中位數)對 lstat(低社經地位家庭百分比)示範。注意兩件事:① sm.OLS() 不會自己加截距,所以要手動放一欄全是 1 的 intercept;② sm.OLS() 只是指定模型,真正配適的是 .fit()。斜率 −0.95 的意思是「lstat 每高 1 個百分點,medv 平均低 0.95 千美元」。
Ch03-linreg-lab-zh.ipynb · 儲存格 22、24、26
intercept lstat 0 1.0 4.98 1 1.0 9.14 2 1.0 4.03 3 1.0 2.94
MS() 就是 ModelSpec(),它把「要放哪些項」跟「怎麼算出矩陣」分開:fit() 記住要做什麼、transform() 真的做出矩陣,兩步可以合成 fit_transform()。手動建 X 只有單變數時輕鬆;等到要放交互作用、多項式、類別變數的虛擬欄,MS() 的價值就出來了(P04、P05 會看到)。
Ch03-linreg-lab-zh.ipynb · 儲存格 30、32
把資料裡某一個點沿著垂直方向往上移動,最小平方線一定會怎麼變?
β̂₁ = 0.0475 這個數字,可信嗎?先弄清楚在問什麼。真實世界裡有一條看不到的 母體迴歸線(population regression line)
$$Y = \beta_0 + \beta_1 X + \varepsilon$$我們只有一份樣本,用它算出來的是最小平方線。 換一份樣本就會得到另一條最小平方線。好消息是最小平方估計無偏: 這些線平均起來會落在母體迴歸線上,沒有系統性偏移。壞消息是單獨一條線可能偏得不少, 而我們手上就只有一條。
偏多少?這就是標準誤(standard error)要量的東西—— 估計量在重複抽樣下的標準差:
$$\mathrm{SE}(\hat\beta_1)^2 = \frac{\sigma^2}{\sum_{i=1}^{n}(x_i-\bar x)^2}, \qquad \mathrm{SE}(\hat\beta_0)^2 = \sigma^2\left[\frac{1}{n} + \frac{\bar x^2}{\sum_{i=1}^{n}(x_i-\bar x)^2}\right]$$第一條式子把「什麼會讓斜率估得準」講完了: 噪音 σ² 小、樣本多、x 散得開。σ² 通常不知道, 就用殘差算出來的 RSE 代替(下一節會定義)。下面這個元件把「重複抽樣」真的做一百次:
有了 SE,兩個標準工具就出來了。95% 信賴區間:
$$\hat\beta_1 \pm t_{0.975,\,n-2} \cdot \mathrm{SE}(\hat\beta_1) \;\approx\; \hat\beta_1 \pm 2\,\mathrm{SE}(\hat\beta_1)$$以及假設檢定。虛無假設 $H_0: \beta_1 = 0$(X 與 Y 沒有關係)對上 $H_a: \beta_1 \neq 0$,檢定統計量是
$$t = \frac{\hat\beta_1 - 0}{\mathrm{SE}(\hat\beta_1)}$$它衡量「β̂₁ 離 0 有幾個標準誤」。$H_0$ 成立時 t 服從自由度 n − 2 的 t 分佈, n 大於約 30 之後跟標準常態幾乎一樣,所以 |t| 超過大約 2 就對應 5% 的顯著水準。 p 值是「假設 $H_0$ 為真,看到這麼極端或更極端的 t 的機率」—— 注意它不是「$H_0$ 為真的機率」。
| Advertising 的三個單變數迴歸 | 係數 | SE | t | p 值 | 出處 |
|---|---|---|---|---|---|
| sales ~ TV 的截距 | 7.0326 | 0.4578 | 15.36 | < 0.0001 | 表 3.1 |
sales ~ TV 的 TV | 0.0475 | 0.0027 | 17.67 | < 0.0001 | 表 3.1 |
sales ~ radio 的 radio | 0.2025 | 0.0204 | 9.92 | < 0.0001 | 表 3.3 上 |
sales ~ newspaper 的 newspaper | 0.0547 | 0.0166 | 3.30 | 0.00115 | 表 3.3 下 |
三個單獨看都顯著——包含 newspaper。 記住這一列,P04 會回來打它一巴掌。課本的 β₀ 信賴區間是 [6.130, 7.935]、 β₁ 是 [0.042, 0.053]:「完全不打廣告時,銷售量平均落在 6130 到 7935 單位之間」。
Linearity、Independence、Normality、Equal variance——四個字首拼成 LINE,好記,但更重要的是知道哪一條壞掉會傷到什麼。
L(線性):$E[Y \mid X] = \beta_0+\beta_1X$ 這個形狀是對的。壞掉的話係數本身就沒有意義了——這是唯一會傷到「估計」的假設,所以殘差圖是必看的(P06 第 1 個問題)。
I(獨立):誤差項彼此不相關。壞掉時 SE 會被低估,於是 t 太大、p 值太小、信賴區間太窄——你會對一個其實很不確定的結論過度自信。時間序列與空間資料最常犯(P06 第 2 個問題)。
N(常態):誤差服從常態分佈。估計完全不需要它——最小平方解是純代數;它只用在「t 統計量真的服從 t 分佈」這件事上。而且 n 大時中央極限定理會幫忙,所以這是四條裡最不必緊張的一條。
E(等變異):所有誤差有共同的 σ²。壞掉時估計仍無偏,但 SE 的公式失準(有些點被過度信任),檢定與區間都不可靠(P06 第 3 個問題)。
一句話總結:L 壞了係數就錯;I 與 E 壞了係數還對,但不確定性的度量錯了;N 壞了而 n 又大,通常沒事。
OLS Regression Results
==============================================================================
Dep. Variable: medv R-squared: 0.544
Model: OLS Adj. R-squared: 0.543
Method: Least Squares F-statistic: 601.6
Date: Sat, 20 Sep 2025 Prob (F-statistic): 5.08e-88
Time: 08:00:16 Log-Likelihood: -1641.5
No. Observations: 506 AIC: 3287.
Df Residuals: 504 BIC: 3295.
Df Model: 1
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
intercept 34.5538 0.563 61.415 0.000 33.448 35.659
lstat -0.9500 0.039 -24.528 0.000 -1.026 -0.874
==============================================================================
Omnibus: 137.043 Durbin-Watson: 0.892
Prob(Omnibus): 0.000 Jarque-Bera (JB): 291.373
Skew: 1.453 Prob(JB): 5.36e-64
Kurtosis: 5.319 Cond. No. 29.7
==============================================================================
Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.這一張表是整章的儀表板。左上是模型資訊,右上有 R-squared 0.544、F-statistic 601.6、Prob (F-statistic) 5.08e-88;中間那塊每一列是一個係數的 coef/std err/t/P>|t|/95% 信賴區間 [0.025 0.975]。lstat 的區間是 [−1.026, −0.874],離 0 很遠。下面那塊 Omnibus、Jarque-Bera 是常態性檢定,Durbin-Watson 0.892 是殘差自相關的指標(理想值 2,這裡明顯偏低——P06 第 2 個問題)。
Ch03-linreg-lab-zh.ipynb · 儲存格 35
array([[17.56567478, 42.04151344],
[12.82762635, 37.27906833],
[ 8.0777421 , 32.52845905]])在 lstat = 10 這一點,預測值都是 25.05,但:信賴區間 (24.47, 25.63) 問的是「所有 lstat = 10 的社區,平均 medv 是多少」;預測區間 (12.83, 37.28) 問的是「某一個 lstat = 10 的社區,medv 是多少」。後者寬得多,因為它還要算進個別觀測值自己的隨機誤差 ε。conf_int(obs=True) 就是切換這兩者的開關。
Ch03-linreg-lab-zh.ipynb · 儲存格 39、41、43、45
同一份資料,你把預測變數 x 的單位從「元」換成「千元」(也就是全部除以 1000)。β̂₁ 與它的 t 統計量會怎麼變?
檢定過關(「有關係」)之後,下一個問題是「配得多好」。 兩個常用的量,一個有單位、一個沒有。
殘差標準誤(residual standard error)估的是誤差標準差 σ, 單位跟 y 一樣:
$$\mathrm{RSE} = \sqrt{\frac{\mathrm{RSS}}{n-p-1}} \qquad(\text{簡單線性迴歸的 } p = 1,\ \text{分母是 } n-2)$$Advertising 用三個媒體的模型 RSE = 1.69,而 sales 的平均是 14.02—— 相對誤差大約 12%。這個「12%」是可以拿去跟老闆講的話。
R² 把它換成無單位的比例。先定義總平方和 $\mathrm{TSS} = \sum(y_i - \bar y)^2$(完全不看 x、只用 ȳ 猜的誤差),則
$$R^2 = \frac{\mathrm{TSS} - \mathrm{RSS}}{\mathrm{TSS}} = 1 - \frac{\mathrm{RSS}}{\mathrm{TSS}}$$讀作「y 的變異有多少比例被模型解釋掉了」。簡單線性迴歸時還有一個漂亮的事實: $R^2$ 恰好等於 x 與 y 相關係數的平方(這是 ISLP 3.7 第 7 題)。 多元迴歸時它等於 $\mathrm{Cor}(Y, \hat Y)^2$。
| Advertising 上的模型 | RSS | 自由度 n−p−1 | RSE | R² |
|---|---|---|---|---|
只用 TV | 2102.53 | 198 | 3.259 | 0.6119 |
TV + radio | 556.91 | 197 | 1.681 | 0.8972 |
| 三個媒體都放 | 556.83 | 196 | 1.686 | 0.8972 |
只用 radio | 3618.48 | 198 | 4.275 | 0.3320 |
只用 newspaper | 5134.80 | 198 | 5.093 | 0.0521 |
| 什麼都不放(只有截距) | 5417.15 | 199 | 5.218 | 0.0000 |
newspaper 之後:
RSS 從 556.91 只掉到 556.83(幾乎沒動,但它一定會掉,
這是數學上的必然);R² 完全沒變(0.8972 → 0.8972);
可是 RSE 反而從 1.681 上升到 1.686。所以請把這句話刻進腦子:R² 永遠不會因為加變數而下降, 因此它不能用來比較變數個數不同的模型。要比,就要用會罰複雜度的指標, 或者乾脆用第 5 章的交叉驗證去估測試誤差。
用含截距的最小平方法配在同一份資料上時,不可能。因為「只用 ȳ 猜」本身就是這個模型的一個特例(β̂₁ = 0),而最小平方法挑的是 RSS 最小的那組,所以一定 RSS ≤ TSS,於是 $R^2 \ge 0$。
但下面三種情況它真的會變成負的:
sm.OLS() 不自動加截距是個容易踩的坑。sklearn 的 .score() 就是這樣算的,看到負值不要以為程式壞了。看到負的 R²,正確的反應是:這個模型比「什麼都不學」還糟,回頭檢查有沒有截距、有沒有算錯資料集、或者根本選錯了模型。
R2 : 0.5441462975864797 Ex. Var : 0.5441462975864798 MSE : 38.48296722989415
R2 : 0.5441 跟前面 summary() 的 R-squared: 0.544 是同一個數,只是換了套件算。MSE : 38.483 是 RSS/n(不除 n−2),所以 np.sqrt(results.scale) 給的 RSE 會比 np.sqrt(MSE) 稍大一點——差別就是自由度校正。另外 Ex. Var(explained variance)在有截距的最小平方下會等於 R²,兩者的定義只差殘差平均是否為 0 這一項。
Ch03-linreg-lab-zh.ipynb · 儲存格 110、113
你在模型裡加了一個完全隨機、跟 y 無關的變數。訓練資料上會發生什麼?
三個媒體要不要各配一條簡單迴歸,然後把結論拼起來?不行。 三條線各自忽略了另外兩個變數,而且沒辦法拿一組預算去預測銷售量。 正確的做法是讓每個變數都有自己的斜率:
$$Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_p X_p + \varepsilon$$解讀變了,而且這是全章最重要的一句話:βⱼ 是「固定住其他所有變數不動時, Xⱼ 增加一單位對 Y 的平均影響」。同樣用最小平方法最小化
$$\mathrm{RSS} = \sum_{i=1}^{n} \left(y_i - \hat\beta_0 - \hat\beta_1 x_{i1} - \cdots - \hat\beta_p x_{ip}\right)^2$$寫成矩陣就是一行——這也是本頁標題那條式子:
$$\hat\beta = (X^\top X)^{-1} X^\top y$$接著是第一個問題:「至少有一個變數有用嗎」。 虛無假設是 $H_0: \beta_1 = \beta_2 = \cdots = \beta_p = 0$,用 F 檢定:
$$F = \frac{(\mathrm{TSS} - \mathrm{RSS})/p}{\mathrm{RSS}/(n-p-1)}$$$H_0$ 為真時分子與分母的期望值都是 σ²,所以 F 應該在 1 附近; $H_a$ 為真時分子會變大,F 就明顯大於 1。多大才算大?取決於 n 與 p, 交給軟體算 p 值。下面這個元件讓你自己勾選要放哪些變數,看 t 與 F 怎麼動:
newspaper:|t| = 3.30,顯著。② 留 newspaper + TV:|t| = 4.35,更顯著!③ 三個都放:|t| = 0.18,完全不顯著。關鍵在 radio——把它放進來,newspaper 就失業了。為什麼?看下面的相關矩陣與 Q&A。
TV 0.782 · radio 0.576 · newspaper 0.228。而預測變數之間:corr(radio, newspaper) = 0.354,corr(TV, radio) = 0.055、corr(TV, newspaper) = 0.057。報紙預算高的市場,通常廣播預算也高。
| 三個媒體都放進去(ISLP 表 3.4/3.6) | 係數 | SE | t | p 值 | 95% CI |
|---|---|---|---|---|---|
| 截距 | 2.9389 | 0.3119 | 9.42 | < 0.0001 | (2.324, 3.554) |
TV | 0.0458 | 0.0014 | 32.81 | < 0.0001 | (0.043, 0.049) |
radio | 0.1885 | 0.0086 | 21.89 | < 0.0001 | (0.172, 0.206) |
newspaper | −0.0010 | 0.0059 | −0.18 | 0.8599 | (−0.013, 0.011) 含 0 |
整體 F = 570.3、R² = 0.8972、 RSE = 1.686。VIF 分別是 1.005、1.145、1.145,所以 newspaper 的失業不是 共線性把 SE 撐大造成的(對照 P06 的 Credit 例子就知道差別)—— 是它的資訊真的被 radio 蓋掉了。
因為兩個迴歸問的是不同的問題。
單變數迴歸的係數回答:「只看 newspaper 這一欄,它跟 sales 有沒有線性關聯?」多變數迴歸的係數回答:「在 TV 與 radio 都已知的情況下,再多知道 newspaper 有沒有幫助?」第二個問題嚴格得多。
機制就在相關矩陣裡:corr(radio, newspaper) = 0.354。假設真相是「radio 影響 sales、newspaper 不影響」。報紙預算高的市場通常廣播預算也高,廣播帶動了銷售,於是「報紙預算高的市場銷售也高」——單變數迴歸只看得到這個共同變動,就把功勞記在報紙頭上。等 radio 進了模型,功勞被歸還,報紙的係數就掉到 0 附近。
這在因果推論裡叫混淆(confounding):radio 是 newspaper 與 sales 之間的混淆變數。同一個結構也可能反過來:$X_j$ 單獨看不顯著、控制別的變數後才顯著(被壓抑效應蓋住)。所以「單變數篩選再進多變數模型」是個危險的習慣。
另一個常見但不同的成因是共線性:$X_j$ 真的有用,只是它跟別的變數太像,SE 被膨脹到檢不出來(P06 的 Credit limit/rating)。分辨方法:看 VIF。這裡 newspaper 的 VIF 只有 1.145,所以是混淆,不是共線性。
因為多重比較。單一個 t 檢定在 α = 0.05 下有 5% 的機率誤判;但如果你有 100 個變數、逐一做 t 檢定,即使它們全部無用,預期也會冒出 100 × 0.05 = 5 個「顯著」。看到 5 個顯著就宣布發現,等於在報告雜訊。
F 檢定一次檢定全體:$H_0$ 是所有係數同時為 0。它的分佈已經把 p 個變數的維度算進去了,所以不會被這種累積誤判騙到。正確的順序是先看 F 拿入場券,再看個別 t 找名單。如果 F 不顯著,就算某個 t 看起來很漂亮,也要非常保守地對待。
還有一個 t 做不到的用途:F 可以檢定一組係數($H_0: \beta_{p-q+1} = \cdots = \beta_p = 0$)。質性變數的多個虛擬欄就是這種情況——個別虛擬欄的 t 值會隨基準水準的選擇而變,但「這個變數整體有沒有用」的 F 檢定不會(P05 會看到)。巢狀模型的比較(anova_lm())也是同一件事。
最後一個常被忽略的細節:p ≥ n 時 F 檢定根本算不出來,因為 RSS 可以壓到 0。那種情況要用第 6 章的方法。
coef std err t P>|t| intercept 33.2228 0.731 45.458 0.000 lstat -1.0321 0.048 -21.416 0.000 age 0.0345 0.012 2.826 0.005
age 的 t = 2.826、p = 0.005,在這個模型裡是顯著的。先記住這個數字,看下一張卡。
Ch03-linreg-lab-zh.ipynb · 儲存格 74
coef std err t P>|t| intercept 41.6173 4.936 8.431 0.000 crim -0.1214 0.033 -3.678 0.000 zn 0.0470 0.014 3.384 0.001 indus 0.0135 0.062 0.217 0.829 chas 2.8400 0.870 3.264 0.001 nox -18.7580 3.851 -4.870 0.000 rm 3.6581 0.420 8.705 0.000 age 0.0036 0.013 0.271 0.787 dis -1.4908 0.202 -7.394 0.000 rad 0.2894 0.067 4.325 0.000 tax -0.0127 0.004 -3.337 0.001 ptratio -0.9375 0.132 -7.091 0.000 lstat -0.5520 0.051 -10.897 0.000
同一個 age,t 從 2.826 掉到 0.271、p 從 0.005 變成 0.787——這就是上面 Q&A 講的現象在 lab 裡的實例,跟 Advertising 的 newspaper 是同一個病。indus(p = 0.829)也是。lab 的儲存格 79 接著示範怎麼用 Boston.columns.drop(['medv','age']) 把 age 拿掉重配,拿掉之後 lstat 的 t 從 −10.897 變成 −11.483,SE 從 0.051 縮到 0.048——變數少一個,剩下的反而估得更準。
Ch03-linreg-lab-zh.ipynb · 儲存格 75、77
某個模型的 F 統計量是 1.04,p 值 0.41;但其中有一個變數的 t = 2.3、p = 0.023。該怎麼解讀?
前面所有的 x 都是數字。可是「貨架位置:好/中/差」、「是不是學生」、 「哪一個地區」怎麼放進模型?答案簡單到有點好笑:編成 0 與 1。
兩個水準只要一欄。以 Credit 資料的 Student 為例:
於是 β₀ 是「非學生的平均」、β₁ 是「學生比非學生多出來的部分」。 k 個水準只要 k − 1 欄;沒有分到欄的那個水準叫基準水準 (baseline),截距代表它。為什麼不給每個水準都一欄? 因為 k 欄加起來恆等於 1,會跟截距完全共線,矩陣就不可逆了—— 這叫虛擬變數陷阱(dummy variable trap)。
| Credit 上的兩個例子 | 係數 | SE | t | p 值 | 解讀 |
|---|---|---|---|---|---|
| 截距(非學生) | 480.369 | 23.434 | 20.499 | < 0.0001 | 非學生的平均 balance |
Student[Yes] | 396.456 | 74.104 | 5.350 | < 0.0001 | 學生平均多 396 → 876.83 |
| 截距(African American) | 531.00 | 46.319 | 11.464 | < 0.0001 | 基準水準的平均 |
Ethnicity[Asian] | −18.686 | 65.021 | −0.287 | 0.774 | 比基準少 18.7,但 p 很大 |
Ethnicity[Caucasian] | −12.503 | 56.681 | −0.221 | 0.826 | 比基準少 12.5,p 也很大 |
下面三列就是 ISLP 表 3.8(課本用的欄名是
region/East/South/West,ISLP 的 Python 資料集把同一欄命名為
Ethnicity,數字完全一致)。三個水準的整體檢定
F = 0.0434、p = 0.9575——「族群跟 balance 無關」。
重點是:個別虛擬欄的係數與 p 值會隨基準水準的選擇而變,整體的 F 檢定不會。
所以判斷一個質性變數整體有沒有用,要看 F,不要看個別虛擬欄。
接著是交互作用。標準線性模型是加法的: 每個變數的效果跟其他變數的值無關。可是「電視廣告的效果會不會取決於廣播花了多少」 這種問題(行銷上叫綜效、統計上叫交互作用)就違反加法假設。解法是丟一個乘積項進去:
$$Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \beta_3 X_1X_2 + \varepsilon = \beta_0 + (\beta_1 + \beta_3 X_2)\,X_1 + \beta_2 X_2 + \varepsilon$$看第二種寫法:$X_1$ 的斜率變成 $\beta_1 + \beta_3X_2$, 會隨 $X_2$ 移動。當 $X_2$ 是質性變數(0/1)時這件事特別好看—— 就是「兩條線平不平行」:
| Advertising 加入 TV×radio(ISLP 表 3.9) | 係數 | SE | t | p 值 |
|---|---|---|---|---|
| 截距 | 6.7502 | 0.2479 | 27.23 | < 0.0001 |
TV | 0.0191 | 0.0015 | 12.70 | < 0.0001 |
radio | 0.0289 | 0.0089 | 3.24 | 0.0014 |
TV×radio | 0.0011 | 0.0001 | 20.73 | < 0.0001 |
R² 從 89.7%(只有主效果)跳到 96.8%。換個算法更有感:加法模型配完後剩下的變異裡, 有 (96.8 − 89.7)/(100 − 89.7) ≈ 69% 被這一個乘積項解釋掉了。 係數的解讀是「TV 預算每多 1000 美元,銷售量增加 (19 + 1.1 × radio) 單位」—— 廣播花得愈多,電視廣告愈有效。這就是綜效。
X₁X₂,就要連主效果 X₁ 與 X₂ 一起放,
即使它們的 p 值不顯著。x² 就要放 x。
coef std err t P>|t| intercept 36.0885 1.470 24.553 0.000 lstat -1.3921 0.167 -8.313 0.000 age -0.0007 0.020 -0.036 0.971 lstat:age 0.0042 0.002 2.244 0.025
MS(['lstat', 'age', ('lstat', 'age')]) 裡的 tuple ('lstat','age') 就是交互作用項,欄名會自動變成 lstat:age。它的 t = 2.244、p = 0.025,顯著;而 age 的主效果 t = −0.036 完全不顯著——照階層原則,還是要留著它。
Ch03-linreg-lab-zh.ipynb · 儲存格 93
coef std err t P>|t| intercept 6.5756 1.009 6.519 0.000 CompPrice 0.0929 0.004 22.567 0.000 Income 0.0109 0.003 4.183 0.000 Advertising 0.0702 0.023 3.107 0.002 Population 0.0002 0.000 0.433 0.665 Price -0.1008 0.007 -13.549 0.000 ShelveLoc[Good] 4.8487 0.153 31.724 0.000 ShelveLoc[Medium] 1.9533 0.126 15.531 0.000 Age -0.0579 0.016 -3.633 0.000 Education -0.0209 0.020 -1.063 0.288 Urban[Yes] 0.1402 0.112 1.247 0.213 US[Yes] -0.1576 0.149 -1.058 0.291 Income:Advertising 0.0008 0.000 2.698 0.007 Price:Age 0.0001 0.000 0.801 0.424
ShelveLoc 有 Bad/Medium/Good 三個水準,MS() 自動產生兩欄 ShelveLoc[Good] 與 ShelveLoc[Medium]——Bad 被丟掉當基準(它是第一個水準)。係數 4.85 與 1.95 都是「相對於 Bad」的差距,順序也符合直覺:好位置 > 中等 > 差位置。這一格同時放了兩個交互作用 Income:Advertising(p = 0.007,顯著)與 Price:Age(p = 0.424,不顯著)。
Ch03-linreg-lab-zh.ipynb · 儲存格 103、105
一個三水準的質性變數,你把基準水準從「差」換成「好」。什麼會變、什麼不會變?
線性迴歸配起來很容易,配出錯的結論也一樣容易。 ISLP §3.3.3 列了六個潛在問題,講義 p.37–52 用了 16 頁講它們。 先看全表,再一個一個動手看:
| # | 問題 | 怎麼看出來 | 會傷到什麼 | 怎麼處理 |
|---|---|---|---|---|
| 1 | 非線性 | 殘差 vs 配適值有 U 形或曲線結構 | 係數本身就沒意義 | 加 x²、log x、√x,或第 7 章的樣條 |
| 2 | 誤差相關 | 殘差按順序畫出來有波動、Durbin–Watson 遠離 2 | SE 被低估 → 信賴區間太窄、p 值太小 | 改用時間序列模型、混合模型、群聚穩健 SE |
| 3 | 異質變異 | 殘差圖呈漏斗形、scale-location 往上爬 | SE 失準(估計仍無偏) | log y 或 √y、加權最小平方、穩健 SE |
| 4 | 離群值(y 怪) | 學生化殘差 |值| > 3 | RSE 變大、R² 變小;係數可能還好 | 查是不是記錄錯誤;不要只因為難看就刪 |
| 5 | 高槓桿(x 怪) | 槓桿值遠超過平均 (p+1)/n | 一個點就能扳動整條線 | 檢查該筆資料;報告拿掉它之後的結果 |
| 6 | 共線性 | 相關矩陣、VIF > 5 或 10 | SE 膨脹 → 檢定力下降,變數有用卻檢不出來 | 拿掉一個、或把它們合成一個變數 |
問題 1 到 5 全部靠四張診斷圖看。下面這個元件把五組資料 (一組乾淨的、四組各有一種病徵)跟四張圖交叉組合起來—— 先切資料再切圖,把每一種病徵長什麼樣記進眼睛裡:
Auto 資料(mpg 對 horsepower),就是 ISLP 圖 3.9 左那張經典的 U 形殘差圖;加上 horsepower² 之後 U 形會消失(圖 3.9 右)。第 ④ ⑤ 組對應圖 3.12 與圖 3.13。
離群值與高槓桿點的判準要說清楚。學生化殘差是把殘差除以它自己的 估計標準差:
$$r_i = \frac{e_i}{\mathrm{RSE}\sqrt{1-h_i}}$$為什麼要除以 $\sqrt{1-h_i}$?因為每一筆殘差的變異數其實不一樣 ($\mathrm{Var}(e_i) = \sigma^2(1-h_i)$)——高槓桿點的殘差天生就小, 直接比原始殘差對它不公平。學生化之後才有共同尺度,|rᵢ| > 3 就可疑。
槓桿值 $h_i$ 是帽子矩陣的對角元,衡量「第 i 筆的 x 有多不尋常」。 簡單線性迴歸有明確公式:
$$h_i = \frac{1}{n} + \frac{(x_i-\bar x)^2}{\sum_{j=1}^{n}(x_j-\bar x)^2}$$它介於 1/n 與 1 之間,而且所有 $h_i$ 的平均恰好是 (p+1)/n。 遠超過這個平均(實務上常用 2 倍或 3 倍當門檻)就是高槓桿點。
第六個問題自己一節。共線性是指兩個以上的預測變數彼此高度相關。 它不會讓估計有偏,但會讓 RSS 的等高線從碗變成一條狹長的溝—— 沿著溝走,RSS 幾乎不變,於是「哪一組係數最好」變得極難分辨。 量化的工具是變異數膨脹因子:
$$\mathrm{VIF}(\hat\beta_j) = \frac{1}{1 - R^2_{X_j \mid X_{-j}}} \qquad\Longrightarrow\qquad \frac{\mathrm{SE}(\hat\beta_j)\ \text{有共線性}} {\mathrm{SE}(\hat\beta_j)\ \text{無共線性}} = \sqrt{\mathrm{VIF}}$$$R^2_{X_j \mid X_{-j}}$ 是「拿 $X_j$ 對其他所有預測變數做迴歸」得到的 R²。 它接近 1 就代表 $X_j$ 的資訊已經被別人講完了,VIF 就爆掉。 最小值是 1(完全無共線性),超過 5 或 10 就要處理。 推下面這根滑桿,看信賴區域怎麼從圓變成溝:
age + limit:limit 的 SE = 0.005、t = 34.5、p < 0.0001。rating + limit:同一個 limit 的 SE 變成 0.064(膨脹 12.8 倍)、t 掉到 0.38、p = 0.70。rating,R² 只從 0.754 掉到 0.750——幾乎沒損失,問題卻解決了。
vif crim 1.767486 zn 2.298459 indus 3.987181 chas 1.071168 nox 4.369093 rm 1.912532 age 3.088232 dis 3.954037 rad 7.445301 tax 9.002158 ptratio 1.797060 lstat 2.870777
range(1, X.shape[1]) 從 1 開始是為了跳過第 0 欄的截距。Boston 的 12 個變數裡最大的是 tax 9.00 與 rad 7.45——這兩個確實相關(稅率高的地區通常離高速公路近),落在「要留意但還不到災難」的區間。跟 Credit 的 160 比一比就知道什麼叫嚴重。
Ch03-linreg-lab-zh.ipynb · 儲存格 87、89
coef std err t P>|t| intercept 17.7151 0.781 22.681 0.0 poly(lstat, degree=2)[0] -179.2279 6.733 -26.620 0.0 poly(lstat, degree=2)[1] 72.9908 5.482 13.315 0.0 age 0.0703 0.011 6.471 0.0
poly('lstat', degree=2) 產生的是正交多項式基底(為了數值穩定),所以係數 −179.23 與 72.99 不能直接讀成「lstat 與 lstat² 的係數」;要那樣讀得加 raw=True。兩種基底的配適值完全相同,只是係數不同。二次項的 p 值實質為 0,表示它確實改善了模型。
Ch03-linreg-lab-zh.ipynb · 儲存格 96
df_resid ssr df_diff ss_diff F Pr(>F) 0 503.0 19168.128609 0.0 NaN NaN NaN 1 502.0 14165.613251 1.0 5002.515357 177.278785 7.468491e-35
比較「lstat + age」與「poly(lstat,2) + age」兩個巢狀模型。F = 177.28、p = 7.47e-35,二次項不能省。注意一個漂亮的事實:177.28 恰好是上一張卡裡二次項 t = 13.315 的平方(13.315² ≈ 177.3)——巢狀模型只差 1 個自由度時,F 就是 t 的平方。這也解釋了為什麼 P04 說「F 可以檢定一組係數」是 t 檢定的推廣。另外 lab 的儲存格 60 用 np.argmax(infl.hat_matrix_diag) 找出 Boston 裡槓桿值最大的是第 374 筆。
Ch03-linreg-lab-zh.ipynb · 儲存格 98
殘差對配適值的圖呈明顯的 U 形。下面哪個結論是對的?
兩個預測變數的相關係數是 0.9。它們的 VIF 大約多少?SE 被膨脹幾倍?
線性迴歸是參數方法(parametric):它先假設 f 的形狀 (一條直線),然後只需要估 p + 1 個數字。好處很多——容易配、係數可解讀、 有現成的 t 與 F 檢定。壞處只有一個,但很致命:如果那個形狀猜錯了, 就算資料再多也救不回來。
對照組是 K 近鄰迴歸(KNN regression),一個徹底的無母數方法。 要預測 $x_0$,就找離它最近的 K 個訓練點,把它們的 y 平均起來:
$$\hat f(x_0) = \frac{1}{K} \sum_{i \in \mathcal{N}_0} y_i$$它對 f 的形狀不做任何假設。K 小=很有彈性但很不穩(K = 1 會穿過每一個訓練點); K 大=很平滑但可能糊掉真正的結構。這是第 2 章偏差–變異取捨的又一個化身。
那到底該用哪個?下面這個元件把 ISLP 圖 3.19 與 3.20 的實驗重跑一遍, 三個視角回答三個問題:
| 線性迴歸 | KNN 迴歸 | |
|---|---|---|
| 對 f 的假設 | 線性(強) | 只假設平滑(弱) |
| 要估的東西 | p + 1 個係數 | 沒有參數,但要留著全部訓練資料 |
| 真相是線性時 | 贏(估得又快又準) | 略差(多付了變異) |
| 真相很彎時 | 系統性偏差,救不回來 | 大勝 |
| p 變大時 | 退化得慢 | 迅速崩掉(維度詛咒) |
| 可解讀性 | 係數、p 值、信賴區間都有 | 幾乎沒有 |
| 雜訊變數的影響 | 多估幾個接近 0 的係數而已 | 直接污染距離的計算 |
| 預測的成本 | 一次乘法 | 每次都要掃過全部訓練資料 |
最後一件事,也是課本特別強調的:就算 KNN 的測試 MSE 稍微低一點, 選線性迴歸仍然可能是對的。能用幾個係數把結論講給老闆聽、 能附上 p 值與信賴區間,這些在真實工作裡值得換掉一點點預測精度。 第 7 章會給你一個折衷方案(GAM):保留「每個變數各自一條曲線」的可解讀性, 同時放掉線性的限制。
真實關係明顯非線性,n = 50。什麼情況下線性迴歸反而贏過 KNN?
下面幾題取自 ISLP §3.7 的課後習題,題號都對得回課本。先自己想過再點選項; 每個選項——包含錯的——都寫了為什麼。想看完整解答再對照下面3個站。
課本要你描述表 3.4 的 p 值各自對應什麼虛無假設,並用 sales/TV/radio/newspaper 的語言(不要用係數)講結論。下面哪個描述對了?
模型是 salary = 50 + 20·GPA + 0.07·IQ + 35·Level + 0.01·(GPA×IQ) − 10·(GPA×Level),其中 Level = 1 代表大學畢業。固定 IQ 與 GPA,哪個說法對?
n = 100、單一預測變數。真實關係是線性的。把「線性迴歸」與「三次迴歸」的訓練 RSS 與測試 RSS 比一比,預期是什麼?
課本要你證明簡單線性迴歸(只有一個 x、有截距)的 R² 等於 x 與 y 相關係數的平方。為什麼這件事在多元迴歸就不能照搬?
考前把這一頁掃過去就好。
| 名稱 | 式子 | 備註 |
|---|---|---|
| 簡單線性模型 | $Y = \beta_0 + \beta_1 X + \varepsilon$ | 式 3.5 |
| 最小平方解 | $\hat\beta_1 = \frac{\sum(x_i-\bar x)(y_i-\bar y)}{\sum(x_i-\bar x)^2}$,$\hat\beta_0 = \bar y - \hat\beta_1\bar x$ | 式 3.4;必過 $(\bar x,\bar y)$ |
| 矩陣寫法 | $\hat\beta = (X^\top X)^{-1}X^\top y$ | 多元迴歸的封閉解 |
| 斜率的標準誤 | $\mathrm{SE}(\hat\beta_1)^2 = \sigma^2/\sum(x_i-\bar x)^2$ | 式 3.8;x 散得開就小 |
| 截距的標準誤 | $\mathrm{SE}(\hat\beta_0)^2 = \sigma^2\left[\frac1n+\frac{\bar x^2}{\sum(x_i-\bar x)^2}\right]$ | 式 3.8 |
| 95% 信賴區間 | $\hat\beta_1 \pm 2\,\mathrm{SE}(\hat\beta_1)$ | 式 3.9;嚴格版用 t 分位數 |
| t 統計量 | $t = \hat\beta_1/\mathrm{SE}(\hat\beta_1)$ | 式 3.14;df = n−2 |
| 殘差標準誤 | $\mathrm{RSE} = \sqrt{\mathrm{RSS}/(n-p-1)}$ | 式 3.15/3.25;有單位 |
| R² | $R^2 = 1 - \mathrm{RSS}/\mathrm{TSS}$ | 式 3.17;簡單迴歸時 $= \mathrm{Cor}(x,y)^2$ |
| F 統計量 | $F = \frac{(\mathrm{TSS}-\mathrm{RSS})/p}{\mathrm{RSS}/(n-p-1)}$ | 式 3.23;$H_0$ 下約為 1 |
| 學生化殘差 | $r_i = e_i/(\mathrm{RSE}\sqrt{1-h_i})$ | $|r_i|>3$ 可疑 |
| 槓桿值 | $h_i = \frac1n + \frac{(x_i-\bar x)^2}{\sum(x_j-\bar x)^2}$ | 式 3.37;平均恰為 $(p+1)/n$ |
| VIF | $\mathrm{VIF}(\hat\beta_j) = 1/(1-R^2_{X_j\mid X_{-j}})$ | $>5$ 或 $10$ 要處理;SE 膨脹 $\sqrt{\mathrm{VIF}}$ |
| 交互作用 | $Y = \beta_0 + (\beta_1+\beta_3X_2)X_1 + \beta_2X_2 + \varepsilon$ | 式 3.33;斜率隨 $X_2$ 移動 |
| 模型 | 截距 | TV | radio | newspaper | F | R² | RSE |
|---|---|---|---|---|---|---|---|
| 只有 TV | 7.0326 | 0.0475 (t 17.67) | — | — | 312.1 | 0.6119 | 3.259 |
| 只有 radio | 9.3116 | — | 0.2025 (t 9.92) | — | 98.4 | 0.3320 | 4.275 |
| 只有 newspaper | 12.3514 | — | — | 0.0547 (t 3.30) | 10.9 | 0.0521 | 5.093 |
| TV + newspaper | 5.7749 | 0.0469 (t 18.17) | — | 0.0442 (t 4.35) | 179.6 | 0.6458 | 3.121 |
| TV + radio | 2.9211 | 0.0458 (t 32.91) | 0.1880 (t 23.38) | — | 859.6 | 0.8972 | 1.681 |
| 三個都放 | 2.9389 | 0.0458 (t 32.81) | 0.1885 (t 21.89) | −0.0010 (t −0.18) | 570.3 | 0.8972 | 1.686 |
| TV + radio + TV×radio | 6.7502 | 0.0191 (t 12.70) | 0.0289 (t 3.24) | TV×radio 0.0011 (t 20.73) | — | 0.9678 | 0.944 |
newspaper 的 t 值一路
從 3.30(單獨)→ 4.35(加了 TV)→ −0.18(再加 radio)。
同一欄資料,三個結論。差別只在「控制了什麼」。
| 問題 | 看哪張圖/哪個數字 | 傷到係數嗎 | 傷到 SE/檢定嗎 |
|---|---|---|---|
| 1. 非線性 | 殘差 vs 配適值(U 形) | 會 | 會 |
| 2. 誤差相關 | 殘差按順序排列、Durbin–Watson | 不會 | 會(低估 SE) |
| 3. 異質變異 | 殘差圖漏斗形、scale-location | 不會 | 會 |
| 4. 離群值 | 學生化殘差 $|r_i|>3$ | 可能(槓桿低時影響小) | 會(RSE 變大) |
| 5. 高槓桿 | $h_i \gg (p+1)/n$ | 會(一個點就夠) | 會 |
| 6. 共線性 | 相關矩陣、VIF | 不會(仍無偏) | 會(SE 膨脹 $\sqrt{\mathrm{VIF}}$) |
本頁「預期輸出」逐字取自課程 lab notebook(老師在課程環境實跑);圖表用的烘焙資料由 tools/frames/ 在固定種子下產生,環境為 numpy 1.24.4 · pandas 2.3.2 · scikit-learn 1.6.1 · scipy 1.13.1 · statsmodels 0.14.2 · ISLP 0.4.0 · pygam 0.10.1。每張卡下方的「來源」標了 lab 的儲存格編號,可以直接回去對。
這些題目取自課程題庫,只給對錯與說明,不計分。答錯就回到對應章節重讀。
詞彙卡取自本章講義與 ISLP 第 3 章,正面是中文術語(附英文原名)。 先看正面、心裡默想定義,再翻面對答案;洗牌後再過一輪,直到每張都能不看答案講出來。