← 回部落格 數學

R² = r² = cos²θ:用投影矩陣證明決定係數的幾何意義

威威 Willy · 2026-09-28

威威學長|數據分析進階補充(大學/研究所)

📚 系列總覽:數據分析系列地圖|⬅️ 上一篇:正交投影、內積與正規方程|➡️ 下一篇:跑出數字很容易,相信它之前先對帳


$R^2=0.6$,$r\approx0.7746$。把後面那個近似值平方,得到約 $0.600005$,跟 $0.6$ 的差只來自捨入。

決定係數 $R^2$ 從迴歸的平方和算出來,相關係數 $r$ 則從離均差的乘積算出來,為什麼結果會對上?把資料各自減掉平均後,就能用兩條向量的夾角解釋:$r=\cos\theta$,而 $R^2=\cos^2\theta$。$R^2$ 仍是統計量,角度給了我們另一種讀法。

先約定條件:這篇用同一批資料做含截距的簡單線性最小平方法迴歸,$x$、$y$ 都不是常數。缺少截距,或其中一欄完全不變,下面的等式就不能直接照搬。條件寫好,我們再把平均和投影拆開來算。

$P_1$、$M_1$ 和 hat matrix

全 $1$ 投影矩陣。 令 $\vec 1$ 是 $n$ 維的全 $1$ 向量。定義

$$P_1=\frac{1}{n}\vec 1\,\vec 1^{\,T}$$

這個矩陣乘上任何向量 $v$,會把 $v$ 的每一個分量換成 $v$ 的平均值:

$$P_1v=\frac{1}{n}\vec 1(\vec 1^{\,T}v)=\frac{\vec 1}{n}\sum v_i=\bar v\,\vec 1$$

所以 $P_1$ 是「投影到常數向量那個方向」的算子。它做的事就是:把整條向量壓平成它的平均值。

去中心化矩陣。 定義

$$M_1=I-P_1$$

這裡的 $I$ 是 $n$ 階單位矩陣。$M_1v=v-\bar v\vec 1$,就是把每個分量減掉平均,得到課本裡的離均差。

這兩個矩陣有兩個重要的性質,都不難驗:

  • 對稱:$P_1^T=P_1$(因為 $(\vec 1\vec 1^{\,T})^T=\vec 1\vec 1^{\,T}$),$M_1$ 跟著也對稱。
  • 冪等:$P_1^2=\dfrac{1}{n^2}\vec 1(\vec 1^{\,T}\vec 1)\vec 1^{\,T}=\dfrac{1}{n^2}\vec 1\cdot n\cdot\vec 1^{\,T}=P_1$。投影一次跟投影兩次沒差,這是投影算子的定義。$M_1$ 也是:

$$M_1^2=(I-P_1)^2=I-2P_1+P_1^2=I-2P_1+P_1=I-P_1=M_1$$

對稱加冪等,就是正交投影矩陣的入場券。後面每一句「某個東西也是投影矩陣」都是驗這兩件事。

Hat matrix。 上一篇出現過:

$$H=X(X^TX)^{-1}X^T$$

令 $X=[x\ \vec 1]$,也就是把自變數向量和全 $1$ 向量排成兩欄。$H$ 把觀測值 $y$ 送到擬合值 $\hat y$,因此叫 hat matrix。它投影到 $X$ 各欄張成的空間 $C(X)$;$x$ 不為常數時,$X^TX$ 才可逆。

SST 就是去中心化向量的長度平方

先處理總變異 $SST$。定義是

$$SST=\sum_{i=1}^n(y_i-\bar y)^2$$

用向量寫,$y-\bar y\vec 1=M_1y$。所以

$$SST=\lVert M_1y\rVert^2=y^TM_1^TM_1y=y^TM_1y$$

(最後一步用了對稱加冪等:$M_1^TM_1=M_1^2=M_1$。)

嫌囉唆的話就換個符號:令

$$y^*=M_1y=y-\bar y\vec 1$$

這條叫 $y$ 的去中心化向量。$SST=\lVert y^*\rVert^2$。整篇我們就盯這條 $y^*$。同理,$x$ 那條記作 $x^*=M_1x$。

Hat matrix 跟 $P_1$ 的關係

接下來要一個關鍵性質:

$$HP_1=P_1H=P_1$$

因為模型含截距,$\vec 1$ 是 $X$ 的第二欄,本來就在 $C(X)$ 裡。$H$ 投影到 $C(X)$,遇到已在該空間的向量就保持原樣:

$$H\vec 1=\vec 1$$

於是

$$HP_1=H\left(\frac{1}{n}\vec 1\vec 1^{\,T}\right)=\frac{1}{n}(H\vec 1)\vec 1^{\,T}=\frac{1}{n}\vec 1\vec 1^{\,T}=P_1$$

