---
fontsize: 11pt
format: pdf
bibliography: 9_Referenzen_S.bib
include-in-header: 9_Header_S.tex
lang: de
---

# (9) Hauptkomponentenanalyse

Ziel dieses Seminarblatts ist es, die Hauptkomponentenanalyse eines Beispieldatensatzes
auf der Implementationsebene nachzuvollziehen und die resultierenden Matrizen zu visualisieren. 
Untenstehender **R** Code erzeugt dazu zunächst einen Datensatz von $n = 20$ unabhängigen 
Beobachtungen eines $m = 5$-dimensionalen multivariat normalverteilten Zufallsvektors.

\tiny
```{r message=FALSE, echo = T}
# Datensatzsimulation
library(MASS)                                                                   # multivariate Normalverteilung (mvrnorm())
set.seed(1)                                                                     # Reproduzierbare Randomisierung
m     = 5                                                                       # Datendimension
n     = 20                                                                      # Anzahl Realisierungen
mu    = rep(0,m)                                                                # Erwartungswertparameter
Sigma = matrix(runif(m^2), nrow = m)                                            # zufällige Matrix
Sigma = 0.5*(Sigma+t(Sigma))                                                    # symmetrische Matrix
Sigma = Sigma + m*diag(m)                                                       # positiv definite Matrix
X     = t(mvrnorm(n,mu,Sigma))                                                  # Datensatzgeneration
```
\normalsize

Folgender **R** Code führt dann mithilfe einer Eigenanalyse eine 
Hauptkomponentenanalyse des Datensatzes durch.

\tiny
```{r, echo = T, message = F, warning = F}
# Hauptkomponentenanalyse durch Eigenanalyse
I_n     = diag(n)                                                               # Einheitsmatrix I_n
J_n     = matrix(rep(1,n^2), nrow = n)                                          # 1_{nn}
C       = (1/(n-1))*(X %*% (I_n-(1/n)*J_n) %*% t(X))                            # Stichprobenkovarianzmatrix X
D       = diag(1/sqrt(diag(C)))                                                 # Kov-Korr-Transformationsmatrix
R       = D %*% C %*% D                                                         # Stichprobenkorrelationsmatrix X
EA      = eigen(C)                                                              # Eigenanalyse von C
lambda  = EA$values                                                             # Eigenwerte von C
Q       = EA$vectors                                                            # Eigenvektoren von C
X_tilde = t(Q) %*% X                                                            # Transformierter Datensatz
C_tilde = (1/(n-1))*(X_tilde %*% (I_n-(1/n)*J_n) %*% t(X_tilde))                # Stichprobenkovarianzmatrix \tilde{X}
D_tilde = diag(1/sqrt(diag(C_tilde)))                                           # Kov-Korr-Transformationsmatrix
R_tilde = D_tilde %*% C_tilde %*% D_tilde                                       # Stichprobenkorrelationsmatrix \tilde{X}
```
\normalsize
Folgender **R** Code visualisiert die Datensatzmatrix $X$ und die PCA-transformierte
Datensatzmatrix $\tilde{X}$ wie in @fig-datensatz gezeigt.
\tiny

```{r, echo = T, message = F, warning = F, eval = F}
# Visualisierung des Datensatzes X und des PCA-transformierten Datensatzes \tilde{X}
library(plot.matrix)
library(latex2exp)
pdf(
file        ="./9_Abbildungen_S/mv_9_X_tildeX.pdf",
width       = 10,
height      = 7)
par(
family      = "sans",
mfcol       = c(2,1),
pty         = "m",
bty         = "l",
lwd         = 1,
las         = 1,
mgp         = c(2,1,0),
xaxs        = "i",
yaxs        = "i",
font.main   = 1,
cex         = 1,
cex.main    = 1.6)

# Visualisierung X
plot(
X,
breaks      = c(-5,5),
col         = topo.colors,
fmt.key     = "%.0f",
polygon.key = NULL,
axis.key    = NULL,
xlab        = "",
ylab        = "",
main        = TeX("$X$"))

# Visualisierung \tilde{X}
plot(
X_tilde,
breaks      = c(-5,5),
col         = topo.colors,
fmt.key     = "%.0f",
polygon.key = NULL,
axis.key    = NULL,
xlab        = "",
ylab        = "",
main        = TeX("$\\tilde{X}$"))
dev.off()
```


![Datensatz $X$ und PCA-transformierter Datensatz $\tilde{X}$]("./9_Abbildungen_S/mv_9_X_tildeX.pdf"){#fig-datensatz fig-align="center" width=80%}  

\normalsize
Folgender **R** Code schließlich visualisiert die zentralen Matrizen der 
Hauptkomponentenanalyse des Datensatzes wie in @fig-matrizen gezeigt. 

\tiny
```{r, eval = F, echo = T}
# Visualisierung von Q, \Lambda, C, \tilde{C}, R, \tilde{R}  
pdf(
file        ="./9_Abbildungen_S/mv_9_Q_Lambda_C.pdf",
width       = 11,
height      = 8)
par(
family      = "sans",
mfcol       = c(2,3),
pty         = "m",
bty         = "l",
lwd         = 1,
las         = 1,
mgp         = c(2,1,0),
xaxs        = "i",
yaxs        = "i",
font.main   = 1,
cex         = 1,
cex.main    = 2)

# Q und \Lambda
plot(
Q,
col         = topo.colors,
digits      = 2,
key         = NULL,
cex         = 0.8,
polygon.key = NULL,
axis.key    = NULL,
xlab        = "",
ylab        = "",
main        = TeX("$Q$"))
plot(
diag(lambda),
col         = topo.colors,
digits      = 2,
key         = NULL,
cex         = 0.8,
polygon.key = NULL,
axis.key    = NULL,
xlab        = "",
ylab        = "",
main        = TeX("$\\Lambda$"))

# C und \tilde{C}
C_tilde[C_tilde < 0.001] = 0
plot(
C,
col         = topo.colors,
digits      = 2,
key         = NULL,
cex         = 0.8,
polygon.key = NULL,
axis.key    = NULL,
xlab        = "",
ylab        = "",
main        = TeX("$C$"))
plot(
C_tilde,
col         = topo.colors,
digits      = 2,
key         = NULL,
cex         = 0.8,
polygon.key = NULL,
axis.key    = NULL,
xlab        = "",
ylab        = "",
main        = TeX("$\\tilde{C}$"))

# R und \tilde{R}
R_tilde[abs(C_tilde) < 0.001] = 0
plot(
R,
col         = topo.colors,
digits      = 2,
key         = NULL,
cex         = 0.8,
polygon.key = NULL,
axis.key    = NULL,
xlab        = "",
ylab        = "",
main        = TeX("$R$"))
plot(
R_tilde,
col         = topo.colors,
digits      = 2,
key         = NULL,
cex         = 0.8,
polygon.key = NULL,
axis.key    = NULL,
xlab        = "",
ylab        = "",
main        = TeX("$\\tilde{R}$"))
dev.off()
```

![Zentrale Matrizen der Hauptkomponentenanalyse]("./9_Abbildungen_S/mv_9_Q_Lambda_C.pdf"){#fig-matrizen fig-align="center" width=80%}  
