Rozdział 3 Model liniowy
Przykład 3.1 Gdy \(U=\{\mathbf{0}\}\) to hiperpłaszczyzna przechodząca przez \(A\) jest punktem \(A\). Przyjmiemy, ze wymiar takiej hiperpłaszczyzny jest równy 0.
Gdy \(U\) jest jednowymiarową podprzestrzenią \(\mathbf{R}^p\) o wektorze bazowym \(B\) to hiperpłaszczyzna wymiaru 1 przechodząca przez \(A\) jest prostą o kierunku wektora \(B\) przechodzącą przez punkt \(A\)
Dla macierzy \(X\) i hiperpłaszczyzny \(H\) Oznaczenie \(X \subset H\) jest równoważne spełnieniu warunku \[ X_i \in H \;\; i=1,2,\ldots,n \]
Niech \(X\) macierz danych \(n \times p\). Modelem liniowym macierzy \(X\) o wymiarze \(d\) jest macierz \(Y \subset H\) wymiaru \(n \times p\), dla pewnej hiperpłaszczyzny \(H\) wymiaru \(0 \leq d \leq p\).
Niech \(Y\) będzie dowolnym modelem liniowym macierzy \(X\) o wymiarze \(d\).
Model \(Y^*\) jest najlepszym modelem liniowym macierzy \(X\) o wymiarze \(d\) gdy spełnia warunek \[ d^2(X,Y^*)\leq d^2(X,Y) \;\; \forall Y \]
\[ \forall A \in \mathbf{R}^p\,\, d^2(X,A^n) = d^2(X,g(X)^n)+d^2(A^n,g(X)^n)=\\ J(X)+||g(X)-A||^2 \]
Najlepszym modelem \(p\)-wymiarowym macierzy \(X\) jest \(X\)
Niech \(Y\) będzie modelem liniowym macierzy \(X\). Kwadratowy błąd względny modelu to liczba \[ RSE(Y)=\frac{d^2(X,Y)}{J(X)} \]
Niech \(H=H(U,A)\) będzie hiperpłaszczyzną o kierunku podprzestrzeni \(U\) o wymiarze \(d>0\) i przechodzącą przez punkt \(A \in \mathbf{R}^p\). Rzutem punktu \(Q \in \mathbf{R}^p\) na \(H\) jest punkt \[ P_H(Q)=P_U(Q-A)+A=P_U(Q)+(A-P_U(A)) \] gdzie \(P_U()\) jest rzutem prostopadłym na podprzestrzeń \(U\)
Niech H będzie hiperpłaszczyzną wymiaru \(0<d \leq p\), \(X,Y\) macierzami danych wymiaru \(n \times p\), \(Y \subset H\) \[ d^2(X,Y) = d^2(X,P_H(X))+d^2(P_H(X),Y) \]
Wtedy \[ Y^*=P_{H^*}(X) \]
Z ostatniego wniosku wynika, że budowanie najlepszego modelu \(Y^*\) jest równoważne szukaniu najlepszej hiperpłaszczyzny rzutu \(H^*\)
Dlatego wymiennie można używać jako synonimu modelu macierzy danych \(Y^*\) i hiperpłaszczyzny rzutu \(H^*\)
Budowanie najlepszego modelu wymiaru \(d\) mozna ograniczyć do szukania najlepszej podprzestrzeni wymiaru \(d\).
Dla zadanego układu współrzędnych operator rzutu na podprzestrzeń \(d\)-wymiarową można utożsamić z macierzą \(C\) wymiaru \(d \times p\), której wiersze są wektorami bazy (ortonormalnej) przestrzeni rzutu \(U\): \[ C= \begin{bmatrix} C_1^T \\ C_2^T \\ \vdots \\ C_d^T \end{bmatrix} \]
Korzystając z metody mnożników Lagrange’a zadanie maksymalizacji z poprzedniego twierdzenia może być przedstawione jako zagadnienie maksymalizacji funkcji, gdzie zmienną jest macierz \(C\) wymiaru \(d \times p\) \[ Tr(CVC^T)- Tr(C^T \Lambda C) \] Macierz \(\Lambda = diag(\lambda_1,\lambda_2,\dots,\lambda_d)\) jest diagonalna. Wartości \(\lambda_i\) muszą być tak dobrane, aby spełniony był warunek \(||C_i||=1,\;i=1,2,\dots,d\)
Skorzystamy tu z warunku dostatecznego na istnienie ekstremum funkcji rzeczywistej z argumentem macierzowym (uogólnienie pojecia gradientu).
3.1 Reifikacja modelu
Składowe główne są zbiorem nowych cech w \(d\)-wymiarowej przestrzeni najbliższej w sensie odległości Frobeniusa danym z macierzy \(X\). Interesujące jest uzyskanie praktycznej interpretacji tych nowych cech. Taki proces nazywa się reifikacją modelu.
Zazwyczaj wszystkie analizy prowadzi się dla danych scentrowanych \(X^0\), to znaczy w układzie współrzędnych, którego początek umieszcza się w środku ciężkości \(X\).
Model danych \(X\) w przestrzeni składowych głównych (ang. PCA scores) jest macierzą \(Y=X^0C^T\).
O związku między kolumnami \(X^0\) i \(Y\) świadczy macierz korelacji \(R(X,Y)\)
Liczba \(r_{ij}\) jest korelacją między \(X^i\) a \(Y^j\), czyli cosinusem kąta miedzy nimi. Im ten kąt mniejszy (a więc korelacja większa) tym bardziej nowa zmienna \(Y^j\) jest związana z \(X^i\). Propozycja 3.2, mówi że wektor \([r_{i1}, r_{i2},\dots ,r_{ip}]\), reprezentujący zmienną \(X^i\) leży na sferze jednostkowej w układzie współrzędnych korelacyjnych między \(X^i\) a \(Y^1,Y^2,\dots,Y^p\).
Wykres w układzie dwóch pierwszych składowych korelacyjnych nazywa się kołem korelacyjnym. Pokazuje on jak “stare” zmienne są związane z dwiema najważniejszymi składowymi głównymi.
3.2 Przykład
Dane są związane z wynikami zawodów olimpijskich w Seulu (1988) w siedmioboju kobiet.
System punktowy przelicza wyniki 7 dyscyplin na punkty. Porównamy ten system punktów z modelem składowych głównych.
Słowniczek
hurdles = 100 m płotki
shot = pchnięcie kulą
javelin = oszczep
load("siedmioboj.Rda")
hm <- as.matrix(siedmioboj[,1:7])
knitr::kable(
hm[1:5,], booktabs = TRUE,
caption = 'Wyniki 5 najlepszych zawodniczek.'
)| hurdles | highjump | shot | run200m | longjump | javelin | run800m | |
|---|---|---|---|---|---|---|---|
| Joyner-Kersee (USA) | 12.69 | 1.86 | 15.80 | 22.56 | 7.27 | 45.66 | 128.51 |
| John (GDR) | 12.85 | 1.80 | 16.23 | 23.65 | 6.71 | 42.56 | 126.12 |
| Behmer (GDR) | 13.20 | 1.83 | 14.20 | 23.10 | 6.68 | 44.54 | 124.20 |
| Sablovskaite (URS) | 13.61 | 1.80 | 15.23 | 23.92 | 6.25 | 42.78 | 132.24 |
| Choubenkova (URS) | 13.51 | 1.74 | 14.76 | 23.93 | 6.32 | 47.46 | 127.90 |
kor <- round(cor(hm), 2)
knitr::kable(
kor, booktabs = TRUE,
caption = 'Korelacje między zmiennymi'
)| hurdles | highjump | shot | run200m | longjump | javelin | run800m | |
|---|---|---|---|---|---|---|---|
| hurdles | 1.00 | -0.81 | -0.65 | 0.77 | -0.91 | -0.01 | 0.78 |
| highjump | -0.81 | 1.00 | 0.44 | -0.49 | 0.78 | 0.00 | -0.59 |
| shot | -0.65 | 0.44 | 1.00 | -0.68 | 0.74 | 0.27 | -0.42 |
| run200m | 0.77 | -0.49 | -0.68 | 1.00 | -0.82 | -0.33 | 0.62 |
| longjump | -0.91 | 0.78 | 0.74 | -0.82 | 1.00 | 0.07 | -0.70 |
| javelin | -0.01 | 0.00 | 0.27 | -0.33 | 0.07 | 1.00 | 0.02 |
| run800m | 0.78 | -0.59 | -0.42 | 0.62 | -0.70 | 0.02 | 1.00 |
siedmioboj_pca <- prcomp(hm, scale = TRUE)
knitr::kable(
siedmioboj_pca$rotation, booktabs = TRUE, digits=4,
caption = 'Składowe główne'
)| PC1 | PC2 | PC3 | PC4 | PC5 | PC6 | PC7 | |
|---|---|---|---|---|---|---|---|
| hurdles | 0.4529 | -0.1579 | -0.0451 | 0.0265 | -0.0949 | -0.7833 | -0.3802 |
| highjump | -0.3772 | 0.2481 | 0.3678 | -0.6800 | -0.0188 | -0.0994 | -0.4339 |
| shot | -0.3631 | -0.2894 | -0.6762 | -0.1243 | -0.5117 | 0.0509 | -0.2176 |
| run200m | 0.4079 | 0.2604 | 0.0836 | -0.3611 | -0.6498 | 0.0250 | 0.4534 |
| longjump | -0.4562 | 0.0559 | -0.1393 | -0.1113 | 0.1843 | -0.5902 | 0.6121 |
| javelin | -0.0754 | -0.8417 | 0.4716 | -0.1208 | -0.1351 | 0.0272 | 0.1729 |
| run800m | 0.3750 | -0.2245 | -0.3959 | -0.6034 | 0.5043 | 0.1556 | 0.0983 |
| > scale=TRU | E oznacza, | że używam | y danych s | tandaryzow | anych |
lambdy <- siedmioboj_pca$sdev^2
lmb_tab <- data.frame(lambda=round(lambdy,4),r2=round(cumsum(lambdy)/7,2))
lmb_tab <- t(lmb_tab)
colnames(lmb_tab) <- 1:7
knitr::kable(
lmb_tab, booktabs = TRUE,
caption = 'Lambdy i współczynniki determinacji jako funkcja wymiaru modelu d'
)| 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
|---|---|---|---|---|---|---|---|
| lambda | 4.4603 | 1.1943 | 0.521 | 0.4572 | 0.2453 | 0.073 | 0.049 |
| r2 | 0.6400 | 0.8100 | 0.880 | 0.9500 | 0.9800 | 0.990 | 1.000 |
punkty_pca <- -predict(siedmioboj_pca)[,1]
pca_sco <- data.frame(score=siedmioboj$score,pca=punkty_pca)
rownames(pca_sco) <- rownames(siedmioboj)
knitr::kable(
t(pca_sco[1:5,]), booktabs = TRUE,digits = 2,
caption = 'Porównanie punktów siedmioboju i punktów z pca dla 5 zawodniczek'
)| Joyner-Kersee (USA) | John (GDR) | Behmer (GDR) | Sablovskaite (URS) | Choubenkova (URS) | |
|---|---|---|---|---|---|
| score | 7291.00 | 6897.00 | 6858.00 | 6540.00 | 6540.00 |
| pca | 4.12 | 2.88 | 2.65 | 1.34 | 1.36 |
Znak “-” przy predict(siedmioboj_pca)[,1] został wybrany tak, aby zwrot wektora pca i score był taki sam

