---
format: pdf
fontsize: 11pt
bibliography: ../MV_Referenzen_Seminar.bib
include-in-header: ../MV_Header_Seminar.tex
lang: de
---


<!-- Sitzung 10: Dimensionsreduktion -->
# (10) Dimensionsreduktion

Ziel dieser Sitzung ist es, die Hauptkomponentenanalyse eines simulierten Beispieldatensatzes auf der Implementationsebene nachzuvollziehen und die resultierenden Matrizen mithilfe von Colorplots darzustellen.


<!-- Abschnitt 1: Datensatz generieren -->
### Datensatz generieren

Untenstehender **R**-Code erzeugt dazu zunächst einen Datensatz von $n$ unabhängigen Beobachtungen ($n = 20$) eines $m$-dimensionalen multivariat normalverteilten Zufallsvektors ($m = 5$).

\scriptsize
```{r, echo = T, message = F}
# Datensatzsimulation
library(MASS)                                                       # multivariate Normalverteilung
set.seed(1)                                                         # reproduzierbare Ergebnisse
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))                                      # Datensatzgenerierung
```

\normalsize
Anschließend lassen wir uns diesen Datensatz im Datenmatrixformat -- mit Beobachtungen in Zeilen und Variablen bzw. Features in Spalten -- ausgeben.

\scriptsize
```{r, echo = T}
print(t(X))                                                         # Ausgabe der Datenmatrix
```


<!-- Abschnitt 2: Hauptkomponentenanalyse -->
\newpage
### Hauptkomponentenanalyse

\normalsize
Folgender **R**-Code führt dann mithilfe der Methoden der Eigenanalyse eine Hauptkomponentenanalyse des Datensatzes durch.

\scriptsize
```{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}
```


<!-- Abschnitt 3: Ergebnisse visualisieren -->
### Ergebnisse visualisieren

\normalsize
Folgender **R**-Code visualisiert die Datensatzmatrix $X$ und die PCA-transformierte Datensatzmatrix $\tilde{X}$, wie in @fig-datensatz gezeigt wird.

\scriptsize
```{r, echo = T, eval = F, message = F, warning = F}
# R-Pakete
library(latex2exp)
library(plot.matrix)

# Abbildungsparameter
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    = 2)

# 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}$"))

# PDF-Speicherung
dev.copy2pdf(
    file        = "./Abbildungen/X_tildeX.pdf",
    width       = 10,
    height      = 7)
dev.off()
```

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

\newpage
\normalsize
Folgender **R**-Code schließlich visualisiert die zentralen Matrizen der Hauptkomponentenanalyse des Datensatzes ($Q$ und $\Lambda$, $C$ und $\tilde{C}$, $R$ und $\tilde{R}$), wie in @fig-matrizen gezeigt wird.

\scriptsize
```{r, echo = T, eval = F}
# Matrizen
C_tilde[C_tilde < 0.001]      = 0                   # \tilde{C}: kleine Werte auf 0 setzen
R_tilde[abs(C_tilde) < 0.001] = 0                   # \tilde{R}: kleine Werte auf 0 setzen

# Abbildungsparameter
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}
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}
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}$"))

# PDF-Speicherung
dev.copy2pdf(
    file        = "./Abbildungen/Q_Lambda_C.pdf",
    width       = 11,
    height      = 8)
dev.off()
```

![Zentrale Matrizen der Hauptkomponentenanalyse.]("./Abbildungen/Q_Lambda_C.pdf"){#fig-matrizen fig-align="center" width=100%}