反過來,$P_1H=\dfrac{1}{n}\vec 1(\vec 1^{\,T}H)$,而 $\vec 1^{\,T}H=(H^T\vec 1)^T=(H\vec 1)^T=\vec 1^{\,T}$,代回去也是 $P_1$。兩個方向都成立。

先取平均再投影,和先投影再取平均,結果相同。常數方向已在 $X$ 各欄張成的空間裡,這一步才成立。

SSR 也是投影

迴歸的變異分解是 $SST=SSR+SSE$,其中 $SSR=\sum(\hat y_i-\bar y)^2$ 是迴歸解釋掉的部分。寫成向量:

$$SSR=\lVert\hat y-\bar y\vec 1\rVert^2=\lVert Hy-P_1y\rVert^2=\lVert(H-P_1)y\rVert^2$$

現在來問:$H-P_1$ 是什麼?

對稱:$H$、$P_1$ 都對稱,相減也對稱。

冪等:把它平方,用 $H^2=H$、$HP_1=P_1H=P_1$、$P_1^2=P_1$:

$$(H-P_1)^2=H^2-HP_1-P_1H+P_1^2=H-P_1-P_1+P_1=H-P_1$$

對稱、冪等都成立,$H-P_1$ 也是正交投影矩陣。它把 $\vec 1$ 送到零,值域又在 $C(X)$ 裡,因此投影到 $C(X)$ 中與常數向量垂直的部分。接下來把這個方向寫出來。

FWL 正交化:把 $\vec 1$ 跟 $x$ 拆乾淨

$C(X)$ 由 $X$ 的兩個欄向量 $\vec 1$ 和 $x_{\rm col}$ 張成:

$$C(X)=\mathrm{span}\{\vec 1,\;x_{\rm col}\}$$

麻煩的是,$\vec 1$ 和 $x_{\rm col}$ 通常不垂直。$\langle \vec 1,x_{\rm col}\rangle=\sum x_i=n\bar x$,除非 $\bar x=0$,否則這個內積不是零。不垂直的兩根柱子擺在一起,投影不好算。

Frisch-Waugh-Lovell 定理(簡稱 FWL)在這裡用到的做法,是先把常數方向扣掉。對 $x_{\rm col}$ 動手,扣掉它在 $\vec 1$ 方向上的分量:

$$x^*=M_1x_{\rm col}=x_{\rm col}-\bar x\vec 1$$

這一扣,$x^*$ 就跟 $\vec 1$ 垂直了:

$$\langle \vec 1,x^*\rangle=\sum (x_i-\bar x)=0\ \checkmark$$

而且 $\vec 1$ 和 $x^*$ 這一對新柱子,撐出來的空間跟舊的一樣:$\mathrm{span}\{\vec 1,x^*\}=\mathrm{span}\{\vec 1,x_{\rm col}\}=C(X)$(因為 $x^*$ 是 $\vec 1$、$x_{\rm col}$ 的線性組合,$x_{\rm col}$ 也是 $\vec 1$、$x^*$ 的線性組合)。

於是我們有了 $C(X)$ 的一組正交基底。這件事的威力在於:空間互相垂直時,投影矩陣可以直接相加。

$$H=P_1+P_{x^*},\qquad P_{x^*}=\frac{x^*(x^*)^T}{(x^*)^Tx^*}$$

($n$ 維裡那個「過原點、由正交基底 $u,v$ 撐出來的平面」,投影矩陣就是 $\frac{uu^T}{u^Tu}+\frac{vv^T}{v^Tv}$,這是一般結論。)

代入 $SSR$:

$$SSR=\lVert(H-P_1)y\rVert^2=\lVert P_{x^*}y\rVert^2$$

$P_{x^*}y$ 是 $y$ 投影到 $x^*$ 方向上的那一段,它的長度是 $\dfrac{\lvert (x^*)^Ty\rvert}{\lVert x^*\rVert}$,所以

$$SSR=\frac{\left((x^*)^Ty\right)^2}{(x^*)^Tx^*}$$

分子再簡化一點。$(x^*)^Ty=(x^*)^T\left(y^*+\bar y\vec 1\right)=(x^*)^Ty^*+\bar y\,(x^*)^T\vec 1$,第二項因為正交是零,所以 $(x^*)^Ty=(x^*)^Ty^*$。於是

$$SSR=\frac{\left((x^*)^Ty^*\right)^2}{(x^*)^Tx^*}$$

到這裡 $SSR$ 只剩下 $x^*$ 和 $y^*$ 兩條去中心化向量。 原本那些 $X$、$\beta$、hat matrix 全退場了。

