Współczynnik determinacji R² — od intuicji do dowodów
R² wyłożony porządnie: tożsamość rozkładu wariancji TSS = ESS + RSS z dowodem, R² jako kwadrat korelacji, geometria rzutu (R² = cos²θ), dlaczego R² zawsze rośnie, skorygowane R² — z wykresami 2D i 3D
Co mierzy R²
Po dopasowaniu modelu pojawia się pierwsze pytanie: jak dobrze tłumaczy on dane? Zmienna $y$ waha się wokół swojej średniej — jaką część tego wahania model wychwytuje, a jaka pozostaje jako „niewyjaśniona reszta"?
Współczynnik determinacji $R^2$ daje na to jedną liczbę z przedziału $[0,1]$:
- $R^2 = 1$ — model wyjaśnia całą zmienność (punkty leżą idealnie na linii dopasowania),
- $R^2 = 0$ — model nie wyjaśnia niczego (równie dobrze zgadywać samą średnią $\bar y$),
- $R^2 = 0{,}7$ — model tłumaczy 70% zmienności $y$, a 30% zostaje w resztach.
Za tą liczbą stoi tożsamość algebraiczna oraz interpretacja geometryczna, które wyłożymy poniżej wraz z dowodami.
Rozkład wariancji: TSS = ESS + RSS
Punkt wyjścia: każdą obserwację $y_i$ porównujemy z bazową prognozą bez modelu, czyli ze średnią $\bar y$. Całkowite odchylenie $y_i - \bar y$ rozbija się dokładnie na dwie cegiełki:
$$ y_i - \bar y = \underbrace{(\hat y_i - \bar y)}_{\text{co tłumaczy model}} + \underbrace{(y_i - \hat y_i)}_{\text{reszta } \hat\varepsilon_i} $$Podnosząc do kwadratu i sumując po wszystkich obserwacjach, dostajemy tożsamość rozkładu sumy kwadratów:
$$ \underbrace{\sum_{i}(y_i-\bar y)^2}_{\text{TSS}} \;=\; \underbrace{\sum_{i}(\hat y_i-\bar y)^2}_{\text{ESS}} \;+\; \underbrace{\sum_{i}(y_i-\hat y_i)^2}_{\text{RSS}} $$Obecność lub brak składnika mieszanego nie jest kwestią oczywistą — wynika z własności estymatora MNK. Wyprowadzenie przedstawiono poniżej.
- Rozbicie i kwadrat. Zapiszmy $y_i-\bar y = (\hat y_i-\bar y) + \hat\varepsilon_i$, gdzie $\hat\varepsilon_i = y_i-\hat y_i$. Podnosząc do kwadratu i sumując: $$ \sum_i (y_i-\bar y)^2 = \sum_i (\hat y_i-\bar y)^2 + \sum_i \hat\varepsilon_i^2 + 2\sum_i (\hat y_i-\bar y)\,\hat\varepsilon_i $$ Wystarczy pokazać, że składnik mieszany $\sum_i (\hat y_i-\bar y)\hat\varepsilon_i$ znika.
- Warunki pierwszego rzędu MNK. Model z wyrazem wolnym, $\hat y_i = \hat\beta_0 + \sum_{j} \hat\beta_j x_{ij}$, spełnia równania normalne. Dają one dwie kluczowe własności reszt: $$ \sum_i \hat\varepsilon_i = 0 \qquad\text{oraz}\qquad \sum_i x_{ij}\,\hat\varepsilon_i = 0 \;\;\text{dla każdej zmiennej } j $$ Pierwsza bierze się z pochodnej po $\hat\beta_0$, druga z pochodnej po $\hat\beta_j$.
- Składnik mieszany znika. Rozbijamy go i korzystamy z obu własności: $$ \sum_i (\hat y_i-\bar y)\hat\varepsilon_i = \sum_i \hat y_i\hat\varepsilon_i - \bar y\sum_i \hat\varepsilon_i $$ Drugi wyraz to $\bar y\cdot 0 = 0$. Pierwszy: $$ \sum_i \hat y_i\hat\varepsilon_i = \sum_i\Big(\hat\beta_0 + \sum_j \hat\beta_j x_{ij}\Big)\hat\varepsilon_i = \hat\beta_0\underbrace{\sum_i\hat\varepsilon_i}_{0} + \sum_j \hat\beta_j\underbrace{\sum_i x_{ij}\hat\varepsilon_i}_{0} = 0 $$
- Wniosek. Składnik mieszany jest zerem, więc $\;\sum_i (y_i-\bar y)^2 = \sum_i (\hat y_i-\bar y)^2 + \sum_i \hat\varepsilon_i^2$, czyli TSS = ESS + RSS.
Uwaga: tożsamość wymaga wyrazu wolnego.
Cały rozkład TSS = ESS + RSS opiera się na $\sum_i \hat\varepsilon_i = 0$, co gwarantuje wyraz wolny w modelu. W regresji bez stałej tożsamość się psuje, a „$R^2$" potrafi wyjść ujemne lub większe od jedności. Dlatego programy raportują wtedy inną, niestandardową definicję — i nie należy jej porównywać z $R^2$ modelu ze stałą.
Definicja R²
Skoro TSS rozkłada się na część wyjaśnioną i resztę, $R^2$ jest udziałem części wyjaśnionej:
$$ R^2 = \frac{\text{ESS}}{\text{TSS}} = 1 - \frac{\text{RSS}}{\text{TSS}} $$Z tożsamości natychmiast wynika, że jest to dobrze zachowujący się ułamek.
- Składniki nieujemne. ESS $=\sum(\hat y_i-\bar y)^2 \ge 0$ oraz RSS $=\sum\hat\varepsilon_i^2 \ge 0$ jako sumy kwadratów.
- Ograniczenie z góry i z dołu. Z TSS = ESS + RSS i RSS $\ge 0$ mamy ESS $\le$ TSS, więc $R^2 = \text{ESS}/\text{TSS} \le 1$. Z ESS $\ge 0$ mamy $R^2 \ge 0$. Zatem $R^2\in[0,1]$.
- Skrajne przypadki. $R^2=1 \iff \text{RSS}=0$ (wszystkie reszty zerowe, idealne dopasowanie); $R^2=0 \iff \text{ESS}=0$ (wszystkie $\hat y_i=\bar y$, model to płaska średnia).
R² to kwadrat korelacji
Istnieje druga, równoważna postać $R^2$: jest to kwadrat współczynnika korelacji między obserwowanymi $y_i$ a dopasowanymi $\hat y_i$. Stąd bierze się symbol „$R$ do kwadratu".
- Kluczowa równość. Ponieważ $\bar{\hat y} = \bar y$ (średnia dopasowań równa się średniej $y$, bo $\sum\hat\varepsilon_i=0$), liczymy kowariancję licznikową: $$ \sum_i (y_i-\bar y)(\hat y_i-\bar y) = \sum_i\big[(\hat y_i-\bar y)+\hat\varepsilon_i\big](\hat y_i-\bar y) = \sum_i(\hat y_i-\bar y)^2 + \underbrace{\sum_i\hat\varepsilon_i(\hat y_i-\bar y)}_{=\,0} $$ Składnik mieszany znika jak w pierwszym dowodzie, więc suma ta równa się ESS.
- Podstawienie do wzoru na korelację. $$ \mathrm{corr}(y,\hat y)^2 = \frac{\big[\sum_i (y_i-\bar y)(\hat y_i-\bar y)\big]^2}{\sum_i (y_i-\bar y)^2\,\sum_i (\hat y_i-\bar y)^2} = \frac{\text{ESS}^2}{\text{TSS}\cdot\text{ESS}} = \frac{\text{ESS}}{\text{TSS}} = R^2 $$
W regresji prostej (jedna zmienna) upraszcza się to jeszcze bardziej: $R^2 = r_{xy}^2$, kwadrat zwykłej korelacji $x$ z $y$.
Geometria: R² = cos²θ
Szczególnie pouczająca jest interpretacja geometryczna. Potraktujmy kolumny danych jako wektory w przestrzeni $n$ obserwacji. MNK rzutuje wektor obserwacji $\mathbf y$ prostopadle na przestrzeń rozpiętą przez zmienne objaśniające, dając dopasowanie $\hat{\mathbf y}$. Po wyśrodkowaniu (odjęciu średniej) tożsamość TSS = ESS + RSS staje się twierdzeniem Pitagorasa:
$$ \underbrace{\lVert \mathbf y-\bar y\mathbf 1\rVert^2}_{\text{TSS}} = \underbrace{\lVert \hat{\mathbf y}-\bar y\mathbf 1\rVert^2}_{\text{ESS}} + \underbrace{\lVert \hat{\boldsymbol\varepsilon}\rVert^2}_{\text{RSS}} $$bo wektor reszt $\hat{\boldsymbol\varepsilon}$ jest prostopadły do przestrzeni modelu. A skoro to trójkąt prostokątny, $R^2 = \text{ESS}/\text{TSS}$ jest dokładnie kwadratem cosinusa kąta $\theta$ między wektorem całkowitym a jego rzutem:
$$ R^2 = \cos^2\theta, \qquad \theta = \angle\big(\mathbf y-\bar y\mathbf 1,\; \hat{\mathbf y}-\bar y\mathbf 1\big) $$Ta sama geometria działa dla wielu zmiennych: przestrzeń modelu staje się płaszczyzną (a potem hiperpłaszczyzną), na którą rzutujemy $\mathbf y$. Dopasowanie $\hat y = \hat\beta_0+\hat\beta_1 x_1+\hat\beta_2 x_2$ to wtedy płaszczyzna w chmurze punktów, a $R^2$ mierzy, jak ciasno punkty wokół niej leżą:
Wysokie a niskie R² — porównanie
Warto podkreślić, że nachylenie prostej jest takie samo w obu panelach. $R^2$ nie informuje o tym, jak silny jest efekt $x$ na $y$ — mówi jedynie, jak przewidywalne jest $y$ przy danych zmiennych. Są to dwie różne wielkości, które łatwo pomylić.
Dlaczego R² zawsze rośnie po dodaniu zmiennej
Zasadnicze ograniczenie $R^2$ jako miary jakości polega na tym, że nigdy nie maleje, gdy do modelu dołącza się kolejną zmienną — nawet pozbawioną jakiegokolwiek związku z wyjaśnianym zjawiskiem. Własność ta nie jest dziełem przypadku, lecz konsekwencją geometrii rzutu ortogonalnego.
- Zagnieżdżone przestrzenie. Niech $V_k$ to przestrzeń rozpięta przez $k$ dotychczasowych zmiennych (z kolumną jedynek), a $V_{k+1}$ — przestrzeń po dołożeniu nowej zmiennej. Każda kombinacja starych zmiennych jest też kombinacją nowych (z zerowym współczynnikiem przy dodanej), więc $V_k \subseteq V_{k+1}$.
- MNK to minimalizacja po przestrzeni. RSS to kwadrat odległości $\mathbf y$ od przestrzeni modelu: $\text{RSS}_k = \min_{\mathbf v\in V_k}\lVert \mathbf y-\mathbf v\rVert^2$. Minimalizacja po **większym** zbiorze nie może dać gorszego wyniku: $$ \text{RSS}_{k+1} = \min_{\mathbf v\in V_{k+1}}\lVert \mathbf y-\mathbf v\rVert^2 \;\le\; \min_{\mathbf v\in V_k}\lVert \mathbf y-\mathbf v\rVert^2 = \text{RSS}_k $$
- Wniosek. TSS zależy tylko od $\mathbf y$, więc jest stałe. Skoro $\text{RSS}_{k+1}\le\text{RSS}_k$, to $R^2 = 1-\text{RSS}/\text{TSS}$ nie maleje. Równość zachodzi tylko wtedy, gdy nowa zmienna jest prostopadła do reszt — w praktyce z powodu szumu $R^2$ rośnie zawsze, choćby odrobinę.
Konsekwencja praktyczna jest jednoznaczna: wybór modelu wyłącznie na podstawie $R^2$ faworyzuje zawsze model z największą liczbą zmiennych. Właściwą miarą do porównań modeli powinna być taka, która uwzględnia liczbę oszacowanych parametrów.
Skorygowane R²
Skorygowane $\bar R^2$ zastępuje surowe sumy kwadratów ich nieobciążonymi wariancjami — dzieli przez liczbę stopni swobody zamiast przez liczbę obserwacji:
$$ \bar R^2 = 1 - \frac{\text{RSS}/(n-k-1)}{\text{TSS}/(n-1)} $$gdzie $n$ to liczba obserwacji, a $k$ — liczba zmiennych objaśniających. Dodanie zmiennej zbija RSS (plus), ale zmniejsza dzielnik $n-k-1$ (minus). $\bar R^2$ rośnie tylko wtedy, gdy spadek RSS przeważa nad karą za utratę stopnia swobody.
Kiedy ̄R² rośnie, a kiedy spada.
Wygodna postać równoważna: $\;\bar R^2 = 1-(1-R^2)\dfrac{n-1}{n-k-1}$.
Można pokazać, że dodanie zmiennej podnosi $\bar R^2$ wtedy i tylko wtedy, gdy jej statystyka $t$ jest co do wartości bezwzględnej większa od 1 (równoważnie: $F>1$ dla grupy zmiennych). Zmienna „słabsza niż szum" obniża $\bar R^2$ — i o to chodzi. W przeciwieństwie do $R^2$, skorygowane $\bar R^2$ może być ujemne.
Trzy pułapki interpretacyjne
Czego R² nie mówi.
- Wysokie $R^2$ ≠ poprawny model. Źle dobrana forma funkcyjna albo regresja pozorna na niestacjonarnych szeregach potrafią dać $R^2=0{,}99$ przy modelu bez sensu. Wysokie $R^2$ między dwoma rosnącymi w czasie szeregami (np. PKB i liczba filmów) nie oznacza żadnego związku.
- Niskie $R^2$ ≠ bezużyteczny model. W danych przekrojowych o ludziach $R^2=0{,}2$ bywa normą — zachowania są z natury „szumne". Model i tak może poprawnie mierzyć efekt przyczynowy (istotne, dobrze oszacowane $\hat\beta$), a o to często chodzi bardziej niż o prognozę.
- $R^2$ nie ocenia założeń. Nie wykryje heteroskedastyczności, autokorelacji ani obciążenia z pominiętej zmiennej. To miara dopasowania, nie diagnostyka poprawności.
Przykłady liczbowe
Dla regresji MNK $n=5$ ($x=(1,2,3,4,5)$, $y=(2,4,5,4,5)$, $\hat y=2{,}2+0{,}6x$): całkowita suma kwadratów $\text{TSS}=\sum(y_i-\bar y)^2=6$, wyjaśniona $\text{ESS}=\sum(\hat y_i-\bar y)^2=3{,}6$, resztowa $\text{RSS}=2{,}4$. Tożsamość $\text{ESS}+\text{RSS}=6=\text{TSS}$ się zgadza, więc
$$ R^2=\frac{\text{ESS}}{\text{TSS}}=\frac{3{,}6}{6}=0{,}60,\qquad \bar R^2=1-(1-R^2)\frac{n-1}{n-k-1}=1-0{,}4\cdot\frac{4}{3}=\frac{7}{15}\approx0{,}467. $$Model wyjaśnia $60\%$ zmienności $y$; po karze za jeden regresor pozostaje $46{,}7\%$.
Dołóżmy do modelu sztuczny regresor $z=(0,0,0,0,1)$ — wskaźnik ostatniej obserwacji, bez znaczenia merytorycznego. Po estymacji $y\sim\{1,x,z\}$:
$$ R^2:\ 0{,}600\to0{,}617\ \ (\text{rośnie}),\qquad \bar R^2:\ 0{,}467\to0{,}233\ \ (\text{spada}). $$Surowe $R^2$ wzrosło — jak zawsze po dodaniu zmiennej — choć $z$ nic nie wnosi. Skorygowane $\bar R^2$ spadło ponad dwukrotnie, prawidłowo karząc za zbędny parametr. To liczbowa ilustracja, dlaczego do porównań modeli używamy $\bar R^2$, nie $R^2$.
Podsumowanie
- Definicja: $R^2 = \dfrac{\text{ESS}}{\text{TSS}} = 1-\dfrac{\text{RSS}}{\text{TSS}}$ — udział wyjaśnionej wariancji, zakres $[0,1]$ (w modelu ze stałą).
- Trzy ujęcia: udział wariancji = kwadrat korelacji $\mathrm{corr}(y,\hat y)^2$ = $\cos^2\theta$ (geometria rzutu).
- Zawsze rośnie po dodaniu zmiennej → do porównań modeli służy skorygowane $\bar R^2$ (które może spaść, a nawet być ujemne).
- Nie jest dowodem poprawności: wysokie nie gwarantuje sensu, niskie nie przekreśla modelu przyczynowego.
Bibliografia
- Wright, S. (1921). Correlation and Causation. Journal of Agricultural Research, 20, 557–585.
- Greene, W. H. (2018). Econometric Analysis (8th ed.). Pearson. (rozdz. 3 — geometria MNK i $R^2$)
- Wooldridge, J. M. (2020). Introductory Econometrics: A Modern Approach (7th ed.). Cengage. (rozdz. 3 i 6)
- Theil, H. (1971). Principles of Econometrics. Wiley. (skorygowane $R^2$)
Dalej: Regresja liniowa · Testy istotności
- Podręcznik: Wooldridge, Introductory Econometrics, rozdz. 3 i 6
- Podręcznik: Greene, Econometric Analysis, rozdz. 3 (geometria MNK)
- Khan Academy — R-squared
R:
model <- lm(y ~ x1 + x2, data = dane)
summary(model)$r.squared # R²
summary(model)$adj.r.squared # skorygowane R²
# R² „ręcznie" z rozkladu wariancji
tss <- sum((dane$y - mean(dane$y))^2)
rss <- sum(residuals(model)^2)
1 - rss / tss # = R²
# R² jako kwadrat korelacji y i dopasowan
cor(dane$y, fitted(model))^2 # to samo
Python:
import statsmodels.api as sm
import numpy as np
model = sm.OLS(y, sm.add_constant(X)).fit()
model.rsquared # R²
model.rsquared_adj # skorygowane
# z rozkladu wariancji
tss = ((y - y.mean())**2).sum()
rss = (model.resid**2).sum()
1 - rss / tss # = R²
np.corrcoef(y, model.fittedvalues)[0, 1]**2 # = R²