---
format:
  pdf:
    fontsize: 11pt
    number-sections: true
    include-in-header: ../MV_Header_Seminar.tex
lang: de
---


\setcounter{section}{8}
# Dimensionsreduktion


## Mathematische Grundlagen

Gegeben seien eine *Datenmatrix* $X \in \mathbb{R}^{m \times n}$ und ihre *Stichprobenkovarianzmatrix* $C \in \mathbb{R}^{m \times m}$ (siehe Abschnitt 5.1 des Arbeitsblatts (5) *Multivariate Deskriptivstatistik*) mit

\begin{equation} \label{eq:C}
   C
:= \frac{1}{n-1} \sum_{i=1}^n (x_i - \bar{x}) (x_i - \bar{x})^\mathrm{T}
 = \frac{1}{n-1} \left( X \left( I_n - \frac{1}{n} 1_{nn} \right) X^\mathrm{T} \right) \; ,
\end{equation}

wobei $x_i$ die $i$-te Spalte von $X$ und $\bar{x} \in \mathbb{R}^m$ das *multivariate Stichprobenmittel* bezeichne.

Die *Hauptkomponentenanalyse* eines Datensatzes ist definiert als die Orthonormalzerlegung seiner Stichprobenkovarianzmatrix

\begin{equation} \label{eq:HKA}
C = Q \Lambda Q^\mathrm{T} \; ,
\end{equation}

wobei $\Lambda$ eine Diagonalmatrix ist, deren Diagonaleinträge die (absteigend nach Größe geordneten) Eigenwerte von $C$ sind, und $Q$ eine orthogonale Matrix ist, deren Spalten die (zugehörigen) Eigenvektoren von $C$ sind.

Der *Hauptkomponentenanalyse-transformierte Datensatz* ist definiert als das Matrixprodukt

\begin{equation} \label{eq:X-tilde}
\tilde{X} = Q^\mathrm{T} X \; ,
\end{equation}

wobei die Spalten von $Q$ als die *Hauptkomponenten* von $C$ bezeichnet werden.

In der Vorlesung haben wir gesehen, dass für diese Hauptkomponentenanalyse folgendes gilt:

- Die Spalten von $Q$ bilden eine Orthonormalbasis von $\mathbb{R}^m$, d.h. die Multiplikation mit $Q^\mathrm{T}$ transformiert die Datenmatrix-Einträge bezüglich der kanonischen Basis von $\mathbb{R}^m$ in Koordinaten bezüglich der Hauptkomponenten von $C$.

- Die Matrix $Q$ spezifiziert die Hauptkomponenten und bildet originale Variablen auf transformierte Variablen ab, d.h. der Eintrag $q_{ij}$ ($i$-te Zeile, $j$-Spalte) gibt an, wie stark die $i$-te originale Variable ($X$) in der $j$-ten transformierten Variable ($\tilde{X}$) repräsentiert ist.

- Die Stichprobenkovarianzmatrix des transformierten Datensatzes ist $\Lambda$:
\begin{equation} \label{eq:C-tilde}
   \tilde{C}
:= \frac{1}{n-1} \sum_{i=1}^n \left( \tilde{x}_i - \bar{\tilde{x}} \right) \left( \tilde{x}_i - \bar{\tilde{x}} \right)^\mathrm{T}
 = \Lambda \; .
\end{equation}

- Die Stichprobenkorrelationsmatrix des transformierten Datensatzes ist $I_m$:
\begin{equation} \label{eq:R-tilde}
   \tilde{R}
:= \left( \frac{(\tilde{C})_{ij} }{ \sqrt{(\tilde{C})_{ii}} \sqrt{(\tilde{C})_{jj}} } \right)_{1 \le i,j \le m}
 = I_m \; .