收網:$R^2=r^2=\cos^2\theta$

決定係數的定義是

$$R^2=\frac{SSR}{SST}$$

分子分母都換成剛才的結果,$SST=\lVert y^*\rVert^2=(y^*)^Ty^*$:

$$R^2=\frac{\left((x^*)^Ty^*\right)^2}{(x^*)^Tx^*}\cdot\frac{1}{(y^*)^Ty^*}=\frac{\left((x^*)^Ty^*\right)^2}{(x^*)^Tx^*\cdot(y^*)^Ty^*}$$

再看相關係數 $r$ 的定義。皮爾森積差相關係數,用去中心化向量寫就是

$$r=\frac{(x^*)^Ty^*}{\lVert x^*\rVert\,\lVert y^*\rVert}=\frac{(x^*)^Ty^*}{\sqrt{(x^*)^Tx^*}\sqrt{(y^*)^Ty^*}}$$

兩邊平方:

$$r^2=\frac{\left((x^*)^Ty^*\right)^2}{(x^*)^Tx^*\cdot(y^*)^Ty^*}$$

跟 $R^2$ 一模一樣。所以 $R^2=r^2$。 證明完畢。

而 $r$ 本身是內積除以兩個長度,這正是夾角餘弦的定義:

$$r=\cos\theta$$

其中 $\theta$ 是 $x^*$ 跟 $y^*$ 的夾角。串起來:

$$\boxed{\,R^2=r^2=\cos^2\theta\,}$$

把夾角翻回資料的意思

公式有了,回來看它量的是哪一段長度🙂

去中心化之後,$y^*$ 是一條躺在 $n$ 維空間裡的向量,代表 $y$ 的「所有變動」。$x^*$ 是另一個方向,代表 $x$ 的變動。迴歸做的事,就是把 $y^*$ 投影到 $x^*$ 這個方向上。

投影的長度是 $\lVert y^*\rVert\lvert\cos\theta\rvert$;若用有向分量,才保留 $\cos\theta$ 的正負。平方後都是 $\lVert y^*\rVert^2\cos^2\theta$,再除以 $y^*$ 本身的長度平方:

$$R^2=\frac{\lVert P_{x^*}y^*\rVert^2}{\lVert y^*\rVert^2}=\cos^2\theta$$

$R^2$ 就是「$y$ 的變動量,有多少比例落在 $x$ 的方向上」。 換成圖像,就是一個直角三角形:斜邊是 $y^*$,鄰邊是它的投影,$\cos\theta$ 是鄰邊除以斜邊,$R^2$ 就是那個比值的平方。

幾個邊界情況瞬間變得很好懂:

  • $\theta=0$:$x^*$、$y^*$ 完全同向,投影蓋滿整個 $y^*$,$R^2=1$。所有點精準共線。
  • $\theta=90^\circ$:投影長度是零,$R^2=0$。$y$ 的變動完全落在 $x$ 摸不到的方向。
  • $\theta=180^\circ$:完全反向,$\cos^2\theta$ 還是 $1$。這解釋了為什麼 $R^2$ 永遠非負:平方把負相關的負號吃掉了。$r$ 可以是 $-1$,$R^2$ 不行。

還有一個常見的困惑可以順手解掉:為什麼 $R^2$ 不會因為 $x$ 換單位而改變? 因為把 $x$ 乘上 $100$,$x^*$ 也乘上 $100$,夾角不變,$\cos^2\theta$ 當然不變。$R^2$ 是純幾何量,跟尺度無關。


用同一組資料驗一次

延續前兩篇的同一組資料,把每個矩陣都算出來。

$i$ 1 2 3 4 5
$x_i$ 1 2 3 4 5
$y_i$ 2 4 5 4 5

$\bar x=3$、$\bar y=4$、$\hat y=0.6x+2.2$。$(x^*)^Tx^*=10$、$(y^*)^Ty^*=6$、$(x^*)^Ty^*=6$(前一節總和 $66-5\cdot3\cdot4=6$,對得上)。

第一步,去中心化向量。

$$x^*=\begin{pmatrix}-2\\-1\\0\\1\\2\end{pmatrix},\qquad y^*=\begin{pmatrix}-2\\0\\1\\0\\1\end{pmatrix}$$

驗一下正交條件:$\langle \vec 1,x^*\rangle=-2-1+0+1+2=0$ ✓

第二步,算 $SST$ 並檢查分解。

$$SST=(y^*)^Ty^*=4+0+1+0+1=6$$

$$SSR=\frac{\left((x^*)^Ty^*\right)^2}{(x^*)^Tx^*}=\frac{6^2}{10}=\frac{36}{10}=3.6$$