require(FactoMineR)
pca.FM <- PCA(hm, graph = FALSE)
knitr::kable(
pca.FM$var$coord, booktabs = TRUE,digits = 2,
caption = 'Korelacje zmiennych oryginalnych ze składowymi głównymi'
)| Dim.1 | Dim.2 | Dim.3 | Dim.4 | Dim.5 | |
|---|---|---|---|---|---|
| hurdles | -0.96 | 0.17 | 0.03 | -0.02 | 0.05 |
| highjump | 0.80 | -0.27 | -0.27 | 0.46 | 0.01 |
| shot | 0.77 | 0.32 | 0.49 | 0.08 | 0.25 |
| run200m | -0.86 | -0.28 | -0.06 | 0.24 | 0.32 |
| longjump | 0.96 | -0.06 | 0.10 | 0.08 | -0.09 |
| javelin | 0.16 | 0.92 | -0.34 | 0.08 | 0.07 |
| run800m | -0.79 | 0.25 | 0.29 | 0.41 | -0.25 |

Składowa główna pc1 jest dodatnio i silnie skorelowana ze sportami siłowymi i z prędkościami (z czasem biegu ujemnie!). Jedynym niepasującym sportem jest rzut oszczepem, związanym z drugą składową główną. Czyli punktacja, silnie związana ze składową 1 nie uwzględnia w istocie rzutu oszczepem.