\end{equation}
Dies folgt daraus, dass die Stichprobenkovarianzmatrix $\tilde{C}$ des transformierten Datensatzes $\tilde{X}$ eine Diagonalmatrix ist ($\Lambda$) und mithin ihre Nicht-Diagonaleinträge 0 sind. Damit sind alle paarweisen Kovarianzen $(\tilde{C})_{ij}$, $i \neq j$ und mithin auch alle paarweisen Korrelationen $(\tilde{R})_{ij}$, $i \neq j$ gleich 0.

In der vorliegenden Übung wollen wir diese mathematischen Eigenschaften der Hauptkomponentenanalyse anhand der Anwendung auf einen realen Datensatz nachvollziehen.


## Analyse in R

Die Datei `FADE_SAME.csv` enthält den in der ersten Seminarsitzung vorgestellten Datensatz. Erklären Sie die Funktion des folgenden R-Codes:

\footnotesize
```{r, echo = T, eval = T, results = 'hide'}
# Daten einlesen
fname = 'FADE_SAME.csv'                             # Dateiname
D     = read.csv(fname)                             # Dataframe

# Datenmatrix extrahieren
rows  = startsWith(D$subject, 'subA')               # Personen aus Studie A
cols  = c('novelty.FADE','novelty.SAME','memory.FADE','memory.SAME',
          'age','memory','V.HC.left','V.HC.right')  # Definition Variablen
n     = sum(rows)                                   # Anzahl Datenpunkte
m     = length(cols)                                # Anzahl Variablen
X     = t(as.matrix(D[rows,cols]))                  # m x n Datenmatrix
print(dim(X))                                       # Überprüfung Datenmatrix

# Altersgruppeneffekte herausrechnen
x     = D$age[rows]                                 # gruppendefinierende Variable
X_x   = cbind(1*(x <= 35), 1*(x > 35))              # n x 2 Designmatrix
R_x   = diag(n) - X_x %*% solve(t(X_x) %*% X_x) %*% t(X_x)  # n x n residuenbildende Matrix
E_x   = R_x %*% t(X)                                # n x m Residuen
X     = t(E_x)                                      # korrigierte Datenmatrix
print(dim(X))                                       # Überprüfung Datenmatrix
```
\normalsize


\pagebreak
## Erste Programmieraufgabe

Führen Sie für die im vorherigen Abschnitt geladene und vorverarbeitete Datenmatrix $X \in \mathbb{R}^{m \times n}$ die Hauptkomponentenanalyse durch. Gehen Sie dazu wie folgt vor:

- Standardisieren Sie die Datenmatrix, d.h. ziehen Sie von jeder Spalte ihr Stichprobenmittel ab (\verb|rowMeans(X)|) und dividieren Sie jede Spalte durch ihre Stichprobenstandardabweichung (\verb|apply(X,1,sd)|). Diese Transformation sorgt dafür, dass in der resultierenden Datenmatrix jede Zeile das Stichprobenmittel 0 und die Stichprobenvarianz 1 hat.

- Berechnen Sie die Stichprobenkovarianzmatrix und die Stichprobenkorrelationsmatrix der Datenmatrix. Orientieren Sie sich hierbei an Abschnitt 5.3 des Arbeitsblatts (5) *Multivariate Deskriptivstatistik*. Speichern Sie die Ergebnisse als \verb|C| und \verb|R|.

- Führen Sie eine Eigenanalyse der Stichprobenkovarianzmatrix durch. Orientieren Sie sich hierbei an Abschnitt 3.2 des Arbeitsblatts (3) *Eigenanalyse*. Speichern Sie die Eigenwerte als Vektor \verb|lambda| und die Eigenvektoren als Matrix \verb|Q|.

- Berechnen Sie den Hauptkomponenten-transformierten Datensatz gemäß der oben angegebenen Formel. Speichern Sie die transformierte Datenmatrix als \verb|X_tilde|.

- Berechnen Sie die Stichprobenkovarianzmatrix und die Stichprobenkorrelationsmatrix des transformierten Datensatzes. Orientieren Sie sich erneut an Abschnitt 5.3 des Arbeitsblatts (5) *Multivariate Deskriptivstatistik*. Speichern Sie die Ergebnisse als \verb|C_tilde| und \verb|R_tilde|.