$$SSE=SST-SSR=6-3.6=2.4$$

$2.4$ 跟微積分那篇算的 SSE 一致 ✓

第三步,把 Hat matrix 寫出來。 用 $H=P_1+P_{x^*}$,也就是 $H=\frac{1}{5}\vec 1\vec 1^{\,T}+\frac{x^*(x^*)^T}{10}$。逐項算:

$$H=\begin{pmatrix}0.6&0.4&0.2&0&-0.2\\ 0.4&0.3&0.2&0.1&0\\ 0.2&0.2&0.2&0.2&0.2\\ 0&0.1&0.2&0.3&0.4\\ -0.2&0&0.2&0.4&0.6\end{pmatrix}$$

先檢查形狀對不對:每一列加起來都等於 $1$ ✓(這是投影到含 $\vec 1$ 的空間的正常現象)。對照一下,第 3 列第 5 行的 $0.2$ 就是 $P_1$ 的 $0.2$ 加上 $P_{x^*}$ 在該位置的 $0$。

驗 $H\vec 1=\vec 1$:第一列 $0.6+0.4+0.2+0-0.2=1$ ✓。這正是 $HP_1=P_1$ 那條性質。

第四步,確認 $H-P_1$ 是投影。

$$H-P_1=\begin{pmatrix}0.4&0.2&0&-0.2&-0.4\\ 0.2&0.1&0&-0.1&-0.2\\ 0&0&0&0&0\\ -0.2&-0.1&0&0.1&0.2\\ -0.4&-0.2&0&0.2&0.4\end{pmatrix}=\frac{x^*(x^*)^T}{10}$$

對稱、而且每列加起來都是零($M_1$ 的招牌)。驗冪等:把第一列拿去乘最後一行,$0.4(-0.4)+0.2(-0.2)+0+(-0.2)(0.2)+(-0.4)(0.4)=-0.16-0.04-0.04-0.16=-0.4$,等於 $H_{15}-P_{1,15}=-0.2-0.2=-0.4$ ✓

第五步,代回 $SSR$。

$$(H-P_1)y=Hy-P_1y=\hat y-\bar y\vec 1=\begin{pmatrix}2.8\\3.4\\4.0\\4.6\\5.2\end{pmatrix}-\begin{pmatrix}4\\4\\4\\4\\4\end{pmatrix}=\begin{pmatrix}-1.2\\-0.6\\0\\0.6\\1.2\end{pmatrix}$$

$$\lVert(H-P_1)y\rVert^2=1.44+0.36+0+0.36+1.44=3.6\ \checkmark$$

跟公式 $36/10=3.6$ 一致。注意這條向量就是 $\hat y-\bar y\vec 1=(2.8,3.4,4.0,4.6,5.2)-4$,一點都沒差。

第六步,相關係數與角度。

$$r=\frac{(x^*)^Ty^*}{\lVert x^*\rVert\lVert y^*\rVert}=\frac{6}{\sqrt{10}\cdot\sqrt{6}}=\frac{6}{\sqrt{60}}=\frac{6}{7.74597}\approx 0.7746$$

$$R^2=\frac{SSR}{SST}=\frac{3.6}{6}=0.6,\qquad r^2=\left(\frac{6}{\sqrt{60}}\right)^2=0.6.$$

$R^2=r^2$,數字對上了。那角度呢?

$$\theta=\arccos(0.7746)\approx 39.23^\circ$$

所以 $R^2=0.6$ 的意思是:以長度平方計算,$y^*$ 有 $60\%$ 的變異落在 $x^*$ 方向的投影上,其餘 $40\%$ 是垂直殘差。注意這是平方和的比例,不是向量長度的比例。

$39.23^\circ$ 描述的是這一批資料裡兩條去中心化向量的關係。它沒有驗證新資料上的預測誤差,也沒有證明因果;要用模型預測,還得另外檢查那些問題。


打開你手上任何一組兩欄資料,手算四個數字:$(x^*)^Tx^*$、$(y^*)^Ty^*$、$(x^*)^Ty^*$、$SST$。然後做兩件事:用 $SSR=\dfrac{\left((x^*)^Ty^*\right)^2}{(x^*)^Tx^*}$ 算出 $R^2$,再算 $r$ 然後平方,看兩個數字差幾位。

計算時先保留分數或足夠的小數位,兩條路應只差最後的捨入誤差。若差得明顯,先查 $x^*$、$y^*$ 是否各自減了平均,再檢查 $SSR$ 的分母。把這幾步並排寫,通常比整張矩陣重乘一次省事。

威威
威威 Willy
德國數學碩士、前 Amazon 資料科學家。數學是邏輯的語言,英文是世界的窗口。
← 回部落格