- Geben Sie die ersten 5 Spalten der transformierten Datenmatrix aus. Sie sollten folgende Ergebnisse erhalten:

\footnotesize
```{r, echo = F, eval = T}
# Standardisierung der Datenmatrix
X       = X - matrix(rowMeans(X),   nrow=m, ncol=n) # Subtraktion der Stichprobenmittel
X       = X / matrix(apply(X,1,sd), nrow=m, ncol=n) # Division der Stichprobenstandardabweichungen

# Deskriptivstatistiken der Datenmatrix
I_n     = diag(n)                                   # Einheitsmatrix I_n
J_n     = matrix(rep(1,n^2), nrow = n)              # Einsmatrix 1_{nn}
C       = (1/(n-1))*(X %*% (I_n-(1/n)*J_n) %*% t(X))# Stichprobenkovarianzmatrix von X
D       = diag(1/sqrt(diag(C)))                     # Kov-Korr-Transformationsmatrix
R       = D %*% C %*% D                             # Stichprobenkorrelationsmatrix von X

# Eigenanalyse der Stichprobenkovarianzmatrix
EA      = eigen(C)                                  # Eigenanalyse von C
lambda  = EA$values                                 # Eigenwerte von C
Q       = EA$vectors                                # Eigenvektoren von C

# Hauptkomponentenanalyse mittels Eigenanalyse
X_tilde = t(Q) %*% X                                # transformierter Datensatz
C_tilde = (1/(n-1))*(X_tilde %*% (I_n-(1/n)*J_n) %*% t(X_tilde))    # Stichprobenkovarianzmatrix von \tilde{X}
D_tilde = diag(1/sqrt(diag(C_tilde)))               # Kov-Korr-Transformationsmatrix
R_tilde = D_tilde %*% C_tilde %*% D_tilde           # Stichprobenkorrelationsmatrix \tilde{X}
print(X_tilde[,1:5])                                # Ausgabe transformierte Datenmatrix
```
\normalsize


\pagebreak
## Abbildung in R

Die originale und die transformierte Datenmatrix sollen im Folgenden dargestellt werden. Erklären Sie dazu den folgenden R-Code und die Abbildung, die er erzeugt:

\footnotesize
```{r, echo = T, eval = F}
# Abbildungsparameter
library(latex2exp)
library(plot.matrix)
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[,1:30],
    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[,1:30],
    breaks      = c(-5,5),
    col         = topo.colors,
    fmt.key     = "%.0f",
    polygon.key = NULL,
    axis.key    = NULL,
    xlab        = "",
    ylab        = "",
    main        = TeX("$\\tilde{X}$"))

# Speichern
dev.copy2pdf(
    file        = "Abbildungen/Dimensionsreduktion_1.pdf",
    width       = 15,
    height      = 10)
```
\normalsize

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


## Zweite Programmieraufgabe

Des Weiteren sollen nun nicht nur die Datenmatrizen, sondern auch die Transformationsmatrizen der Hauptkomponentenanalyse visualisiert werden. Gehen Sie dazu wie folgt vor:

- Setzen Sie mithilfe logischer Indizierung diejenigen Werte von \verb|C_tilde| und \verb|R_tilde|, die kleiner sind als 0.001, auf 0. Dies verhindert im Folgenden Artefakte in der Darstellung.

- Definieren Sie dann die folgenden Abbildungsparameter, die eine Figure mit $2 \times 3$ Panels vorbereitet:

\footnotesize
```{r, echo = T, eval = F}
# 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)
```
\normalsize

- Der folgende Code visualisiert die Einträge einer quadratischen Matrix $A$ auf einer diskreten Farbskala:

\footnotesize
```{r, echo = T, eval = F}
plot(A,
    col         = topo.colors,
    digits      = 2,
    key         = NULL,
    cex         = 0.8,
    polygon.key = NULL,
    axis.key    = NULL,
    xlab        = "",
    ylab        = "",
    main        = TeX("$A$"))
```
\normalsize

- Visualisieren Sie auf diese Weise nacheinander die Matrizen $Q$, $\Lambda$ (\verb|diag(lambda)|), $C$, $\tilde{C}$, $R$ und $\tilde{R}$.

- Speichern Sie die resultierende Graphik wie im vorherigen Abschnitt. Sie sollten folgende Abbildung erhalten:

\footnotesize
```{r, echo = F, eval = F}
# Matrizen korrigieren
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}$"))

# Speichern
dev.copy2pdf(
    file        = "Abbildungen/Dimensionsreduktion_2.pdf",
    width       = 15,
    height      = 10)
```
\normalsize

![Mit der Hauptkomponentenanalyse des Datensatzes $X$ assoziierte Matrizen.]("Abbildungen/Dimensionsreduktion_2.pdf"){#dimensionsreduktion-2 fig-align="center" width=100%}


\pagebreak
## Lückentext

Füllen Sie mit den in der Übung gewonnenen Erkenntnissen den folgenden Lückentext aus und präsentieren Sie die Ergebnisse im Seminar:

\vspace{1em}
**Lückentext:** Die Datenmatrix besteht aus \underline{ 259 } Datenpunkten und \underline{ 8 } Variablen. Anhand der Stichprobenkorrelationsmatrix lässt sich sehen, dass die Variablenpaare \underline{ novelty-FADE und novelty-SAME } sowie \underline{ memory-FADE und memory-SAME } besonders stark negativ korrelieren ($r < -0.5$), während das Variablenpaar \underline{ linkes und rechtes } \underline{ Hippocampus-Volumen } besonders stark positiv korreliert ($r > +0.5$). Die ersten drei Hauptkomponenten werden dementsprechend maßgeblich durch diese drei Variablenpaare bestimmt (Spalten \underline{ 1 } bis \underline{ 3 } der Matrix $Q$). Die vierte Hauptkomponente besteht maßgeblich aus der Variable \underline{ Lebensalter }, während die fünfte Hauptkomponente maßgeblich auf der Variable \underline{ Gedächtnisleistung } basiert. Die Summe der Stichprobenvarianzen (d.h. der Diagonaleinträge der Stichprobenkovarianzmatrix) beträgt sowohl für die originale Datenmatrix als auch die transformierte Datenmatrix \underline{ 8 }. Die Varianzen der transformierten Variablen 6, 7 und 8 sind vernachlässigbar. Qualitativ gesprochen wird der ursprünglich aus \underline{ 8 } Variablen bestehende Datensatz also auf \underline{ 5 } Hauptkomponenten-transformierte Variablen dimensionsreduziert.


## Mögliche Klausurfrage

Präsentieren Sie im Seminar folgende Klausurfrage und erklären Sie die richtige Antwort:

\vspace{1em}
**Frage:** $\tilde{X} = Q^\mathrm{T} X$ sei der aus einer Hauptkomponentenanalyse eines Datensatzes $X \in \mathbb{R}^{m \times n}$ hervorgegangene transformierte Datensatz. Welche Aussage trifft **nicht** zu?
\begin{enumerate}[a)]
\item Die Dimensionalität des transformierten Datensatzes $\tilde{X}$ ist $n \times m$. $\checkmark$
\item Die paarweisen Strichprobenkorrelationen der Features in $\tilde{X}$ sind Null.
\item Die Gesamtvarianz der Features in $\tilde{X}$ entspricht der Gesamtvarianz der Features in $X$.
\item Die erste Zeile von $\tilde{X}$ entspricht dem transformierten Feature mit der größten Varianz.
\end{enumerate}


## Kinderwitz

Mit welchem Fahrzeug fährt der Panda am liebsten? 

\begin{turn}{180}
Antwort: Mit dem Bam-Bus.
\end{turn}