---
fontsize: 8pt
bibliography: 7_Referenzen.bib
citation_package: natbib
output:
  beamer_presentation:
    keep_tex: true
    includes:
      in_header: 7_header.tex
---


```{r, include = F}
source("7_R_common.R")
```

#  {.plain}
\center
```{r, echo = FALSE, out.width = "20%"}
knitr::include_graphics("7_Abbildungen/mvda_7_otto.png")
```

\vspace{2mm}

\Huge
Multivariate Datenanalyse
\vspace{6mm}

\large
MSc Psychologie WiSe 2021/22

\vspace{6mm}
\large
Prof. Dr. Dirk Ostwald

#  {.plain}
\vfill
\center
\Large
\textcolor{black}{(7) Lineare Diskriminanzanalyse und Logistische Regression}
\vfill

#
\vfill
\setstretch{2.4}
\large

Vorbemerkungen

Lineare Diskriminanzanalyse

Logistische Regression

Selbstkontrollfragen

Appendix
\vfill

#
\vfill
\setstretch{2.4}
\large

**Vorbemerkungen**

Lineare Diskriminanzanalyse

Logistische Regression

Selbstkontrollfragen

Appendix
\vfill


# Prädiktive Modellierung

Struktur der Prädiktiven Modellierung

\begin{minipage}{.6\textwidth}
```{r, echo = FALSE, out.width = "80%"}
knitr::include_graphics("7_Abbildungen/mvda_7_prädiktive_modellierung_1.pdf")
```
\end{minipage}
\begin{minipage}{.4\textwidth}
```{r, echo = FALSE, out.width = "90%"}
knitr::include_graphics("7_Abbildungen/mvda_7_prädiktive_modellierung_2.pdf")
```
\end{minipage}

\flushright
\tiny
nach @dwyer_2018
\vspace{3mm}

\flushleft
\small
Rhethorik der Prädiktiven Modellierung

\center
\begin{tabular}{ll}
Daten                     & Trainingsdaten und Testdaten                  \\
Statistisches Modell      & Modell, Machine Learning Algorithmus          \\
Schätzen von Parametern   & Trainieren des Modells, Lernen von Parametern, Supervised Learning
\end{tabular}


# Vorbemerkungen
\small
\begin{definition}[Binärer Klassifikationstrainingdatensatz]
Ein \textit{binärer Klassifikationsdatensatz}
\begin{equation}
\mathcal{D} := \{(x^{(1)},y^{(1)}), (x^{(2)},y^{(2)}), ..., (x^{(n)},y^{(n)})\}
\end{equation}
ist eine Menge von $n$ \textit{Trainingsdatenpunkten}
\begin{equation}
(x^{(i)},y^{(i)}) \mbox{ mit } x^{(i)} \in \mathbb{R}^m
\mbox{ und }
y^{(i)} \in \{0,1\}
\mbox{ for }
i = 1,...,n,
\end{equation}
wobei  $x^{(i)}$ \textit{$m$-dimensionaler Featurevektor} und $y^{(i)}$ \textit{Label} genannt wird
\end{definition}

\footnotesize
Bemerkungen

* $y^{(i)} \in \{0,1\}$ bezeichnet die Klassenzugehörigkeit des Featurevektors $x^{(i)} \in \mathbb{R}^m$.
* Man beachte, dass hier $y^{(i)} \in \{0,1\}$ gilt, wohingegen bei SVMs $y^{(i)} \in \{-1,1\}$ ist.



# Vorbemerkungen

Bivariate Featureplots mit $x^{(i)} \in \mathbb{R}^2, y^{(i)} \in \{0,1\}, i = 1,...,n$

\center
\large
\textcolor{red}{$\bullet$} $y = 0 \quad\quad$ \textcolor{blue}{$\bullet$} $y = 1$

```{r, eval = F, echo = F}
graphics.off()
fdir        =  file.path(getwd(), "7_Abbildungen")
dev.new()
par(
family      = "sans",
mfcol       = c(1,3),
pty         = "s",
bty         = "l",
lwd         = 1,
las         = 1,
mgp         = c(2,1,0),
xaxs        = "i",
yaxs        = "i",
font.main   = 1,
cex         = 1.1,
cex.main    = 1.2)

# Featurevektoren
n           = 3e2
X           = cbind(runif(n, min = 0, max = 2), runif(n, min = 0, max = 2))

# Labelplots
plot(
X[X[,1] <= 1,1],
X[X[,1] <= 1,2],
type = "p",
col  = "White",
xlim = c(0,2),
ylim = c(0,2),
pch  = 21,
bg   = "Red",
xlab = TeX("$x_1$"),
ylab = TeX("$x_2$"),
main = TeX("$x_1 > 1 \\,\\, <=> \\,\\,  y = 1$"))
points(
X[X[,1] > 1,1],
X[X[,1] > 1,2],
col  = "White",
pch  = 21,
bg   = "Blue")

plot(
X[((X[,1] + X[,2]) <= 2),1],
X[((X[,1] + X[,2]) <= 2),2],
type = "p",
col  = "White",
xlim = c(0,2),
ylim = c(0,2),
pch  = 21,
bg   = "Red",
xlab = TeX("$x_1$"),
ylab = TeX("$x_2$"),
main = TeX("$x_1 + x_2 > 2 \\,\\, <=> \\,\\,  y = 1$"))
points(
X[((X[,1] + X[,2]) > 2),1],
X[((X[,1] + X[,2]) > 2),2],
col  = "White",
pch  = 21,
bg   = "Blue")


plot(
X[((X[,1]^2 + X[,2]^2) <= 2),1],
X[((X[,1]^2 + X[,2]^2) <= 2),2],
type = "p",
col  = "White",
xlim = c(0,2),
ylim = c(0,2),
pch  = 21,
bg   = "Red",
xlab = TeX("$x_1$"),
ylab = TeX("$x_2$"),
main = TeX("$x_1^2 + x_2^2 > 2 \\,\\, <=> \\,\\,  y = 1$"))
points(
X[((X[,1]^2 + X[,2]^2) > 2),1],
X[((X[,1]^2 + X[,2]^2) > 2),2],
col  = "White",
pch  = 21,
bg   = "Blue")



# export to pdf
dev.copy2pdf(file   = file.path(fdir, "mvda_7_bivariate_featureplots.pdf"),
             width  = 12,
             height = 4)

```
\vspace{6mm}

```{r, echo = FALSE, out.width = "100%"}
knitr::include_graphics("7_Abbildungen/mvda_7_bivariate_featureplots.pdf")
```



# Vorbemerkungen
Überblick
\vspace{2mm}
\setstretch{2.6}
\footnotesize
\flushleft
\begin{tabular}{l|l|l}
& Lineare Diskriminanzanalyse
& Logistische Regression
\\\hline
Zufallsvektoren
& $x \in \mathbb{R}^m, y \in \{0,1\}$
& $y \in \{0,1\}$
\\
Modell
& $p(x,y) := B(y;\mu)N(x;\mu_0,\Sigma)^{1-y}N(x;\mu_1,\Sigma)^y$
& $p(y) := B\left(y;\frac{1}{1 + \exp(-x^T\beta)} \right)$
\\
Inferenz
& $p(y|x) = \frac{1}{1 + \exp(-\tilde{x}^T\beta)}$
& Keine
\\
Klassifikation
& $\delta(x) = 1$ für $p(y = 1|x) > p(y=0|x)$
& $\delta(x) = 1$ für $p(y = 1) > p(y = 0)$
\\
Diskriminanz
& $f(x) = w^Tx + x_0, (w_0, w) = \beta$
& $f(x) = w^Tx + x_0, (w_0, w) = \beta$
\\
Parameterlernen
& Analytische Likelihood Maximierung
& Numerische Likelihood Maximierung
\end{tabular}
\vfill

#
\vfill
\setstretch{2.4}
\large

Vorbemerkungen

**Lineare Diskriminanzanalyse**

Logistische Regression

Selbstkontrollfragen

Appendix
\vfill

# Lineare Diskriminanzanalyse | Modellformulierung
\footnotesize
\begin{definition}[Multivariate Normalverteilung]
\justifying
$X$ sei ein $m$-dimensionaler Zufallsvektor mit Ergebnisraum $\mathbb{R}^m$ und WDF
\begin{equation}
p : \mathbb{R}^n \to \mathbb{R}_{>0},\, x \mapsto p(x)
:= (2\pi)^{-\frac{m}{2}}|\Sigma|^{-\frac{1}{2}}\exp\left(-\frac{1}{2}(x-\mu)^T \Sigma^{-1} (x-\mu)\right).
\end{equation}
Dann sagen wird, dass $X$ einer \textit{multivariaten (oder $m$-dimensionalen)
Normalverteilung} mit \textit{Erwartungswertparameter} $\mu \in \mathbb{R}^m$ und
positive-definitem \textit{Kovarianzmatrixparameter} $\Sigma \in \mathbb{R}^{m \times m}$
unterliegt und nennen $X$ einen \textit{(multivariat) normalverteilten Zufallsvektor}.
Wir kürzen dies mit $X \sim N(\mu,\Sigma)$ ab. Die WDF eines multivariat
normalverteilten Zufallsvektors bezeichnen wir mit
\begin{equation}
N(x;\mu,\Sigma):= (2\pi)^{-\frac{m}{2}}|\Sigma|^{-\frac{1}{2}}\exp\left(-\frac{1}{2}(x-\mu)^T \Sigma^{-1} (x-\mu)\right).
\end{equation}
\end{definition}

\footnotesize
Bemerkungen

* Der Parameter $\mu \in \mathbb{R}^m$ entspricht dem Wert höchster Wahrscheinlichkeitsdichte
* Die Diagonalelemente von $\Sigma$ spezifizieren die Breite der WDF bezüglich $X_1,...,X_m$.
* Das $i,j$te Element von $\Sigma$ spezifiziert die Kovarianz on $X_i$ und $X_j$.
* Der Term $(2\pi)^{-\frac{m}{2}}|\Sigma|^{-\frac{1}{2}}$ ist die Normalsieriungskonstante für den Exponentialfunktionsterm.

# Lineare Diskriminanzanalyse | Modellformulierung

```{r, eval = F, echo = F}

# R Paket für multivariate Normalverteilungen
library(mvtnorm)

# Abbildungsparameter
graphics.off()
fdir        =  file.path(getwd(), "7_Abbildungen")
dev.new()
par(
family      = "sans",
mfcol       = c(1,3),
pty         = "s",
bty         = "l",
lwd         = 1,
las         = 1,
mgp         = c(2,1,0),
xaxs        = "i",
yaxs        = "i",
font.main   = 1,
cex         = .7,
cex.main    = 1.2)


# Ergebnisraumdefintion
x_min  = 0                                           # x_i Minimum
x_max  = 2                                           # x_i Maxim
x_res  = 1e3                                         # x_i Auflösung
x_1    = seq(x_min, x_max, length.out = x_res)       # x_1 Raum
x_2    = seq(x_min, x_max, length.out = x_res)       # x_2 Raum
X      = expand.grid(x_1,x_2)                        # X = (x_1,x_2)^T Raum

# Parameterdefinition
mu     = c(1,1)                                      # \mu \in \mathbb{R}^2
S      = list(matrix(c(0.2,  0.15,  0.15, 0.2), 2),  # \Sigma in \mathbb{R}^{2 \times 2}
              matrix(c(0.2,  0.00,  0.00, 0.2), 2),  # \Sigma in \mathbb{R}^{2 \times 2}
              matrix(c(0.2, -0.15, -0.15, 0.2), 2))  # \Sigma in \mathbb{R}^{2 \times 2}
L      = list(expression(bgroup("(", atop("0.20  0.15", " 0.15  0.20"), ")")),
              expression(bgroup("(", atop("0.20  0.00", " 0.00  0.20"), ")")),
              expression(bgroup("(", atop("0.20 -0.15", "-0.15  0.20"), ")")))



# Kovarianzparametervariantenschleife
for (i in 1:length(S)){

  # Wahrscheinlichkeitsdichtefunktionauswertung
  p      = matrix(                                        # Matrixkonversion des von
                  dmvnorm(as.matrix(X), mu, S[[i]]),  # dmvnorm() ausgegebenen Vektors
                  nrow = x_res)

  # Visualisierung
  contour(
  x_1,
  x_2,
  p,
  xlim      =  c(x_min,x_max),
  ylim      =  c(x_min,x_max),
  nlevels   = 5)
  text(1,2.2, L[[i]], xpd = TRUE)
}

# export to pdf
dev.copy2pdf(file   = file.path(fdir, "mvda_7_lda_normalverteilungen.pdf"),
             width  = 8,
             height = 4)

```


Zweidimensionale Normalverteilungen
\vspace{6mm}

```{r, echo = FALSE, out.width = "100%"}
knitr::include_graphics("7_Abbildungen/mvda_7_lda_normalverteilungen.pdf")
```

# Lineare Diskriminanzanalyse | Modellformulierung
\footnotesize
\begin{definition}[Bernoulli Verteilung]
\justifying
Es sei $X$ eine Zufallsvariable mit Ergebnisraum $\mathcal{X} = \{0,1\}$ und WMF
\begin{equation}
p : \mathcal{X} \to [0,1], x\mapsto p(x) := \mu^{x}(1 - \mu)^{1-x} \mbox{ mit } \mu \in [0,1].
\end{equation}
Dann sagen wir, dass $X$ einer \textit{Bernoulli-Verteilung mit Parameter
$\mu \in [0,1]$} unterliegt und nennen $X$ eine \textit{Bernoulli-Zufallsvariable}.
Wir kürzen dies mit $X \sim B(\mu)$ ab. Die WMF einer
Bernoulli-Zufallsvariable bezeichnen wir mit
\begin{equation}
B(x;\mu) := \mu^x (1 - \mu)^{1 - x}.
\end{equation}
\end{definition}

Bemerkungen

* Eine Bernoulli-Zufallsvariable kann als Modell eines Münzwurfs dienen.
* $\mu \in [0,1]$ ist die Wahrscheinlichkeit dafür, dass $X$ den Wert 1 annimmt,
\begin{equation}
\mathbb{P}(X = 1) = \mu^1 (1 -\mu)^{1-1} = \mu.
\end{equation}


# Lineare Diskriminanzanalyse | Modellformulierung
```{r, eval = F, echo = F}
graphics.off()
fdir        =  file.path(getwd(), "7_Abbildungen")

# model formulation
x       = 0:1
mu      = c(.1,.5, .7)

# plot specifications
dev.new()
par(
mfcol      = c(1,length(mu)),
family     = "sans",
pty        = "s",
bty        = "l",
lwd        = 1,
las        = 1,
mgp        = c(2,1,0),
font.main  = 1,
cex.main   = 1.4
          )
# parameter iterations
for (i in 1:length(mu)){

  # Bernoulli PMFs
  plot(x,
       dbinom(x,1,mu[i]),
       type         = "h",
       lwd          =  1.5,
       col          = "Black",
       ylab         = " ",
       xlab         = "x",
       xlim         = c(-.3,1.3),
       ylim         = c(0,1))
   title(sprintf("B(x;%g)", mu[i]))
}

# export to pdf
dev.copy2pdf(file   = file.path(fdir, "mvda_7_lda_bernoulliverteilungen.pdf"),
             width  = 7,
             height = 3)
```

Bernoulli Verteilungen
\vspace{1cm}

```{r, echo = FALSE, out.width = "100%"}
knitr::include_graphics("7_Abbildungen/mvda_7_lda_bernoulliverteilungen.pdf")
```

# Lineare Diskriminanzanalyse | Modellformulierung
\small
\begin{definition}[Modell der Linearen Diskriminanzanalyse]
\justifying
$X$ sei ein $m$-dimensionaler Zufallsvektor mit Ergebnisraum $\mathbb{R}^m$ und
$Y$ sei eine Zufallsvariable mit Ergebnisraum $\{0,1\}$. Dann ist das \textit{Modell
der Linearen Diskriminanzanalyse} die gemeinsame Verteilung
\begin{equation}
\mathbb{P}(X,Y) = \mathbb{P}(Y)\mathbb{P}(X|Y)
\end{equation}
wobei die diskrete marginale Verteilung $\mathbb{P}(Y)$ durch die WMF
\begin{equation}
p(y) = B(y;\mu)
\end{equation}
mit $\mu \in ]0,1[$ definiert und die kontinuierliche bedingte Verteilung
$\mathbb{P}(X|Y)$ durch die WDF
\begin{equation}
p(x|y)
= N(x; \mu_0, \Sigma)^{1 - y}N(x; \mu_1, \Sigma)^{y}
\end{equation}
mit $\mu_0, \mu_1 \in \mathbb{R}^m$ und $\Sigma \in \mathbb{R}^{m \times m}$ p.d.
definiert ist. Wir bezeichnen die gemischte WDF/WMF des LDA Modells mit
\begin{equation}
p(x,y) := p(y)p(x|y) = B(y;\mu) N(x;\mu_0,\Sigma)^{1-y}N(x;\mu_1, \Sigma)^{y}
\end{equation}
\end{definition}

# Lineare Diskriminanzanalyse | Modellformulierung
\small
Bemerkung

Aus generativer Sicht wird ein Trainingsdatensatz
\begin{equation}
\left\lbrace \left(x^{(i)},y^{(i)}\right)\right\rbrace_{i = 1}^{n} \mbox{ mit } x^{(i)} \in \mathbb{R}^m \mbox{ und } y^{(i)} \in \{0,1\}
\end{equation}
eines LDA Modells wie folgt erzeugt:

(1) $y^{(i)}$ wird zunächst durch Ziehen aus einer Bernoulliverteilung mit Parameter $\mu$ erzeugt.

(2) In Abhängigkeit vom Wert von $y^{(i)}$ wird $x^{(i)}$ dann durch Ziehen aus einer multivariaten Normalverteilung
mit Kovarianzmatrixparameter $\Sigma$ und Erwartungswertparameter $\mu_0$ für $y^{(i)} = 0$ oder $\mu_1$ für $y^{(i)} = 1$ erzeugt.


# Lineare Diskriminanzanalyse | Modellformulierung
Datengeneration

\vspace{1mm}
\tiny
\setstretch{1}
```{r}
# R Paket für multivariate Normalverteilung
library(mvtnorm)
set.seed(0)

# Modellparameter
m      = 2                                       # Featurevektordimension
n      = 2e2                                     # Anzahl Trainingsdatenpunkte
mu     = 0.5                                     # wahrer, aber unbekannter, Bernoulliparameter \mu
mu_0   = c(1,1)                                  # wahrer, aber unbekannter, Normalverteilungsparameter \mu_0
mu_1   = c(2,2)                                  # wahrer, aber unbekannter, Normalverteilungsparameter \mu_1
Sigma  = matrix(c( 0.50, -0.25,                  # Kovarianzmatrixparameter
                  -0.25,  0.50),
                byrow = TRUE,
                nrow = m)

# Modellsampling
y      = matrix(rep(NaN,n)  , nrow = 1)          # Labeldatenarray
x      = matrix(rep(NaN,n*m), nrow = m)          # Featurevektorarray
for(i in 1:n){
  y[i]  = rbinom(1,1,mu)                         # y^{(i)} \sim B(\mu)
  x[,i] = ((y[i] == 0)*rmvnorm(1, mu_0, Sigma)   # x^{i} \sim N(\mu_0,\Sigma)^{1-y}N(\mu_1,\Sigma)^y
          +(y[i] == 1)*rmvnorm(1, mu_1, Sigma))
}

# Datensatzkonkatenation
D = rbind(x,y)
```


# Lineare Diskriminanzanalyse | Modellformulierung
\vspace{2mm}
Datengeneration
\vspace{1mm}

\footnotesize
\begin{equation*}
\mu    =  0.5,
\mu_0  = \begin{pmatrix} 1 \\ 1 \end{pmatrix},
\mu_1  = \begin{pmatrix} 2 \\ 2 \end{pmatrix},
\Sigma = \begin{pmatrix*}[r] 0.50 & -0.10 \\ -0.10 & 0.50 \end{pmatrix*}
\end{equation*}

```{r, eval = F, echo = F}
graphics.off()
fdir        =  file.path(getwd(), "7_Abbildungen")
dev.new()
par(
family      = "sans",
mfcol       = c(1,1),
pty         = "s",
bty         = "l",
lwd         = 1,
las         = 1,
mgp         = c(2,1,0),
xaxs        = "i",
yaxs        = "i",
font.main   = 1,
cex         = 1,
cex.main    = 1)

# Gaussian Isokontur Paket
library(ellipse)
iso_0           = ellipse(Sigma, level = 0.50, centre = mu_0)
iso_1           = ellipse(Sigma, level = 0.50, centre = mu_1)

# N(\mu_0,\Sigma)
plot(
iso_0,
type = "l",
col = "Red",
xlim = c(0,3),
ylim = c(0,3),
xlab = TeX("$x_1$"),
ylab = TeX("$x_2$"))
points(
mu_0[1],
mu_0[2],
col  = "Red",
pch = 3,
cex = 1.5)

# N(\mu_1,\Sigma)
lines(
iso_1[,1],
iso_1[,2],
col = "Blue")
points(
mu_1[1],
mu_1[2],
col  = "Blue",
pch = 3,
cex = 1.5)

# Daten y^{(i)} = 0
points(
D[1,D[3,] == 0],
D[2,D[3,] == 0],
col = "White",
bg  = "Red",
pch = 21)

# Daten y^{(i)} = 1
points(
D[1,D[3,] == 1],
D[2,D[3,] == 1],
col = "White",
bg  = "Blue",
pch = 21)

legend(
"topleft",
c("y = 0", "y = 1"),
pch         = 18,
col         = c("Red", "Blue"),
bty         = "n",
cex         = 1,
x.intersp   = 1)


dev.copy2pdf(
file        = file.path(fdir, "mvda_7_lda_modell.pdf"),
width       = 4.5,
height      = 4.5)
```

\vfill
```{r, echo = FALSE, out.width = "50%"}
knitr::include_graphics("7_Abbildungen/mvda_7_lda_modell.pdf")
```
\vfill

# Lineare Diskriminanzanalyse | Inferenz
\small
\begin{theorem}[LDA Inferenz]
\justifying
\normalfont
$p(x,y)$ sei die WMF/WDF eines LDA Model. Dann gilt
\begin{equation}
p(y = 1|x) = \frac{1}{1 + \exp(-\tilde{x}^T\beta)}
\mbox{ und  }
p(y = 0|x) = 1 - p(y = 1|x),
\end{equation}
wobei
\begin{equation}
\tilde{x} :=
\begin{pmatrix}
1 \\
x
\end{pmatrix}
\in \mathbb{R}^{m+1}
\end{equation}
der \textit{erweiterten Featurevektor} und
\begin{equation}
\beta :=
\begin{pmatrix}
\frac{1}{2}\left(\mu_0^T\Sigma^{-1}\mu_0 - \mu_1^T\Sigma^{-1} \mu_1\right) + \ln\left(\frac{\mu}{1- \mu}\right) \\
-\Sigma^{-1}(\mu_0 - \mu_1)
\end{pmatrix}
\in \mathbb{R}^{m+1}.
\end{equation}
der \textit{Inferenzparametervektor} sind.
\end{theorem}

\footnotesize
Bemerkungen

*  Für einen Beweis verweisen wir auf den Appendix.
*  $p(y|x)$ kann zur Prädiktion der Klasse eines $x \in \mathbb{R}^m$ genutzt werden.
*  Diese Prädiktion hängt von den LDA Modellparametern $\mu, \mu_0,\mu_1,\Sigma$ ab.


# Lineare Diskriminanzanalyse | Klassifikation
\small
\begin{definition}[Klassifikationsregel der linearen Diskriminanzanalyse]
\normalfont
\justifying
$p(x,y)$ sei die WMF/WDF eines LDA Modells. Dann ist die \textit{Klassifikationregel} definiert als
\begin{equation}
\delta : \mathbb{R}^m \to \{0,1\}, x \mapsto \delta(x) :=
\begin{cases}
0 & \mbox{ für } p(y = 0|x) \ge p(y = 1|x) \\
1 & \mbox{ für } p(y = 0|x)   < p(y = 1|x)
\end{cases}
\end{equation}
\end{definition}

Bemerkung

* Es gilt
\begin{equation}
\delta(x) = 1
\Leftrightarrow  p(y = 1|x) > p(y = 0|x)
\Leftrightarrow  p(y = 1|x) >0.5.
\end{equation}


# Lineare Diskriminanzanalyse | Inferenz und Klassifikation
\vspace{2mm}
Inferenz und Klassifikation bei bekannten Modellparametern
\vspace{1mm}
\footnotesize
\begin{equation*}
\mu    =  0.5,
\mu_0  = \begin{pmatrix} 1 \\ 1 \end{pmatrix},
\mu_1  = \begin{pmatrix} 2 \\ 2 \end{pmatrix},
\Sigma = \begin{pmatrix*}[r] 0.10 & -0.05 \\ -0.05 & 0.10 \end{pmatrix*}
\end{equation*}
\vspace{1mm}

\tiny
\setstretch{1}
```{r}

# Inferenz und Klassifikation für die ersten k Datenpunkte
library(matlib)                                                 # Matrixtools
k          =  10                                                # Anzahl Datenpunkte
x_tilde    = rbind(rep(1,k), x[,1:k])                           # erweiterte Featurevektoren
beta       = matrix(                                            # Inferenzparametervektor
             c((1/2)*(  t(mu_0) %*% inv(Sigma) %*% mu_0
                      - t(mu_1) %*% inv(Sigma) %*% mu_1)
                      + log(mu/(1-mu)),
               -inv(Sigma) %*% (mu_0-mu_1)), nrow = 3)
p_y_giv_x  = 1/(1+exp(-t(x_tilde) %*% beta))                    # p(y = 1|x)
delta      = as.numeric(p_y_giv_x >= 0.5)                       # Klassifikationsregel
```
\vspace{1mm}
\footnotesize

```{r, echo = F}
# data tabulation
P = data.frame(rbind(rbind(x[,1:k], t(p_y_giv_x)), delta, y[1:k]))
colnames(P) = 1:10
rownames(P) = c("x_1", "x_2", "p(y = 1|x)", "delta(x)", "y")
knitr::kable(P, "pipe")
```

# Lineare Diskriminanzanalyse | Diskriminanzfunktion
\footnotesize
\begin{theorem}[LDA Diskriminanzfunktion]
\normalfont
\justifying
$p(x,y)$ sei die WMF/WDF eines LDA Mmodells und $\beta \in \mathbb{R}^{m+1}$ sei
der Inferenzparametervektor. Dann kann die LDA Klassifikationsregel $\delta$ als
eine lineare Diskriminanzfunktion der Form
\begin{equation}
h : \mathbb{R}^m \to \{0,1\}, x \mapsto h(x) := g(f(x)),
\end{equation}
mit
\begin{equation}
f : \mathbb{R}^{m} \to \mathbb{R}, x \mapsto f(x) := w^T x + w_0,
\end{equation}
und
\begin{equation}
g : \mathbb{R} \to \{0,1\}, f(x) \mapsto g(f(x)) :=
\begin{cases}
0, & f(x) \ge 0 \\
1, & f(x)  < 0
\end{cases}
\end{equation}
geschrieben werden, d.h. es gilt $\delta(x) = h(x)$ für alle $x \in \mathbb{R}^m$.
Inbesondere gilt dabei
\begin{equation}
w_0 = \beta_1 \mbox{ und } w = (\beta_2,...,\beta_{m+1})^T
\end{equation}
\end{theorem}

\footnotesize
Bemerkungen

* Für einen Beweis verweisen wir auf den Appendix.
* Zur Visualisierung in zweidimensionalen Featureräumen dient die Graphgleichungen für Hyperebenen
\begin{equation}
f(x) = 0
\Leftrightarrow
w^T x + w_0 = 0
\Leftrightarrow
w_1 x_1 + w_2 x_2 + w_0 = 0
\Leftrightarrow
x_2 = - \frac{w_1}{w_2}x_1 - \frac{w_0}{w_2}
\end{equation}

# Lineare Diskriminanzanalyse | Diskriminanzfunktion
Implementation der Diskriminanfunktion bei bekannten Modellparametern

\tiny
\setstretch{1}
\vspace{1mm}
```{r}

# Diskriminanzfunktion
x_1  = seq(0,3,len = 1e2)                       # x_1
w_0  = beta[1]                                  # w_0
w    = beta[2:(m+1)]                            # w
x_2  = -(w[1]/w[2])*x_1 - (w_0/w[2])            # x_2
```

```{r, echo = F, eval = F}
# Abbildungsparameter
graphics.off()
fdir        =  file.path(getwd(), "7_Abbildungen")
dev.new()
par(
family      = "sans",
mfcol       = c(1,1),
pty         = "s",
bty         = "l",
lwd         = 1,
las         = 1,
mgp         = c(2,1,0),
xaxs        = "i",
yaxs        = "i",
font.main   = 1,
cex         = 1,
cex.main    = 1)

# Gaussian Isokontur Paket
library(ellipse)
iso_0           = ellipse(Sigma    , level = 0.5, centre = mu_0)
iso_1           = ellipse(Sigma    , level = 0.5, centre = mu_1)

# N(\mu_0,\Sigma)
plot(
iso_0,
type = "l",
col = "Red",
xlim = c(0,3),
ylim = c(0,3),
xlab = TeX("$x_1$"),
ylab = TeX("$x_2$"))
points(
mu_0[1],
mu_0[2],
col  = "Red",
pch = 3,
cex = 1)

# N(\mu_1,\Sigma)
lines(
iso_1[,1],
iso_1[,2],
type = "l",
col = "Blue")
points(
mu_1[1],
mu_1[2],
col  = "Blue",
pch = 3,
cex = 1)

# Daten y^{(i)} = 0
points(
D[1,D[3,] == 0],
D[2,D[3,] == 0],
col = "White",
bg  = "Red",
pch = 21)

# Daten y^{(i)} = 1
points(
D[1,D[3,] == 1],
D[2,D[3,] == 1],
col = "White",
bg  = "Blue",
pch = 21)

# Diskriminanzfunktion
lines(x_1, x_2, lty = 1)

# Legend
legend(
"topleft",
c("y = 0", "y = 1"),
pch         = 18,
col         = c("Red", "Blue"),
bty         = "n",
cex         = 1,
x.intersp   = 1)

dev.copy2pdf(
file        = file.path(fdir, "mvda_7_lda_diskriminanzfunktion.pdf"),
width       = 5,
height      = 5)

```

\vfill
```{r, echo = FALSE, out.width = "50%"}
knitr::include_graphics("7_Abbildungen/mvda_7_lda_diskriminanzfunktion.pdf")
```

# Lineare Diskriminanzanalyse | Parameterlernen
\footnotesize
\begin{theorem}[LDA Maximum Likelihood Schätzer]
\justifying
\normalfont
$p(x,y)$ sei die WMF/WDF eines LDA Modells mit Parametern $\{\mu,\mu_0,\mu_1,\Sigma\}$,
$\{(x^{(i)}, y^{(i)})\}_{i=1}^n$ sei ein LDA Trainingsdatensatz, und $1_{\{S\}}$
sei die Indikatorfunktion der Aussage $A$, d.h.  $1_{\{A\}} = 1$, wenn $A$ WAHR ist
uns $1_{\{A\}} = 0$, wenn $A$ FALSCH ist. Dann sind die Maximum Likelihood Schätzer
für $\mu,\mu_0,\mu_1$ und $\Sigma$ gegeben durch
\begin{align}
\begin{split}
\hat{\mu} 		& = \frac{1}{n}\sum_{i=1}^n 1_{\{y^{(i)} = 1\}}, \\
\hat{\mu}_0 	& = \frac{1}{\sum_{i=1}^n 1_{\{y^{(i)} = 0\}}}\sum_{i=1}^n 1_{\{y^{(i)} = 0\}}x^{(i)}, \\
\hat{\mu}_1 	& = \frac{1}{\sum_{i=1}^n 1_{\{y^{(i)} = 1\}}}\sum_{i=1}^n 1_{\{y^{(i)} = 1\}}x^{(i)}, \\
\hat{\Sigma} 	& = \frac{1}{n}\sum_{i=1}^n \left(x^{(i)} - \hat{\mu}_{y^{(i)}}\right)\left(x^{(i)} - \hat{\mu}_{y^{(i)}}\right)^T.
\end{split}
\end{align}
\end{theorem}

\footnotesize
Bemerkungen

* Für einen Beweis verweisen wir auf den Appendix


# Lineare Diskriminanzanalyse | Parameterlernen
\small
Bemerkungen (fortgeführt)

\footnotesize
* $\mu$ wird als die relative Häufigkeit der 1en im Trainingsdatensatz geschätzt.
* $\mu_0$ und $\mu_1$ werden als Stichprobenmittel aller $x^{(i)}$ mit $y^{(i)} = 0$ bzw. $y^{(i)} = 1$ geschätzt.
* $\Sigma$ wird durch die empirische Kovarianzmatrix aller $x^{(i)}, i = 1,...,n$ geschätzt.
* Substitution ergibt die Schätzer $\hat{\beta}$, $\hat{w}$, $\hat{w}_0$ und $\hat{h}$

\vspace{1mm}
\small
Implementation

\tiny
\vspace{1mm}
\setstretch{1}
```{r}
# Parameterlernen bei gegebenen Featurevektorset x \in \mathbb{R}^{m \times n} und Labelset y \in {0,1}^n
n            = ncol(x)                                                        # n
m            = nrow(x)                                                        # m
mu_hat       = mean(y)                                                        # \hat{\mu}
mu_0_hat     = rowMeans(x[, y == 0])                                          # \hat{\mu}_0
mu_1_hat     = rowMeans(x[, y == 1])                                          # \hat{\mu}_1
Sigma_hat    = matrix(rep(0,m^2), nrow = m)                                   # \hat{\Sigma}
for(i in 1:n){
  Sigma_hat  = (Sigma_hat + (1/n)*
               ((y[i] == 0)*(x[,i]-mu_0_hat) %*% t((x[,i]-mu_0_hat))
               +(y[i] == 1)*(x[,i]-mu_1_hat) %*% t((x[,i]-mu_1_hat))))
}
beta_hat     = matrix(c((1/2)*( t(mu_0_hat) %*% inv(Sigma_hat) %*% mu_0_hat  # \hat{beta}
                              - t(mu_1_hat) %*% inv(Sigma_hat) %*% mu_1_hat)
                              + log(mu_hat/(1-mu_hat)),
                        -inv(Sigma_hat) %*% (mu_0_hat-mu_1_hat)),
                      nrow = m+1)
w_0_hat      = beta_hat[1]                                                    # \hat{w}
w_hat        = beta_hat[2:(m+1)]                                              # \hat{w_0}
x_2_hat      = -(w_hat[1]/w_hat[2])*x_1 - (w_0_hat/w_hat[2])                  # \hat{h}
```

# Lineare Diskriminanzanalyse | Parameterlernen
```{r, eval = F, echo = F}
graphics.off()
fdir        =  file.path(getwd(), "7_Abbildungen")
dev.new()
par(
family      = "sans",
mfcol       = c(1,1),
pty         = "s",
bty         = "l",
lwd         = 1,
las         = 1,
mgp         = c(2,1,0),
xaxs        = "i",
yaxs        = "i",
font.main   = 1,
cex         = 1,
cex.main    = 1)

# Gaussian Isokontur Paket
library(ellipse)
iso_0           = ellipse(Sigma    , level = 0.5, centre = mu_0)
iso_1           = ellipse(Sigma    , level = 0.5, centre = mu_1)
iso_0_hat       = ellipse(Sigma_hat, level = 0.5, centre = mu_0_hat)
iso_1_hat       = ellipse(Sigma_hat, level = 0.5, centre = mu_1_hat)

# N(\mu_0,\Sigma)
plot(
iso_0,
type = "l",
col = "Red",
xlim = c(0,3),
ylim = c(0,3),
xlab = TeX("$x_1$"),
ylab = TeX("$x_2$"))
points(
mu_0[1],
mu_0[2],
col  = "Red",
pch = 3,
cex = 1)

# N(\hat{\mu}_0,\hat{\Sigma})
lines(
iso_0_hat[,1],
iso_0_hat[,2],
col = "Red",
lty  = 2)
points(
mu_0_hat[1],
mu_0_hat[2],
col  = "Red",
pch = 9,
cex = 1)

# N(\mu_1,\Sigma)
lines(
iso_1[,1],
iso_1[,2],
type = "l",
col = "Blue")
points(
mu_1[1],
mu_1[2],
col  = "Blue",
pch = 3,
cex = 1)

# N(\hat{\mu}_1,\hat{\Sigma})
lines(
iso_1_hat[,1],
iso_1_hat[,2],
col = "Blue",
lty  = 2)
points(
mu_1_hat[1],
mu_1_hat[2],
col  = "Blue",
pch = 9,
cex = 1)

# Daten y^{(i)} = 0
points(
D[1,D[3,] == 0],
D[2,D[3,] == 0],
col = "White",
bg  = "Red",
pch = 21)

# Daten y^{(i)} = 1
points(
D[1,D[3,] == 1],
D[2,D[3,] == 1],
col = "White",
bg  = "Blue",
pch = 21)

# Legend
legend(
"topleft",
c("y = 0", "y = 1"),
pch         = 18,
col         = c("Red", "Blue"),
bty         = "n",
cex         = 1,
x.intersp   = 1)

# Diskriminanfunktionen
lines(x_1,x_2    , lty = 1)
lines(x_1,x_2_hat, lty = 2)

dev.copy2pdf(
file        = file.path(fdir, "mvda_7_lda_lernen.pdf"),
width       = 5,
height      = 5)
```

\vspace{2mm}
Implementation
\vspace{1mm}
\footnotesize
\begin{equation*}
\hat{\mu}    =  0.52,
\hat{\mu}_0  = \begin{pmatrix} 0.94 \\ 1.01 \end{pmatrix},
\hat{\mu}_1  = \begin{pmatrix} 1.94 \\ 2.09 \end{pmatrix},
\hat{\Sigma} = \begin{pmatrix*}[r] 0.53 & -0.26 \\ -0.26 & 0.49 \end{pmatrix*}
\end{equation*}
\vfill

```{r, echo = FALSE, out.width = "55%"}
knitr::include_graphics("7_Abbildungen/mvda_7_lda_lernen.pdf")
```

# Lineare Diskriminanzanalyse | Anwendungsbeispiel

\textcolor{darkblue}{Prädiktion des Studienerfolgs}

\small

Nach @rudolf_2020 Kapitel 4

Datensatz zum Verhältnis psychologischer Diagnostik und Studienerfolg

$n = 30$ Studierende naturwissenschaftlicher Studiengänge

Featurevektor $x \in \mathbb{R}^4$

* $x_1$ Intelligenztestscore
* $x_2$ Mathematiktestscore
* $x_3$ Gewissenhaftigkeitscore
* $x_4$ Verträglichkeitscore

Label $y \in \{0,1\}$

* 0: ungenügend (Studienabbruch aufgrund nicht bestandener Prüfungen)
* 1: gut (Abschlussnote besser als 2.5)

```{r, echo = F, eval = F}
# Einlesen des Datensatzes aus Rudolf & Buse (2019) Multivariate Verfahren
library("foreign")
S = read.spss(file.path(getwd(), "7_Daten", "studienerfolg.sav"), to.data.frame = T)

# Präprozessierung
S = S[S$Gruppe != "befriedigend", ]    # Binärer Studienerfolg (ungenügend, gut)
y = rep(NaN, nrow((D)))                # Labelvektor
y[S$Gruppe == "ungenügend"] = 0        # 0 = Ungenügend
y[S$Gruppe == "gut"]        = 1        # 1 = Gut
D = rbind(t(as.matrix(S[,2:5])),y)     # Dataframe
colnames(D) = 1:ncol(D)                # Columnnames = Indices

# Speichern als .csv file
fname = file.path(getwd(), "7_Daten", "studienerfolg.csv")
write.table(D, fname,)
```

# Lineare Diskriminanzanalyse | Anwendungsbeispiel

```{r, echo = F}
D           = read.table(file.path(getwd(), "7_Daten", "studienerfolg.csv"))
colnames(D) = 1:ncol(D)
```

\small
Datensatz $i = 1,...,15$
\footnotesize

```{r, echo = F}
knitr::kable(D[1:15], "pipe")
```

\small
Datensatz $i = 16,...,30$
\footnotesize

```{r, echo = F}
knitr::kable(D[16:30], "pipe")
```

# Lineare Diskriminanzanalyse | Anwendungsbeispiel

```{r, echo = F, eval = F}

# Beispieldatensatzvisualisierung
D           = read.table(file.path(getwd(), "7_Daten", "studienerfolg.csv"))
graphics.off()
fdir        =  file.path(getwd(), "7_Abbildungen")
dev.new()
par(
family      = "sans",
mfcol       = c(1,2),
pty         = "s",
bty         = "l",
lwd         = 1,
las         = 1,
mgp         = c(2,1,0),
xaxs        = "i",
yaxs        = "i",
font.main   = 1,
cex         = 1,
cex.main    = 1)

# x_1/x_2 Visualisierung
plot(
as.numeric(D[1,D[5,] == 0]),
as.numeric(D[2,D[5,] == 0]),
col = "White",
bg  = "Red",
pch = 21,
xlim = c(20,100),
ylim = c(0,100),
xlab = "Intelligenztest (X1)",
ylab = "Mathematiktest (X2)",
cex  = 1.5)

points(
as.numeric(D[1,D[5,] == 1]),
as.numeric(D[2,D[5,] == 1]),
col = "White",
bg  = "Blue",
pch = 21,
cex = 1.5)

legend(
"topleft",
c("Ungenügend", "Gut"),
pch         = 18,
col         = c("Red", "Blue"),
bty         = "n",
cex         = 1,
x.intersp   = 1)

# x_3/x_4 Visualisierung
plot(
as.numeric(D[3,D[5,] == 0]),
as.numeric(D[4,D[5,] == 0]),
col = "White",
bg  = "Red",
pch = 21,
xlim = c(20,50),
ylim = c(10,70),
xlab = "Gewissenhaftigkeit (X3)",
ylab = "Verträglichkeit (X4)",
cex  = 1.5)

points(
as.numeric(D[3,D[5,] == 1]),
as.numeric(D[4,D[5,] == 1]),
col = "White",
bg  = "Blue",
pch = 21,
cex = 1.5)

legend(
"topleft",
c("Ungenügend", "Gut"),
pch         = 18,
col         = c("Red", "Blue"),
bty         = "n",
cex         = 1,
x.intersp   = 1)

dev.copy2pdf(
file        = file.path(fdir, "mvda_7_lda_anwendungsbeispiel_daten.pdf"),
width       = 8,
height      = 4)
```
Datensatz
\vspace{2mm}
```{r, echo = FALSE, out.width = "100%"}
knitr::include_graphics("7_Abbildungen/mvda_7_lda_anwendungsbeispiel_daten.pdf")
```

# Lineare Diskriminanzanalyse | Anwendungsbeispiel
Parameterlernen und lineare Diskriminanzfunktion

\vspace{2mm}
\tiny
\setstretch{1}
```{r}
library(matlib)                                                               # Matrixtools
D            = read.table(file.path(getwd(), "7_Daten", "studienerfolg.csv")) # Datensatz
x            = as.matrix(D[1:2,])                                             # Featureselektion
y            = as.matrix(D[5,])                                               # Label
D            = rbind(x,y)                                                     # Featureselected Datensatz
n            = ncol(x)                                                        # Datensatzgröße
m            = nrow(x)                                                        # Featurevektordimensionalität
mu_hat       = mean(y)                                                        # \hat{\mu}
mu_0_hat     = rowMeans(x[, y == 0])                                          # \hat{\mu}_0
mu_1_hat     = rowMeans(x[, y == 1])                                          # \hat{\mu}_1
Sigma_hat    = matrix(rep(0,4), nrow = 2)                                     # \hat{\Sigma}
for(i in 1:n){
  Sigma_hat  = (Sigma_hat + (1/n)*
              ( (y[i] == 0)*(x[,i]-mu_0_hat) %*% t((x[,i]-mu_0_hat))
               +(y[i] == 1)*(x[,i]-mu_1_hat) %*% t((x[,i]-mu_1_hat))))
}
beta_hat     = matrix(c((1/2)*( t(mu_0_hat) %*% inv(Sigma_hat) %*% mu_0_hat  # \hat{beta}
                              - t(mu_1_hat) %*% inv(Sigma_hat) %*% mu_1_hat)
                              + log(mu_hat/(1-mu_hat)),
                      -inv(Sigma_hat) %*% (mu_0_hat-mu_1_hat)), nrow = 3)
w_0_hat      = beta_hat[1]                                                    # \hat{w}
w_hat        = beta_hat[2:(m+1)]                                              # \hat{w_0}
x_1          = seq(min(x[1,]), max(x[1,]), len = 1e2)                         # x_1
x_2_hat      = -(w_hat[1]/w_hat[2])*x_1 - (w_0_hat/w_hat[2])                  # \hat{h}
x_tilde      = rbind(1, x)
p_y_giv_x    = 1/(1+exp(-t(x_tilde) %*% beta_hat))
delta        = as.numeric(p_y_giv_x >= 0.5)
cat("Accuracy: ", mean(delta == y))

```

# Lineare Diskriminanzanalyse | Anwendungsbeispiel
```{r, eval = F, echo = F}
graphics.off()
fdir        =  file.path(getwd(), "7_Abbildungen")
dev.new()
par(
family      = "sans",
mfcol       = c(1,1),
pty         = "s",
bty         = "l",
lwd         = 1,
las         = 1,
mgp         = c(2,1,0),
xaxs        = "i",
yaxs        = "i",
font.main   = 1,
cex         = 1,
cex.main    = 1)

# Gaussian Isokontur Paket
library(ellipse)
iso_0_hat       = ellipse(Sigma_hat, level = 0.5, centre = mu_0_hat)
iso_1_hat       = ellipse(Sigma_hat, level = 0.5, centre = mu_1_hat)

# N(\mu_0_hat,\Sigma_hat)
plot(
iso_0_hat[,1],
iso_0_hat[,2],
type = "l",
col = "Red",
xlim = c(10,100),
ylim = c(0,100),
xlab = "Intelligenztest (X1)",
ylab = "Mathematiktest (X2)")
points(
mu_0_hat[1],
mu_0_hat[2],
col  = "Red",
pch = 9,
cex = 1)

# N(\hat{\mu}_1,\hat{\Sigma})
lines(
iso_1_hat[,1],
iso_1_hat[,2],
col = "Blue",
lty  = 2)
points(
mu_1_hat[1],
mu_1_hat[2],
col  = "Blue",
pch = 9,
cex = 1)

# Daten y^{(i)} = 0
points(
D[1,D[3,] == 0],
D[2,D[3,] == 0],
col = "White",
bg  = "Red",
pch = 21)

# Daten y^{(i)} = 1
points(
D[1,D[3,] == 1],
D[2,D[3,] == 1],
col = "White",
bg  = "Blue",
pch = 21)

# Diskriminanfunktionen
lines(x_1,x_2_hat, lty = 2)

dev.copy2pdf(
file        = file.path(fdir, "mvda_7_lda_anwendungsbeispiel_parameterlernen.pdf"),
width       = 5,
height      = 5)
```

\vspace{1mm}
Parameterlernen und lineare Diskriminanzfunktion

\vspace{2mm}
```{r, echo = FALSE, out.width = "60%"}
knitr::include_graphics("7_Abbildungen/mvda_7_lda_anwendungsbeispiel_parameterlernen.pdf")
```


# Lineare Diskriminanzanalyse | Anwendungsbeispiel
\vspace{1mm}
Lineare Diskriminanzanalyse | Leave-One-Out Cross-Validation, $m = 2$

\tiny
\setstretch{0.8}
```{r}
# Datensatz
D                = read.table(file.path(getwd(), "7_Daten", "studienerfolg.csv"))
x                = as.matrix(D[1:2,])
y                = as.matrix(D[5,])
D                = rbind(x,y)
K                = ncol(D)
p_y_giv_x        = matrix(rep(NaN, ncol(y)), nrow = 1)
delta            = matrix(rep(NaN, ncol(y)), nrow = 1)

# K-fache Leave-One-Out Cross-Validation
for(k in 1:K){

    # Datensatzpartition
    x_train      = as.matrix(x[,-k])
    y_train      = as.matrix(y[,-k])
    x_test       = as.matrix(x[, k])
    y_test       = as.matrix(y[, k])

    # Trainingsdatensatz-basiertes Parameterlernen
    n            = ncol(x_train)
    m            = nrow(x_train)
    mu_hat       = mean(y_train)
    mu_0_hat     = rowMeans(x_train[, y_train == 0])
    mu_1_hat     = rowMeans(x_train[, y_train == 1])
    Sigma_hat    = matrix(rep(0,m^2), nrow = m)
    for(i in 1:n){
      Sigma_hat  = (Sigma_hat + (1/n)*
                   ((y_train[i] == 0)*(x_train[,i]-mu_0_hat) %*% t((x[,i]-mu_0_hat))
                   +(y_train[i] == 1)*(x_train[,i]-mu_1_hat) %*% t((x[,i]-mu_1_hat))))
    }
    beta_hat     = matrix(c((1/2)*( t(mu_0_hat) %*% inv(Sigma_hat) %*% mu_0_hat  # \hat{beta}
                                  - t(mu_1_hat) %*% inv(Sigma_hat) %*% mu_1_hat)
                                  + log(mu_hat/(1-mu_hat)),
                          -inv(Sigma_hat) %*% (mu_0_hat-mu_1_hat)), nrow = m+1)

    # Prädiktion
    x_test_tilde = rbind(1, x_test)
    p_y_giv_x[k] = 1/(1+exp(-t(x_test_tilde) %*% beta_hat))
    delta[k]     = as.numeric(p_y_giv_x[k] >= 0.5)
}
cat("Accuracy: ", mean(delta == y))
```

# Lineare Diskriminanzanalyse | Anwendungsbeispiel
Lineare Diskriminanzanalyse | Leave-One-Out Cross-Validation, $m = 2$

\tiny
\setstretch{0.8}
```{r, echo = F}
# data tabulation
P = data.frame(rbind(1:ncol(x), x, p_y_giv_x, delta, y))
colnames(P) = 1:ncol(x)
rownames(P) = c("k", "x_1", "x_2", "p(y = 1|x)", "delta(x)", "y")
knitr::kable(t(P), "pipe", digits = 1)
```
\small
Prediction Accuracy = 0.67.

# Lineare Diskriminanzanalyse | Anwendungsbeispiel
Lineare Diskriminanzanalyse | Leave-One-Out Cross-Validation, $m = 3$

```{r, echo = F, results = F}
# Datensatz
D                = read.table(file.path(getwd(), "7_Daten", "studienerfolg.csv"))
x                = as.matrix(D[1:3,])
y                = as.matrix(D[5,])
D                = rbind(x,y)
K                = ncol(D)
p_y_giv_x        = matrix(rep(NaN, ncol(y)), nrow = 1)
delta            = matrix(rep(NaN, ncol(y)), nrow = 1)

# K-fache Leave-One-Out Cross-Validation
for(k in 1:K){

    # Datensatzpartition
    x_train      = as.matrix(x[,-k])
    y_train      = as.matrix(y[,-k])
    x_test       = as.matrix(x[, k])
    y_test       = as.matrix(y[, k])

    # Trainingsdatensatz-basiertes Parameterlernen
    n            = ncol(x_train)
    m            = nrow(x_train)
    mu_hat       = mean(y_train)
    mu_0_hat     = rowMeans(x_train[, y_train == 0])
    mu_1_hat     = rowMeans(x_train[, y_train == 1])
    Sigma_hat    = matrix(rep(0,m^2), nrow = m)
    for(i in 1:n){
      Sigma_hat  = (Sigma_hat + (1/n)*
                   ((y_train[i] == 0)*(x_train[,i]-mu_0_hat) %*% t((x[,i]-mu_0_hat))
                   +(y_train[i] == 1)*(x_train[,i]-mu_1_hat) %*% t((x[,i]-mu_1_hat))))
    }
    beta_hat     = matrix(c((1/2)*( t(mu_0_hat) %*% inv(Sigma_hat) %*% mu_0_hat  # \hat{beta}
                                  - t(mu_1_hat) %*% inv(Sigma_hat) %*% mu_1_hat)
                                  + log(mu_hat/(1-mu_hat)),
                          -inv(Sigma_hat) %*% (mu_0_hat-mu_1_hat)), nrow = m+1)

    # Prädiktion
    x_test_tilde = rbind(1, x_test)
    p_y_giv_x[k] = 1/(1+exp(-t(x_test_tilde) %*% beta_hat))
    delta[k]     = as.numeric(p_y_giv_x[k] >= 0.5)
}
cat("Accuracy: ", mean(delta == y))
```

\tiny
\setstretch{0.8}
```{r, echo = F}
# data tabulation
P = data.frame(rbind(1:ncol(x), x, p_y_giv_x, delta, y))
colnames(P) = 1:ncol(x)
rownames(P) = c("k", "x_1", "x_2","x_3", "p(y = 1|x)", "delta(x)", "y")
knitr::kable(t(P), "pipe", digits = 1)
```

\small
Prediction Accuracy = 0.60.


# Lineare Diskriminanzanalyse | Anwendungsbeispiel
Lineare Diskriminanzanalyse | Leave-One-Out Cross-Validation, $m = 4$

```{r, echo = F, results = F}
# Datensatz
D                = read.table(file.path(getwd(), "7_Daten", "studienerfolg.csv"))
x                = as.matrix(D[1:4,])
y                = as.matrix(D[5,])
D                = rbind(x,y)
K                = ncol(D)
p_y_giv_x        = matrix(rep(NaN, ncol(y)), nrow = 1)
delta            = matrix(rep(NaN, ncol(y)), nrow = 1)

# K-fache Leave-One-Out Cross-Validation
for(k in 1:K){

    # Datensatzpartition
    x_train      = as.matrix(x[,-k])
    y_train      = as.matrix(y[,-k])
    x_test       = as.matrix(x[, k])
    y_test       = as.matrix(y[, k])

    # Trainingsdatensatz-basiertes Parameterlernen
    n            = ncol(x_train)
    m            = nrow(x_train)
    mu_hat       = mean(y_train)
    mu_0_hat     = rowMeans(x_train[, y_train == 0])
    mu_1_hat     = rowMeans(x_train[, y_train == 1])
    Sigma_hat    = matrix(rep(0,m^2), nrow = m)
    for(i in 1:n){
      Sigma_hat  = (Sigma_hat + (1/n)*
                   ((y_train[i] == 0)*(x_train[,i]-mu_0_hat) %*% t((x[,i]-mu_0_hat))
                   +(y_train[i] == 1)*(x_train[,i]-mu_1_hat) %*% t((x[,i]-mu_1_hat))))
    }
    beta_hat     = matrix(c((1/2)*( t(mu_0_hat) %*% inv(Sigma_hat) %*% mu_0_hat  # \hat{beta}
                                  - t(mu_1_hat) %*% inv(Sigma_hat) %*% mu_1_hat)
                                  + log(mu_hat/(1-mu_hat)),
                          -inv(Sigma_hat) %*% (mu_0_hat-mu_1_hat)), nrow = m+1)

    # Prädiktion
    x_test_tilde = rbind(1, x_test)
    p_y_giv_x[k] = 1/(1+exp(-t(x_test_tilde) %*% beta_hat))
    delta[k]     = as.numeric(p_y_giv_x[k] >= 0.5)
}
cat("Accuracy: ", mean(delta == y))
```

\tiny
\setstretch{0.8}
```{r, echo = F}
# data tabulation
P = data.frame(rbind(1:ncol(x), x, p_y_giv_x, delta, y))
colnames(P) = 1:ncol(x)
rownames(P) = c("k", "x_1", "x_2","x_3", "x_4", "p(y = 1|x)", "delta(x)", "y")
knitr::kable(t(P), "pipe", digits = 1)
```
\small
Prediction Accuracy = 0.80.


#
\vfill
\setstretch{2.4}
\large

Vorbemerkungen

Lineare Diskriminanzanalyse

**Logistische Regression**

Selbstkontrollfragen

Appendix
\vfill

# Logistische Regression | Modellformulierung
\small
\begin{definition}[Generalisiertes Lineares Modell]
\justifying
$x \in \mathbb{R}^m$ sei ein erweiterter Featurevektor und $y$ das assoziierte
Label. Weiterhin sei für einen \textit{Parametervektor} $\beta \in \mathbb{R}^{m}$
\begin{equation}
\eta := x^T\beta
\end{equation}
ein  \textit{linearer Prädiktor}. Dann ist ein generalisierte lineares Modell definiert
mithilfe einer zweimal differenzierbaren und invertierbaren  \textit{link function}
\begin{equation}
g : \mathbb{R} \to \mathbb{R}, \mathbb{E}(y) \mapsto g(\mathbb{E}(y)) =: \eta.
\end{equation}
definiert. Die Inverse der link function,
\begin{equation}
g^{-1}:  \mathbb{R} \to \mathbb{R}, \eta \mapsto g^{-1}(\eta) = \mathbb{E}(y)
\end{equation}
heißt  \textit{mean function} und wird mit $f$ bezeichnet, so dass
\begin{equation}
f :  \mathbb{R} \to \mathbb{R}, \eta \mapsto f(\eta) = \mathbb{E}(y).
\end{equation}
\end{definition}


# Logistische Regression | Modellformulierung
\small
\begin{definition}[Allgemeines Lineares Modell als Generalisiertes Lineares Modell]
Das Allgemeine Lineare Modell mit u.i.v. Störvariablen ist das Generalisierte
Lineare Model, bei dem
\begin{enumerate}
\item die Labelvariable eine univariat normalverteilte Zufallsvariable
\begin{equation}
y \sim N(\mu,\sigma^2),
\end{equation}
ist und
\item die link function durch die Identität
\begin{equation}
g : \mathbb{R} \to \mathbb{R}, \mu \mapsto g(\mu) := \mu =: \eta.
\end{equation}
gegeben ist.
\end{enumerate}
Weil die Inverse der Identität wiederrum die Identität ist, folgt,
dass die mean function des ALM durch
\begin{equation}
f :  \mathbb{R} \to \mathbb{R}, \eta \mapsto f(\eta) = \eta =  \mu.
\end{equation}
gegeben ist. Die Parameter des Allgemeinen Linearen Modells sind die Komponenten
des Vektors $\beta \in \mathbb{R}^{m}$ des linearen Prädiktors $\eta = x^T\beta$
und der Parameter $\sigma^2>0$.
\end{definition}

# Logistische Regression | Modellformulierung
\small
\begin{definition}[Logistische Regression als Generalisiertes Lineares Modell]
Das Modell der Logistischen Regression (LR) ist das Generalisierte Lineare Modell, bei dem
\begin{enumerate}
\item die Labelvariable eine Bernoulli-Zufallsvariable
\begin{equation}
y \sim B(\mu)
\end{equation}
ist und
\item die link function durch die \textit{standard logit function}
\begin{equation}
g : [0,1] \to \mathbb{R}, \mu \mapsto g(\mu) := \ln \left(\frac{\mu}{1 - \mu} \right) =: \eta
\end{equation}
gegeben ist.
\end{enumerate}
Die Parameter des Logistischen Regressionsmodels sind die Komponenten
des Vektors $\beta \in \mathbb{R}^{m}$ des linearen Prädiktors $\eta = x^T\beta$.
\end{definition}

# Logistische Regression | Modellformulierung
\small
\begin{theorem}[Mean function der Logistischen Regression]
\justifying
\normalfont
Die Inverse der link function des Modells der Logistischen Regression
und somit seine mean function ist die
\textit{standard logistic function}
\begin{equation}
f : \mathbb{R} \to [0,1], \eta \mapsto f(\eta) = \frac{1}{1 + \exp(- \eta)}.
\end{equation}
\end{theorem}

\footnotesize
\underline{Beweis}
\vspace{1mm}

Umformen der logit function ergibt
\begin{align*}
\begin{split}
\eta & = \ln (\mu/(1-\mu))		\\
\Leftrightarrow
-\eta & = -\ln(\mu/(1-\mu))		\\
\Leftrightarrow
-\eta & = \ln((1-\mu)/\mu))		\\
\Leftrightarrow
\exp(-\eta) & = (1-\mu)/\mu 	\\
\Leftrightarrow
\mu \exp(-\eta) & = 1 - \mu 	\\
\Leftrightarrow
\exp(-\eta) & = \mu^{-1} - 1 	\\
\mu & = 1/(\exp(-\eta) + 1)
\end{split}
\end{align*}
$\hfill \Box$

# Logistische Regression | Modellformulierung

Link und Mean Funktionen
\vspace{2mm}
```{r, echo = F, eval = F}

graphics.off()
fdir        =  file.path(getwd(), "7_Abbildungen")
dev.new()
par(
family      = "sans",
mfcol       = c(1,2),
pty         = "s",
bty         = "l",
lwd         = 1,
las         = 1,
mgp         = c(2,1,0),
xaxs        = "i",
yaxs        = "i",
font.main   = 1,
cex         = 1.1,
cex.main    = 1.2)

mu          = seq(0,1,len = 1e2)
g_mu        = log(mu/(1-mu))
eta         = seq(-10,10, len = 1e2)
f_eta       = 1/(1 + exp(-eta))

# g(\mu)
plot(
mu,
g_mu,
type = "l",
col = "Blue",
xlim = c(0,1),
ylim = c(-10,10),
xlab = TeX("$\\mu$"),
ylab = TeX("$\\eta$"),
main = TeX("$g(\\mu) := ln (\\mu/1 - \\mu)$"))
grid()

# f(\eta)
plot(
eta,
f_eta,
type = "l",
col = "Blue",
xlim = c(-10,10),
ylim = c(0,1),
xlab = TeX("$\\eta$"),
ylab = TeX("$\\mu$"),
main = TeX("$f(\\eta) := 1/(1 + \\exp(-\\eta))$"))
grid()

# export to pdf
dev.copy2pdf(file   = file.path(fdir, "mvda_7_lr_link_mean.pdf"),
             width  = 8,
             height = 4)
```

```{r, echo = FALSE, out.width = "90%"}
knitr::include_graphics("7_Abbildungen/mvda_7_lr_link_mean.pdf")
```

# Logistische Regression | Modellformulierung
\small
\begin{definition}[Modell der Logistischen Regression]
$y$ sei eine Zufallsvariable mit Ergebnisraum $\{0,1\}$. Dann ist das
\textit{Modell der Logistischen Regressionsmodell} definiert als die WMF
\begin{equation}
p(y) = B\left(y;\frac{1}{1 + \exp(-x^T \beta)}\right),
\end{equation}
wobei $x \in \mathbb{R}^{m+1}$ einen erweiterten Featurevektor und
$\beta \in \mathbb{R}^{m+1}$ den \textit{Parametervektor} bezeichnen
\end{definition}

\footnotesize
Bemerkung

* Aus generativer Sicht wird ein Trainingsdatensatz
\begin{equation}
\left\lbrace\left(x^{(i)},y^{(i)}\right)\right\rbrace_{i = 1}^{n} \mbox{ mit } x^{(i)} \in \mathbb{R}^{m+1} \mbox{ und } y^{(i)} \in \{0,1\}
\end{equation}
eines LR Modells wie folgt erzeugt:

(1) Definition von $x^{(i)}$,
(2) Ziehen von  $y^{(i)}$ aus $p(y) = B(y;\mu)$ mit Erwartungswertparameter $\mu = \frac{1}{1 + \exp(-x^{(i)^T} \beta)}$.

# Logistische Regression | Modellformulierung

Datengeneration bei einfacher Logistischer Regression ($m = 1$)
\vspace{3mm}

\footnotesize
```{r}
# Modellparameter
m    = 1                                # Featurevektoredimensionalität
n    = 30                               # Anzahl Datenpunkte
x    = matrix(c(rep(1,n),               # Definition des erweiterten Featurevektors
                seq(-5,5, len = n)),
              nrow  = 2,
              byrow = TRUE)
beta = matrix(c(-2,2), nrow = 2)        # wahrer, aber unbekannter, Parametervektor
eta  = t(x) %*% beta                    # wahrer, aber unbekannter linearer Prädiktor
mu   = 1/(1+exp(-eta))                  # wahrer, aber unbekannter, Bernoulliparametervektor

# Dategeneration
set.seed(2)                             # Zufallsgeneratorzustand
y    = rep(NaN,2)                       # Datenarray
for(i in 1:n){
  y[i] = rbinom(1,1,mu[i])              # Bernoullivariablenrealisierung
}
```
# Logistische Regression | Modellformulierung

Datengeneration bei einfacher Logistischer Regression ($m = 1, \beta = (-2,2)^T,  n = 30$)
\vspace{4mm}

```{r, eval = F, echo = F}
graphics.off()
fdir        =  file.path(getwd(), "7_Abbildungen")
dev.new()
par(
family      = "sans",
mfcol       = c(1,2),
pty         = "m",
bty         = "l",
lwd         = 1,
las         = 1,
mgp         = c(2,1,0),
xaxs        = "i",
yaxs        = "i",
font.main   = 1,
cex         = 1.1,
cex.main    = 1.2)

plot(
x[2,],
eta,
type = "b",
pch  = 16,
xlab = TeX("$x_2$"),
ylab = "",
xlim = c(min(x[2,])-1, max(x[2,])+1),
ylim = c(min(eta)-1, max(eta)+1),
main = TeX("$\\eta = x^T \\beta$"))
grid()

plot(
x[2,],
mu,
type = "b",
xlab = TeX("$x_2$"),
ylab = "",
col  = "gray60",
pch  = 16,
xlim = c(min(x[2,])-1, max(x[2,])+1),
ylim = c(-.1,1.1),
main = TeX("$\\mu = 1/(1 + exp(-\\eta))$ und $y$"))
points(
x[2,],
y,
type = "p")
grid()

legend(
"topleft",
c("y", TeX("$\\mu$")),
pch         = c(1,16),
col         = c("Black","gray60"),
bty         = "n",
cex         = 1,
x.intersp   = 1)

# export to pdf
dev.copy2pdf(file   = file.path(fdir, "mvda_7_lr_datengeneration.pdf"),
             width  = 10,
             height = 5)
```

```{r, echo = FALSE, out.width = "90%"}
knitr::include_graphics("7_Abbildungen/mvda_7_lr_datengeneration.pdf")
```

# Logistische Regression | Klassifikationsregel
\small
\begin{definition}[Klassifikationsregel der Logistischen Regression]
\normalfont
\justifying
$p(y)$ sei die WMF eines Logistischen Regressionsmodells. Dann ist die
\textit{Klassifikationregel} definiert als
\begin{equation}
\delta : \mathbb{R}^m \to \{0,1\}, x \mapsto \delta(x) :=
\begin{cases}
0 & \mbox{ für } p(y = 0) \ge p(y = 1) \\
1 & \mbox{ für } p(y = 0)   < p(y = 1)
\end{cases}
\end{equation}
\end{definition}

Bemerkung

* Es gilt
\begin{equation}
\delta(x) = 1
\Leftrightarrow  p(y = 1) > p(y = 0)
\Leftrightarrow  p(y = 1) > 0.5.
\end{equation}

# Logistische Regression | Diskriminanzfunktion
\footnotesize
\begin{theorem}[Lineare Diskriminanzfunktion der Logistischen Regression]
\normalfont
\justifying
$p(y)$ sei die WMF eines Logistischen Regressionsmodells und $\beta \in \mathbb{R}^{m+1}$
sei der Parametervektor. Dann kann die Klassifikationsregel $\delta$ der Logistischen Regression
als eine lineare Diskriminanzfunktion der Form
\begin{equation}
h : \mathbb{R}^m \to \{0,1\}, x \mapsto h(x) := g(f(x)),
\end{equation}
mit
\begin{equation}
f : \mathbb{R}^{m} \to \mathbb{R}, x \mapsto f(x) := w^T x + w_0,
\end{equation}
und
\begin{equation}
g : \mathbb{R} \to \{0,1\}, f(x) \mapsto g(f(x)) :=
\begin{cases}
0, & f(x) \ge 0 \\
1, & f(x)  < 0
\end{cases}
\end{equation}
geschrieben werden, d.h. es gilt $\delta(x) = h(x)$ für alle $x \in \mathbb{R}^m$.
Inbesondere gilt dabei
\begin{equation}
w_0 = \beta_1 \mbox{ und } w = (\beta_2,...,\beta_{m+1})^T
\end{equation}
\end{theorem}

\footnotesize
Bemerkung

* CAVE: $f$ bezeichnet hier eine linear-affine Funktion, nicht die standard logistic function.
* Ein Beweis ergibt sich in Analogie zum Fall der Linearen Diskriminanzanalyse

# Logistische Regression | Parameterlernen
\footnotesize
\begin{theorem}[Log Likelihood Funktion der Logistischen Regression]
\justifying
\normalfont
$\lbrace(x^{(i)},y^{(i)})\rbrace_{i=1}^n$ sei ein Trainingsdatensatz aus erweiterten
Featurevektoren und assoziierten Labelvariablenrealisierungen und $f$ sei die
standard logistic function. Dann hat die Log Likelihood Funktion der Logistischen
Regression die Form
\begin{equation*}
\ell : \mathbb{R}^m \to \mathbb{R}, \beta \mapsto \ell(\beta)
:= \sum_{i=1}^n y^{(i)} \ln (f(x^{{(i)}^T}\beta))
 			  + (1 - y^{(i)}) \ln (1 - f(x^{{(i)}^T}\beta)).
\end{equation*}
\end{theorem}

\tiny
\setstretch{.8}
\underline{Beweis}

Wir halten zunächst fest, dass für u.i.v. Labelvariablen gilt, dass
\begin{equation*}
\ell(\beta)
:= \ln p(y^{(1)}, ...,y^{(n)})
 = \ln \prod_{i=1}^n p(y^{(i)})
 = \sum_{i=1}^n \ln p(y^{(i)})
\end{equation*}
Mit der WMF der Bernoulliverteilung folgt dann
\begin{align*}
\begin{split}
\ell(\beta)
&  = \sum_{i=1}^n \ln  (f(x^{{(i)}^T}\beta)^{y^{(i)}}
                       (1 - f(x^{{(i)}^T}\beta))^{1 - y^{(i)}})	\\
& = \sum_{i=1}^n
y^{(i)}  \ln (f(x^{{(i)}^T}\beta)) +
(1 - {y^{(i)}}) \ln (1 - f(x^{{(i)}^T}\beta))	\\
\end{split}
\end{align*}

# Logistische Regression | Parameterlernen
Implementation der Log Likelihood Funktion

\vspace{2mm}
\tiny
\setstretch{.9}
```{r}
# Funktionsdefinitionen
# ------------------------------------------------------------------------------------------------
# Standard Logistic Function
f = function(eta){
    return(1/(1 + exp(-eta)))
}

# Log Likelihood Function
llh = function(x,y,beta){
    n   = ncol(x)
    ell = 0
    for(i in 1:n){
        ell = ell + y[i]*log(f(t(x[,i]) %*% beta)) + (1-y[i])*log(1-f(t(x[,i]) %*% beta))
    }
    return(ell)
}

# Log Likelihood Funktion Auswertung
# ------------------------------------------------------------------------------------------------
beta_min  = -5                                                   # beta Minimum
beta_max  =  5                                                   # beta Maximum
beta_res  = 5e1                                                  # beta Auflösung
beta_1    = seq(beta_min, beta_max, length.out = beta_res)       # beta_1 Raum
beta_2    = seq(beta_min, beta_max, length.out = beta_res)       # beta_2 Raum
ell       = matrix(rep(NaN, beta_res*beta_res), nrow = beta_res) # Log Likelihood Funktion Array
for(i in 1:beta_res){
    for(j in 1:beta_res){
        beta12   = matrix(c(beta_1[i], beta_2[j]), nrow = 2)
        ell[i,j] = llh(x,y,beta12)
    }
}
```


# Logistische Regression | Parameterlernen
\vspace{2mm}
Visualisierung der Log Likelihood Funktion
\vspace{2mm}
```{r, eval = F, echo = F}
graphics.off()
fdir        =  file.path(getwd(), "7_Abbildungen")
dev.new()
par(
family      = "sans",
mfcol       = c(1,1),
pty         = "s",
bty         = "l",
lwd         = 1,
las         = 1,
mgp         = c(2,1,0),
xaxs        = "i",
yaxs        = "i",
font.main   = 1,
cex         = 1.3,
cex.main    = 1.1)
filled.contour(
beta_1,
beta_2,
ell,
col    = hcl.colors(20, "YlOrRd"),
levels = seq(-20,0,len = 20),
ylim   = c(0,5),
xlab   = TeX("$\\beta_1$"),
ylab   = TeX("$\\beta_2$"),
main   = "Log Likelihood Funktion")
points(
beta[1],
beta[2],
col = "Black",
pch = 16)

# export to pdf
dev.copy2pdf(file   = file.path(fdir, "mvda_7_lr_llh.pdf"),
             width  = 5,
             height = 5)
```

```{r, echo = FALSE, out.width = "70%"}
knitr::include_graphics("7_Abbildungen/mvda_7_lr_llh.pdf")
```

# Logistische Regression | Parameterlernen
\footnotesize
\begin{theorem}[Gradientverfahren der Logistischen Regression]
\normalfont
\justifying
$p(y)$ sei das Modell einer Logistischen Regression und $\{(x^{(i)},y^{(i)})\}_{i=1}^n$
sei ein entsprechender Trainingsdatensatz. Dann kann eine Maximum Likelihood Schätzer
$\hat{\beta}$ für den Parametervektor $\beta$ des LRM durch folgendes Gradientenverfahren
gewonnen werden:
\begin{itemize}
\item[(0)] Wähle $\beta^0 \in \mathbb{R}^{}, \alpha > 0, \delta > 0$
\item[(1)] Für $k = 0,1,2,...$ bis zur Konvergenz setze
\begin{equation}
\beta^{(k+1)} := \beta^{(k)} + \alpha \nabla \ell(\beta^{(k)}).
\end{equation}
\end{itemize}
wobei $\nabla \ell\left(\beta^k\right)$ den Gradienten der Log Likelihood Funktion
der Logistischen Regression bezeichnet und die Form
\begin{equation}
\nabla \ell(\beta)
=
\begin{pmatrix}
\frac{\partial}{\partial \beta_1} \ell(\beta) 	\\
\frac{\partial}{\partial \beta_2} \ell(\beta) 	\\
\vdots 											\\
\frac{\partial}{\partial \beta_m} \ell(\beta) 	\\
\end{pmatrix}
=
\begin{pmatrix}
\sum_{i=1}^n (y^{(i)} - f(x^{{(i)}^T} \beta ))x_1^{(i)} 	\\
\sum_{i=1}^n (y^{(i)} - f(x^{{(i)}^T} \beta ))x_2^{(i)} 	\\
\vdots 													    \\
\sum_{i=1}^n (y^{(i)} - f(x^{{(i)}^T} \beta ))x_m^{(i)} 	\\
\end{pmatrix}
\end{equation}
\end{theorem}

Bemerkungen

* Für einen Beweis verweisen wir auf den Appendix.

# Logistische Regression | Parameterlernen

\vspace{2mm}
\footnotesize
Bemerkungen (fortgeführt)

* Das reine Gradientenverfahren zum Lernen der Parameter eines LR Modells ist recht instabil.
* Iteratively Weighted Least Squares Verfahren werden zur ML Schätzung in GLMs bevorzugt [@green_1984].
* IWLS Verfahren nutzen Gradienten und Hesse-Matrix ähnlich wie Gauss-Newton Verfahren.
* R implementiert in der `glm()` ein IWLS Verfahren.

\vspace{2mm}
```{r}
lr        = glm(y ~ x[2,], family = 'binomial')          # generalized linear model fit
beta_hat  = lr$coefficients                              # Parametervektorschätzer
```

```{r, eval = F, echo = F}
graphics.off()
fdir        =  file.path(getwd(), "7_Abbildungen")
dev.new()
par(
family      = "sans",
mfcol       = c(1,1),
pty         = "s",
bty         = "l",
lwd         = 1,
las         = 1,
mgp         = c(2,1,0),
xaxs        = "i",
yaxs        = "i",
font.main   = 1,
cex         = 1.3,
cex.main    = 1.1)
contour(
beta_1,
beta_2,
ell,
col    = hcl.colors(20, "YlOrRd"),
levels = round(seq(-20,0,len = 15), digits = 1),
ylim   = c(0,5),
xlab   = TeX("$\\beta_1$"),
ylab   = TeX("$\\beta_2$"),
main   = "Parametervektorschätzer")
points(
beta_hat[1],
beta_hat[2],
col = "Black",
pch = 16)

# export to pdf
dev.copy2pdf(file   = file.path(fdir, "mvda_7_lr_schätzung.pdf"),
             width  = 5,
             height = 5)
```

```{r, echo = FALSE, out.width = "45%"}
knitr::include_graphics("7_Abbildungen/mvda_7_lr_schätzung.pdf")
```


# Logistische Regression | Anwendungsbeispiel
\textcolor{darkblue}{Prädiktion des Studienerfolgs}
\small

Nach @rudolf_2020 Kapitel 4

Datensatz zum Verhältnis psychologischer Diagnostik und Studienerfolg

$n = 30$ Studierende naturwissenschaftlicher Studiengänge

Featurevektor $x \in \mathbb{R}^4$

* $x_1$ Intelligenztestscore
* $x_2$ Mathematiktestscore
* $x_3$ Gewissenhaftigkeitscore
* $x_4$ Verträglichkeitscore

Label $y \in \{0,1\}$

* 0: ungenügend (Studienabbruch aufgrund nicht bestandener Prüfungen)
* 1: gut (Abschlussnote besser als 2.5)


# Logistische Regression | Anwendungsbeispiel
Parameterlernen, Prädiktion und lineare Diskriminanzfunktion

\vspace{2mm}
\tiny
\setstretch{1}
```{r}
library(matlib)                                                               # Matrixtools
D            = read.table(file.path(getwd(), "7_Daten", "studienerfolg.csv")) # Datensatz
x            = as.matrix(D[1:2,])                                             # Featureselektion
y            = as.matrix(D[5,])                                               # Label
D            = rbind(x,y)                                                     # Featureselected Datensatz
n            = ncol(x)                                                        # Datensatzgröße
m            = nrow(x)                                                        # Featurevektordimensionalität
lr           = glm(t(y) ~ t(x), family = 'binomial')                            # generalized linear model fit
beta_hat     = as.matrix(lr$coefficients, nrow = m + 1)                       # Parameterschätzung
w_0_hat      = beta_hat[1]                                                    # \hat{w}
w_hat        = beta_hat[2:(m+1)]                                              # \hat{w_0}
x_1          = seq(min(x[1,]), max(x[1,]), len = 1e2)                         # x_1
x_2_hat      = -(w_hat[1]/w_hat[2])*x_1 - (w_0_hat/w_hat[2])                  # \hat{h}
x_tilde      = rbind(1, x)
p_y          = 1/(1+exp(-t(x_tilde) %*% beta_hat))
delta        = as.numeric(p_y >= 0.5)
cat("Accuracy: ", mean(delta == y))
```

# Logistische Regression | Anwendungsbeispiel
```{r, eval = F, echo = F}
graphics.off()
fdir        =  file.path(getwd(), "7_Abbildungen")
dev.new()
par(
family      = "sans",
mfcol       = c(1,1),
pty         = "s",
bty         = "l",
lwd         = 1,
las         = 1,
mgp         = c(2,1,0),
xaxs        = "i",
yaxs        = "i",
font.main   = 1,
cex         = 1,
cex.main    = 1)

# N(\mu_0_hat,\Sigma_hat)
plot(
D[1,D[3,] == 0],
D[2,D[3,] == 0],
col = "White",
bg  = "Red",
pch = 21,
type = "p",
xlim = c(10,100),
ylim = c(0,100),
xlab = "Intelligenztest (X1)",
ylab = "Mathematiktest (X2)")


# Daten y^{(i)} = 1
points(
D[1,D[3,] == 1],
D[2,D[3,] == 1],
col = "White",
bg  = "Blue",
pch = 21)

# Diskriminanfunktionen
lines(x_1,x_2_hat, lty = 2)

dev.copy2pdf(
file        = file.path(fdir, "mvda_7_lr_anwendungsbeispiel_parameterlernen.pdf"),
width       = 5,
height      = 5)
```

\vspace{1mm}
Parameterlernen und lineare Diskriminanzfunktion

\vspace{2mm}
```{r, echo = FALSE, out.width = "60%"}
knitr::include_graphics("7_Abbildungen/mvda_7_lr_anwendungsbeispiel_parameterlernen.pdf")
```

# Logistische Regression | Anwendungsbeispiel
\vspace{1mm}
Logistische Regression | Leave-One-Out Cross-Validation, $m = 2$
\vspace{2mm}

\tiny
\setstretch{1}
```{r}
# Datensatz
D                = read.table(file.path(getwd(), "7_Daten", "studienerfolg.csv"))
x                = as.matrix(D[1:2,])
y                = as.matrix(D[5,])
D                = rbind(x,y)
K                = ncol(D)
p_y              = matrix(rep(NaN, ncol(y)), nrow = 1)
delta            = matrix(rep(NaN, ncol(y)), nrow = 1)

# K-fache Leave-One-Out Cross-Validation
for(k in 1:K){

    # Datensatzpartition
    x_train      = as.matrix(x[,-k])
    y_train      = as.matrix(y[,-k])
    x_test       = as.matrix(x[, k])
    y_test       = as.matrix(y[, k])

    # Trainingsdatensatz-basiertes Parameterlernen
    n            = ncol(x_train)
    m            = nrow(x_train)
    lr           = glm(y_train ~ t(x_train), family = 'binomial')
    beta_hat     = as.matrix(lr$coefficients, nrow = m + 1)

    # Prädiktion
    x_test_tilde = rbind(1, x_test)
    p_y[k]       = 1/(1+exp(-t(x_test_tilde) %*% beta_hat))
    delta[k]     = as.numeric(p_y[k] >= 0.5)
}
cat("Accuracy: ", mean(delta == y))
```

# Logistische Regression | Anwendungsbeispiel
\vspace{1mm}
Logistische Regression | Leave-One-Out Cross-Validation, $m = 2$

\tiny
\setstretch{0.8}
```{r, echo = F}
# data tabulation
P = data.frame(rbind(1:ncol(x), x, p_y, delta, y))
colnames(P) = 1:ncol(x)
rownames(P) = c("k", "x_1", "x_2", "p(y = 1)", "delta(x)", "y")
knitr::kable(t(P), "pipe", digits = 1)
```
\small
Prediction Accuracy = 0.73.

# Logistische Regression | Anwendungsbeispiel
\vspace{1mm}
Logistische Regression | Leave-One-Out Cross-Validation, $m = 3$
```{r, echo = F, results = F}
# Datensatz
D                = read.table(file.path(getwd(), "7_Daten", "studienerfolg.csv"))
x                = as.matrix(D[1:3,])
y                = as.matrix(D[5,])
D                = rbind(x,y)
K                = ncol(D)
p_y              = matrix(rep(NaN, ncol(y)), nrow = 1)
delta            = matrix(rep(NaN, ncol(y)), nrow = 1)

# K-fache Leave-One-Out Cross-Validation
for(k in 1:K){

    # Datensatzpartition
    x_train      = as.matrix(x[,-k])
    y_train      = as.matrix(y[,-k])
    x_test       = as.matrix(x[, k])
    y_test       = as.matrix(y[, k])

    # Trainingsdatensatz-basiertes Parameterlernen
    n            = ncol(x_train)
    m            = nrow(x_train)
    lr           = glm(y_train ~ t(x_train), family = 'binomial')          # generalized linear model fit
    beta_hat     = as.matrix(lr$coefficients, nrow = m + 1)

    # Prädiktion
    x_test_tilde = rbind(1, x_test)
    p_y[k]       = 1/(1+exp(-t(x_test_tilde) %*% beta_hat))
    delta[k]     = as.numeric(p_y[k] >= 0.5)
}
cat("Accuracy: ", mean(delta == y))
```

\tiny
\setstretch{0.8}
```{r, echo = F}
# data tabulation
P = data.frame(rbind(1:ncol(x), x, p_y, delta, y))
colnames(P) = 1:ncol(x)
rownames(P) = c("k", "x_1", "x_2", "x_3", "p(y = 1)", "delta(x)", "y")
knitr::kable(t(P), "pipe", digits = 1)
```
\small
Prediction Accuracy = 0.73.

# Logistische Regression | Anwendungsbeispiel
\vspace{1mm}
Logistische Regression | Leave-One-Out Cross-Validation, $m = 4$
```{r, echo = F, results = F}
# Datensatz
D                = read.table(file.path(getwd(), "7_Daten", "studienerfolg.csv"))
x                = as.matrix(D[1:4,])
y                = as.matrix(D[5,])
D                = rbind(x,y)
K                = ncol(D)
p_y              = matrix(rep(NaN, ncol(y)), nrow = 1)
delta            = matrix(rep(NaN, ncol(y)), nrow = 1)

# K-fache Leave-One-Out Cross-Validation
for(k in 1:K){

    # Datensatzpartition
    x_train      = as.matrix(x[,-k])
    y_train      = as.matrix(y[,-k])
    x_test       = as.matrix(x[, k])
    y_test       = as.matrix(y[, k])

    # Trainingsdatensatz-basiertes Parameterlernen
    n            = ncol(x_train)
    m            = nrow(x_train)
    lr           = glm(y_train ~ t(x_train), family = 'binomial')          # generalized linear model fit
    beta_hat     = as.matrix(lr$coefficients, nrow = m + 1)

    # Prädiktion
    x_test_tilde = rbind(1, x_test)
    p_y[k]       = 1/(1+exp(-t(x_test_tilde) %*% beta_hat))
    delta[k]     = as.numeric(p_y[k] >= 0.5)
}
cat("Accuracy: ", mean(delta == y))
```

\tiny
\setstretch{0.8}
```{r, echo = F}
# data tabulation
P = data.frame(rbind(1:ncol(x), x, p_y, delta, y))
colnames(P) = 1:ncol(x)
rownames(P) = c("k", "x_1", "x_2", "x_3", "x_4",  "p(y = 1)", "delta(x)", "y")
knitr::kable(t(P), "pipe", digits = 1)
```
\small
Prediction Accuracy = 0.77.


#
\vfill
\setstretch{2.4}
\large

Vorbemerkungen

Lineare Diskriminanzanalyse

Logistische Regression

**Selbstkontrollfragen**

Appendix

# Selbstkontrollfragen

\footnotesize
\begin{enumerate}
\item Definieren Sie den Begriff des Binären Klassifikationsdatensatzes.
\item Definieren Sie die Bernoulli Verteilung.
\item Definieren Sie das Modell der Linearen Diskriminanzanalyse.
\item Erläutern Sie die Erzeugung von Daten unter dem Modell der Linearen Diskriminanzanalyse.
\item Erläutern Sie den Begriff der Inferenz im Modell der Linearen Diskriminanzanalyse.
\item Definieren Sie die Klassifikationsregel der Linearen Diskriminanzanalyse.
\item Wie werden die Parameter eines Linearen Diskriminanzanalysemodells gelernt?
\item Erläutern Sie den Ablauf einer Leave-One-Out Cross-Validation mithilfe der Linearen Diskriminanzanalyse.
\item Definieren Sie die standard logistic function.
\item Definieren Sie das Modell der Logistischen Regression.
\item Erläutern Sie die Erzeugung von Daten unter dem Modell der Logistischen Regression.
\item Warum gibt es im Modell der Logistischen Regression keine Inferenz?
\item Definieren Sie die Klassifikationsregel der Logistischen Regression.
\item Wie werden die Parameter eines Logistischen Regressionsmodells gelernt?
\item Erläutern Sie den Ablauf einer Leave-One-Out Cross-Validation mithilfe der Logistischen Regression.
\end{enumerate}

# 
Vorbemerkungen

Lineare Diskriminanzanalyse

Logistische Regression

Selbstkontrollfragen

**Appendix**
\vfill

# Appendix
\footnotesize
\underline{Beweis des LDA Inferenz Theorems}

Wir halten zunächst fest, dass
\begin{align}
\begin{split}
p(y = 1|x)
& = \frac{p(x, y = 1)}{p(x,y = 0) + p(x,y = 1)} 															\\
& = \frac{\frac{p(x, y = 1)}{p(x, y = 1)}}{\frac{p(x,y = 0)}{p(x,y = 1)} + \frac{p(x,y = 1)}{p(x,y = 1)}} 	\\
& = \frac{1}{1 + \frac{p(x,y = 0)}{p(x,y = 1)}} 															\\
& = \frac{1}{1 + \exp\left(\ln\left(\frac{p(x,y = 0)}{p(x,y = 1)} \right)\right)} 							\\
& = \frac{1}{1 + \exp\left(-\ln\left(\frac{p(x,y = 1)}{p(x,y = 0)} \right)\right)} 							\\
\end{split}
\end{align}
Mit der Definition des LDA Modells gilt dann
\begin{equation}
p(x,y = 1) = p(x|y = 1)p(y = 1) = N(x; \mu_1, \Sigma) \mu
\end{equation}
und
\begin{equation}
p(x,y = 0) = p(x|y = 0)p(y = 0) = N(x; \mu_0, \Sigma) (1 - \mu)
\end{equation}


# Appendix
\footnotesize
\underline{Beweis des LDA Inferenz Theorems (fortgeführt)}

Wir erhalten also
\tiny
\begin{align*}
\begin{split}
& = \ln \left(\frac{p(x,y = 1)}{p(x,y = 0)}\right) \\
& = \ln \left(\frac{N(x;\mu_1,\Sigma)\mu}{N(x;\mu_0,\Sigma)(1-\mu)}\right) \\
& = \ln \left(N(x;\mu_1,\Sigma)\mu\right) - \ln \left(N(x;\mu_0,\Sigma)(1 - \mu)\right)\\
& = \ln(\mu) + \ln N(x;\mu_1,\Sigma) - \ln (1 - \mu) - \ln N(x;\mu_0,\Sigma)  \\
& =
\ln \mu - \ln (1 - \mu)
- \frac{m}{2}\ln 2\pi - \ln |\Sigma| - \frac{1}{2}(x - \mu_1)^T\Sigma^{-1}(x-\mu_1) \\
& \hspace{20mm}
+ \frac{m}{2}\ln 2\pi + \ln |\Sigma| + \frac{1}{2}(x - \mu_0)^T\Sigma^{-1}(x-\mu_0) \\
& =
-\frac{1}{2}(x - \mu_1)^T\Sigma^{-1}(x-\mu_1)
+\frac{1}{2}(x - \mu_0)^T\Sigma^{-1}(x-\mu_0)
+ \ln \mu - \ln (1 - \mu)
\\
& =
-\frac{1}{2}x^T\Sigma^{-1}x + x^T \Sigma^{-1}\mu_1 -\frac{1}{2} \mu_1^T \Sigma^{-1}\mu_1
+\frac{1}{2}x^T\Sigma^{-1}x - x^T \Sigma^{-1}\mu_0 +\frac{1}{2} \mu_0^T \Sigma^{-1}\mu_0
+ \ln \left(\frac{\mu}{1 -\mu}\right) \\
& =
 \frac{1}{2} \mu_0^T \Sigma^{-1}\mu_0
-\frac{1}{2} \mu_1^T \Sigma^{-1}\mu_1
- x^T \Sigma^{-1}(\mu_0 - \mu_1)
+ \ln \left(\frac{\mu}{1 -\mu}\right) \\
& = \left(\begin{matrix}
1 &  x^T
\end{matrix} \right)
\left(\begin{matrix}
\frac{1}{2}\left(\mu_0^T \Sigma^{-1}\mu_0 - \mu_1^T \Sigma^{-1}\mu_1\right)
+ \ln \left(\frac{\mu}{1 -\mu}\right)
\\
-\Sigma^{-1}(\mu_0 - \mu_1)
\end{matrix}\right) =: \tilde{x}^T\beta
\end{split}
\end{align*}


# Appendix
\footnotesize
\underline{Beweis des LDA Diskriminanzfunktion Theorems}

Wir zeigen die Äquivalenz von $\delta(x) = 0$ und $f(x) \ge 0$ womit der Rest
des Theorems sofort folgt. Es ergibt sich
\begin{align*}
\begin{split}
\delta(x) & = 0 \\
\Leftrightarrow
p(y = 0|x) & \ge p(y = 1|x) \\
\Leftrightarrow
\frac{p(y = 0|x)}{p(y = 1|x)} & \ge 1 \\
\Leftrightarrow
\ln \left(\frac{p(y = 0|x)}{p(y = 1|x)}  \right) & \ge \ln 1 \\
\Leftrightarrow
\ln \left(\frac{1 - \frac{1}{1 + \exp(-\tilde{x}^T\beta)}}{\frac{1}{1 + \exp(-\tilde{x}^T\beta)}}  \right) & \ge 0 \\
\Leftrightarrow
\ln \left(\frac{\frac{1 + \exp(-\tilde{x}^T\beta)}{1 + \exp(-\tilde{x}^T\beta)} - \frac{1}{1 + \exp(-\tilde{x}^T\beta)}}{\frac{1}{1 + \exp(-\tilde{x}^T\beta)}}  \right) & \ge 0 \\
\Leftrightarrow
\ln \left(\frac{\frac{\exp(-\tilde{x}^T\beta)}{1 + \exp(-\tilde{x}^T\beta)}}{\frac{1}{1 + \exp(-\tilde{x}^T\beta)}}  \right) & \ge 0 \\
\Leftrightarrow
\ln \left(\exp(-\tilde{x}^T\beta)\right) & \ge 0 \\
\end{split}
\end{align*}

# Appendix
\footnotesize
\underline{Beweis des LDA Diskriminanzfunktion Theorems (fortgeführt)}

Es ergibt sich also
\begin{align*}
\begin{split}
\delta(x) & = 0 \\
\Leftrightarrow
-\tilde{x}^T\beta & \ge 0 \\
\Leftrightarrow
-\begin{pmatrix}
1 & x^T
\end{pmatrix}
\begin{pmatrix}
\frac{1}{2}\mu_0\Sigma^{-1}\mu_0 - \ln(1 - \mu) -\frac{1}{2}\mu_1 \Sigma \mu_1 + \ln \mu \\
-\Sigma^{-1}(\mu_0 - \mu_1)
\end{pmatrix}
& \ge 0 \\
\Leftrightarrow
x^T\Sigma^{-1}(\mu_0 - \mu_1) + \frac{1}{2}\mu_1 \Sigma \mu_1 + \ln (1- \mu) - \frac{1}{2}\mu_0\Sigma^{-1}\mu_0 - \ln \mu
& \ge 0 \\
\Leftrightarrow
\left(x^T\Sigma^{-1}(\mu_0 - \mu_1)\right)^T + \frac{1}{2}\mu_1 \Sigma \mu_1 + \ln (1- \mu) - \frac{1}{2}\mu_0\Sigma^{-1}\mu_0 - \ln \mu
& \ge 0 \\
\Leftrightarrow
(\mu_0 - \mu_1)^T\Sigma^{-1}x + \frac{1}{2}\left(\mu_1 - \mu_0\right)^T \Sigma^{-1} \left(\mu_1 - \mu_0\right)
+ \ln\left(\frac{1 -\mu}{\mu} \right)
& \ge 0 \\
\Leftrightarrow :
w^Tx + w_0 & \ge 0 \\
\end{split}
\end{align*}



# Appendix
\footnotesize
\underline{Beweis des LDA Maximum Likelihood Schätzer Theorems}

\tiny
\noindent (1) Formulierung der Log Likelihood Funktion

\begin{align*}
\begin{split}
& \ell(\mu,\mu_0,\mu_1,\Sigma) :=  \\
& \ln \prod_{i=1}^n p\left(x^{(i)},y^{(i)}\right) \\
& = \sum_{i=1}^n \ln p\left(x^{(i)},y^{(i)}\right) \\
& = \sum_{i=1}^n \ln p\left(x^{(i)}|y^{(i)}\right)p\left(y^{(i)}\right) \\
& = \sum_{i=1}^n \ln p\left(x^{(i)}|y^{(i)}\right) + \ln p\left(y^{(i)}\right) \\
& = \sum_{i=1}^n \ln \left(N(x^{(i)}; \mu_0,\Sigma)\right)^{1 - y^{(i)}}\left(N(x^{(i)}; \mu_1,\Sigma)\right)^{y^{(i)}}
     + \ln \left(\mu^{y^{(i)}}(1 - \mu)^{1 - \mu^{y^{(i)}}}\right) \\
\end{split}
\end{align*}

# Appendix
\tiny
\begin{align*}
\begin{split}
& \ell(\mu,\mu_0,\mu_1,\Sigma) = \\
& = \sum_{i=1}^n
\left(1 - y^{(i)}\right) \ln N\left(x^{(i)}; \mu_0,\Sigma\right)
               + y^{(i)} \ln N\left(x^{(i)}; \mu_1,\Sigma\right)
			  +  y^{(i)} \ln \mu
			  + \left(1 - y^{(i)}\right)\ln (1- \mu) \\
& = \quad  \sum_{i=1}^n \left(1 - y^{(i)}\right) \left(-\frac{n}{2} \ln 2\pi -\frac{1}{2} \ln |\Sigma|
-  \frac{1}{2}\left(x^{(i)} - \mu_0\right)^T \Sigma^{-1}\left(x^{(i)} - \mu_0 \right)\right) \\
& \quad +  \sum_{i=1}^n  y^{(i)} \left(-\frac{n}{2} \ln 2\pi -\frac{1}{2} \ln |\Sigma|
-   \frac{1}{2}\left(x^{(i)} - \mu_1\right)^T \Sigma^{-1}\left(x^{(i)} - \mu_1 \right)\right) \\
& \quad + \sum_{i=1}^n y^{(i)} \ln \mu  + \sum_{i=1}^n \left(1 - y^{(i)} \right) \ln (1 - \mu).
\end{split}
\end{align*}


# Appendix
\footnotesize
\underline{Beweis des LDA Maximum Likelihood Schätzer Theorems (fortgeführt)}

\noindent (2) Gradient der Log Likelihood Funktion

\tiny
Der Gradient der Log Likelihood Funktion des LDA Modells besteht aus den
partiellen Ableitungen von $\ell$ hinsichtlich von $\mu,\mu_0,\mu_1$ und $\Sigma$.
Wie unten gezeigt ergibt er sich als

\begin{align*}\label{eq:lda_gradient}
\renewcommand{\arraystretch}{1.5}
\begin{split}
\nabla \ell\left(\mu,\mu_0,\mu_1,\Sigma\right)
& =
\left(\begin{matrix}
\frac{\partial}{\partial \mu}   \ell\left(\mu,\mu_0,\mu_1,\Sigma\right) \\
\frac{\partial}{\partial \mu_0}   \ell\left(\mu,\mu_0,\mu_1,\Sigma\right) \\
\frac{\partial}{\partial \mu_1}   \ell\left(\mu,\mu_0,\mu_1,\Sigma\right) \\
\frac{\partial}{\partial \Sigma}   \ell\left(\mu,\mu_0,\mu_1,\Sigma\right) \\
\end{matrix}\right) \\
& =
\left(\begin{matrix}
\frac{1}{\mu}\sum_{i=1}^n 1_{\lbrace y^{(i)} = 1 \rbrace}  -
\frac{1}{1-\mu}\sum_{i=1}^n 1_{\lbrace y^{(i)} = 0 \rbrace} \\
-\frac{1}{2}\sum_{i=1}^n 1_{\lbrace y^{(i)} = 0 \rbrace} \left(\left(x^{(i)} - \mu_0\right)^T \Sigma^{-1}\right) \\
-\frac{1}{2}\sum_{i=1}^n 1_{\lbrace y^{(i)} = 1 \rbrace} \left(\left(x^{(i)} - \mu_1\right)^T \Sigma^{-1}\right) \\
\frac{n}{2}\Sigma - \frac{1}{2} \sum_{i=1}^n
\left(x^{(i)} - \mu_{1_{\lbrace y^{(i)} = 1 \rbrace}}\right) \left(x^{(i)} - \mu_{1_{\lbrace y^{(i)} = 1 \rbrace}} \right)^T
\end{matrix}\right).
\end{split}
\end{align*}

# Appendix
\footnotesize
\underline{Beweis des LDA Maximum Likelihood Schätzer Theorems (fortgeführt)}

\tiny
Für die partielle Ableitung hinsichtlich $\mu_0$ und ähnlich für $\mu_1$ ergibt sich
\begin{align*}
\begin{split}
\frac{\partial}{\partial \mu_0} \ell(\mu,\mu_0,\mu_1, \Sigma)
& = \frac{\partial}{\partial \mu_0}
\sum_{i=1}^n \left(1 - y^{(i)}\right) \left(-\frac{n}{2} \ln 2\pi -\frac{1}{2} \ln |\Sigma|
-  \frac{1}{2}\left(x^{(i)} - \mu_0\right)^T \Sigma^{-1}\left(x^{(i)} - \mu_0 \right)\right) \\
& = \sum_{i=1}^n \left(1 - y^{(i)}\right) \frac{\partial}{\partial \mu_0} \left(-\frac{n}{2} \ln 2\pi -\frac{1}{2} \ln |\Sigma| -  \frac{1}{2}\left(x^{(i)} - \mu_0\right)^T \Sigma^{-1}\left(x^{(i)} - \mu_0 \right)\right) \\
& = \sum_{i=1}^n \left(1 - y^{(i)}\right) \left(- \frac{1}{2} \frac{\partial}{\partial \mu_0} \left(x^{(i)} - \mu_0\right)^T \Sigma^{-1}\left(x^{(i)} - \mu_0 \right)\right) \\
& = \sum_{i=1}^n \left(1 - y^{(i)}\right) \left( - \frac{1}{2} \left(x^{(i)} - \mu_0\right)^T \Sigma^{-1} \right) \\
& = -\frac{1}{2}\sum_{i=1}^n \left(1 - y^{(i)}\right) \left( \left(x^{(i)} - \mu_0\right)^T \Sigma^{-1} \right). \\
& = -\frac{1}{2}\sum_{i=1}^n 1_{\{y^{(i)} = 0\}} \left( \left(x^{(i)} - \mu_0\right)^T \Sigma^{-1} \right). \\
\end{split}
\end{align*}

# Appendix
\footnotesize
\underline{Beweis des LDA Maximum Likelihood Schätzer Theorems (fortgeführt)}

\tiny
Für die partielle Ableitung hinsichtlich $\Sigma$ ergibt sich
\begin{align}
\begin{split}
& \frac{\partial}{\partial \Sigma} \ell(\mu,\mu_1,\mu_0,\Sigma) \\
& = \quad \frac{\partial}{\partial \Sigma}
     \sum_{i=1}^n \left(1 - y^{(i)}\right) \left(-\frac{n}{2} \ln 2\pi -\frac{1}{2} \ln |\Sigma|
      -  \frac{1}{2}\left(x^{(i)} - \mu_0\right)^T \Sigma^{-1}\left(x^{(i)} - \mu_0 \right)\right) \\
& \quad +   \frac{\partial}{\partial \Sigma}
	\sum_{i=1}^n  y^{(i)}  \left(-\frac{n}{2} \ln 2\pi -\frac{1}{2} \ln |\Sigma|
-  \frac{1}{2}\left(x^{(i)} - \mu_1\right)^T \Sigma^{-1}\left(x^{(i)} - \mu_1 \right)\right) \\
& = \quad \sum_{i=1}^n \left(1 - y^{(i)}\right) \left(-\frac{1}{2} \frac{\partial}{\partial \Sigma} \ln |\Sigma|
      -  \frac{1}{2}\frac{\partial}{\partial \Sigma} \left(x^{(i)} - \mu_0\right)^T \Sigma^{-1}\left(x^{(i)} - \mu_0 \right)\right) \\
& \quad +  \sum_{i=1}^n y^{(i)} \left( -\frac{1}{2} \frac{\partial}{\partial \Sigma} \ln |\Sigma|
-  \frac{1}{2}\frac{\partial}{\partial \Sigma}\left(x^{(i)} - \mu_1\right)^T \Sigma^{-1}\left(x^{(i)} - \mu_1 \right)\right) \\
\end{split}
\end{align}

# Appendix
\footnotesize
\underline{Beweis des LDA Maximum Likelihood Schätzer Theorems (fortgeführt)}

\tiny
... und damit
\begin{align}
\begin{split}
& \frac{\partial}{\partial \Sigma} \ell(\mu,\mu_1,\mu_0,\Sigma)
 = \quad \sum_{i=1}^n \left(1 - y^{(i)}\right) \left(-\frac{1}{2} \Sigma
      -  \frac{1}{2} \left(x^{(i)} - \mu_0\right) \left(x^{(i)} - \mu_0 \right)^T\right) \\
& \quad +  \sum_{i=1}^n  y^{(i)}  \left( -\frac{1}{2} \Sigma
-  \frac{1}{2}\left(x^{(i)} - \mu_1\right)\left(x^{(i)} - \mu_1 \right)^T\right) \\
& = \frac{n}{2}\Sigma  -\frac{1}{2} \sum_{i=1}^n
	\left(x^{(i)} - \mu_{1_{\lbrace y^{(i)} = 1 \rbrace}}\right) \left(x^{(i)} - \mu_{1_{\lbrace y^{(i)} = 1 \rbrace}} \right)^T.
\end{split}
\end{align}


# Appendix
\footnotesize
\underline{Beweis des LDA Maximum Likelihood Schätzer Theorems (fortgeführt)}

\tiny
Für die partielle Ableitung hinsichtlich $\mu$ ergibt sich
\begin{align*}
\begin{split}
\frac{\partial}{\partial \mu} \ell(\mu,\mu_1,\mu_0,\Sigma)
& =  \frac{\partial}{\partial \mu}
\left(\sum_{i=1}^n  y^{(i)} \ln \mu  +
\sum_{i=1}^n \left(1 - y^{(i)}\right) \ln (1 - \mu) \right) \\
& = \sum_{i=1}^n  y^{(i)} \frac{\partial}{\partial \mu} \ln \mu  +
\sum_{i=1}^n  \left(1 - y^{(i)}\right) \frac{\partial}{\partial \mu} \ln (1 - \mu) \\
& = \frac{1}{\mu}\sum_{i=1}^n 1_{\lbrace y^{(i)} = 1 \rbrace}  -
\frac{1}{1-\mu}\sum_{i=1}^n 1_{\lbrace y^{(i)} = 0 \rbrace}. \\
\end{split}
\end{align*}

\vspace{2mm}
\noindent (4) Auflösen der Maximum Likelihood Gleichungen
\vspace{2mm}

Nullsetzen der partiellen Ableitungen des Gradienten der Log Likelihood Funktion
und Auflösen der resultierenden Log Likelihood Gleichungen ergibt dann die
Maximum Likelihood Schätzer des LDA Modells.


# Appendix
\footnotesize
\underline{Beweis des LDA Maximum Likelihood Schätzer Theorems (fortgeführt)}
\tiny

Nullsetzen der ersten Gradientenkomponente ergibt
\begin{align*}
\begin{split}
\frac{1}{\hat{\mu}}\sum_{i=1}^n 1_{\lbrace y^{(i)} = 1 \rbrace}  - \frac{1}{1-\hat{\mu}}\sum_{i=1}^n 1_{\lbrace y^{(i)} = 0 \rbrace}
& = 0 \\
\Leftrightarrow
\frac{1}{\hat{\mu}}\sum_{i=1}^n y^{(i)} - \frac{1}{1-\hat{\mu}}\sum_{i=1}^n \left(1 - y^{(i)}\right)
& = 0 \\
\Leftrightarrow
\frac{1-\hat{\mu}}{\hat{\mu}}\sum_{i=1}^n y^{(i)} - \sum_{i=1}^n \left(1 - y^{(i)}\right)
& = 0 \\
\Leftrightarrow
\frac{1-\hat{\mu}}{\hat{\mu}}\sum_{i=1}^n y^{(i)} - n +  \sum_{i=1}^n  y^{(i)}
& = 0 \\
\Leftrightarrow
(1-\hat{\mu})\sum_{i=1}^n y^{(i)} - \hat{\mu} n + \hat{\mu}\sum_{i=1}^n  y^{(i)}
& = 0 \\
\end{split}
\end{align*}

# Appendix
\footnotesize
\underline{Beweis des LDA Maximum Likelihood Schätzer Theorems (fortgeführt)}

\tiny
... und weiter
\begin{align*}
\begin{split}
\Leftrightarrow
(1-\hat{\mu})\sum_{i=1}^n y^{(i)} - \hat{\mu} n + \hat{\mu}\sum_{i=1}^n  y^{(i)}
& = 0 \\
\Leftrightarrow
(1-\hat{\mu} + \hat{\mu})\sum_{i=1}^n y^{(i)}
& = \hat{\mu} n \\
\Leftrightarrow
\hat{\mu} n
& = \sum_{i=1}^n y^{(i)} \\
\Leftrightarrow
\hat{\mu}
& = \frac{1}{n}\sum_{i=1}^n 1_{\lbrace y^{(i)} = 1 \rbrace}. \\
\end{split}
\end{align*}


# Appendix
\footnotesize
\underline{Beweis des LDA Maximum Likelihood Schätzer Theorems (fortgeführt)}
\tiny

Nullsetzen der zweiten Gradientenkomponente ergibt
\begin{tiny}
\begin{align*}
\begin{split}
\sum_{i=1}^n \left(1 - y^{(i)} \right)\left(\left(x^{(i)} - \hat{\mu}_0 \right)^T \Sigma^{-1}\right)
& =
0 \\
\Leftrightarrow
\sum_{i=1}^n 1_{\lbrace y^{(i)} = 0\rbrace } \left(x^{(i)} - \hat{\mu}_0 \right)^T
& =
0 \\
\Leftrightarrow
\sum_{i=1}^n 1_{\lbrace y^{(i)} \rbrace } x^{(i)}  - \sum_{i=1}^n 1_{\lbrace y^{(i)} = 0 \rbrace} \hat{\mu}_0
& =
0 \\
\Leftrightarrow
\sum_{i=1}^n 1_{\lbrace y^{(i)} = 0 \rbrace} \hat{\mu}_0
& = \sum_{i=1}^n 1_{\lbrace y^{(i)} \rbrace } x^{(i)}
\\
\Leftrightarrow
\hat{\mu}_0 & =
\frac{1}{\sum_{i=1}^n 1_{\lbrace y^{(i)} = 0 \rbrace} } \sum_{i=1}^n 1_{\lbrace y^{(i)} \rbrace } x^{(i)}.
\end{split}
\end{align*}
\end{tiny}

Nullsetzen der dritten Gradientenkomponente ergibt dann in ähnlicher Weise den
Maximum Likelihood Schätzer  $\hat{\mu}_1$.

# Appendix
\footnotesize
\underline{Beweis des LDA Maximum Likelihood Schätzer Theorems (fortgeführt)}
\tiny

Nullsetzen der vierten Gradientenkomponente ergibt dann schließlich

\begin{align*}
\begin{split}
0 & = \frac{n}{2}\hat{\Sigma} - \frac{1}{2}
\sum_{i=1}^n
\left(x^{(i)} - \mu_{1_{\lbrace y^{(i)} = 1 \rbrace}}\right)
\left(x^{(i)} - \mu_{1_{\lbrace y^{(i)} = 1 \rbrace}} \right)^T
\\
\Leftrightarrow
n\hat{\Sigma}
& =
\sum_{i=1}^n
\left(x^{(i)} - \mu_{1_{\lbrace y^{(i)} = 1 \rbrace}}\right)
\left(x^{(i)} - \mu_{1_{\lbrace y^{(i)} = 1 \rbrace}} \right)^T \\
\hat{\Sigma}
& =
\frac{1}{n}
\sum_{i=1}^n
\left(x^{(i)} - \mu_{1_{\lbrace y^{(i)} = 1 \rbrace}}\right)
\left(x^{(i)} - \mu_{1_{\lbrace y^{(i)} = 1 \rbrace}} \right)^T \\
\end{split}.
\end{align*}


# Appendix
\footnotesize
\underline{Beweis des LR Gradientenverfahrens}

Um die $j$te partielle Ableitung der Log Likelihood Funktion zu bestimmen, halten
wir zunächst fest, dass sich die Ableitung der logistic function $f$ hinsichtlich $\eta$
zu
\begin{equation}\label{eq:deta_f}
\frac{d}{d\eta}f : \mathbb{R} \to \mathbb{R}, \eta \mapsto \frac{d}{d\eta}f(\eta) = f(\eta)(1 - f(\eta))
\end{equation}
ergibt. Dies kann wie folgt eingesehen werden:
\begin{align*}
\begin{split}
\frac{d}{d\eta}f(\eta)
& = \frac{d}{d\eta}\left({1 + \exp(-\eta)}\right)^{-1} \\
& = -\left({1 + \exp(-\eta)}\right)^{-2}\cdot \exp(-\eta)\cdot(-1) \\
& = \frac{\exp(-\eta)}{(1 + \exp(-\eta))^2} \\
& = \frac{1 + \exp(-\eta) - 1}{(1 + \exp(-\eta))^2} \\
& = \frac{1 + \exp(-\eta)}{(1 + \exp(-\eta))^2} - \frac{1}{(1 + \exp(-\eta))^2} \\
& = \frac{1}{1 + \exp(-\eta)} - \frac{1}{(1 + \exp(-\eta))^2} \\
& = \frac{1}{1 + \exp(-\eta)}\left(1 - \frac{1}{1 + \exp(-\eta)}\right) \\
& = f(\eta)(1 - f(\eta))
\end{split}
\end{align*}


# Appendix
\footnotesize
\underline{Beweis des LR Gradientenverfahrens (fortgeführt)}

Damit ergibt sich dann für $\frac{\partial}{\partial \beta_j} \ell, j = 1,...,m$:
\begin{align*}
\begin{split}
& \frac{\partial}{\partial \beta_j} \ell(\beta) \\
& = \frac{\partial}{\partial \beta_j}
\left(\sum_{i=1}^n y^{(i)} \ln \left(f\left(x^{(i)^T} \beta\right)\right)  + \left(1 - y^{(i)}\right) \ln \left(1 - f\left(x^{(i)^T}\beta\right)\right)\right) \\
& =
\sum_{i=1}^n y^{(i)}
\frac{\partial}{\partial \beta_j} \left(\ln \left(f\left(x^{(i)^T} \beta\right)\right)\right)
+ \left(1 - y^{(i)}\right) \frac{\partial}{\partial \beta_j}\left( \ln \left(1 - f\left(x^{(i)^T}\beta\right)\right)\right) \\
& =
\sum_{i=1}^n y^{(i)}
\frac{1}{f\left(x^{(i)^T} \beta\right)} \left(\frac{\partial}{\partial \beta_j}\left(f\left(x^{(i)^T} \beta\right)\right)\right)
+ \left(1 - y^{(i)}\right)
\frac{1}{1 - f\left(x^{(i)^T} \beta\right)}
\frac{\partial}{\partial \beta_j}\left(1 - f\left(x^{(i)^T}\beta\right)\right) \\
& =
\sum_{i=1}^n \left(y^{(i)}
\frac{1}{f\left(x^{(i)^T} \beta\right)}
- \left(1 - y^{(i)}\right)
\frac{1}{1 - f\left(x^{(i)^T} \beta\right)} \right)
\frac{\partial}{\partial \beta_j}\left(f\left(x^{(i)^T} \beta\right)\right) \\
\end{split}
\end{align*}

# Appendix
\footnotesize
\underline{Beweis des LR Gradientenverfahrens (fortgeführt)}

\tiny
\begin{align*}
\begin{split}
\frac{\partial}{\partial \beta_j} \ell(\beta)
& =
\sum_{i=1}^n \left(y^{(i)}
\frac{1}{f\left(x^{(i)^T} \beta\right)} -
\left(1 - y^{(i)}\right)
\frac{1}{1 - f\left(x^{(i)^T} \beta\right)} \right) \\
& \quad\quad \times
f\left(x^{(i)^T}\beta\right) \left(1 - f\left(x^{(i)^T}\beta\right)\right)
\frac{\partial}{\partial \beta_j}\left(x^{(i)^T}\beta\right) \\
& =
\sum_{i=1}^n \left(y^{(i)}
\frac{1}{f\left(x^{(i)^T} \beta\right)} -
\left(1 - y^{(i)}\right)
\frac{1}{1 - f\left(x^{(i)^T} \beta\right)} \right)
f\left(x^{(i)^T} \beta\right) \left(1 - f\left(x^{(i)^T}\beta\right)\right)x_j^{(i)} \\
& =
\sum_{i=1}^n \left(y^{(i)}
\frac{f\left(x^{(i)^T}\beta\right) \left(1 - f\left(x^{(i)^T}\beta\right)\right)}{f\left(x^{(i)^T} \beta\right)} -
\left(1 - y^{(i)}\right)
\frac{f\left(x^{(i)^T }\beta\right) \left(1 - f\left(x^{(i)^T}\beta\right)\right)}{1 - f\left(x^{(i)^T} \beta\right)} \right)x_j^{(i)} \\
& =
\sum_{i=1}^n \left(y^{(i)}
\left(1 - f\left(x^{(i)^T}\beta\right)\right) -
\left(1 - y^{(i)}\right) f\left(x^{(i)^T}\beta\right) \right) x_j^{(i)}\\
& =
\sum_{i=1}^n \left(y^{(i)} - y^{(i)}f\left(x^{(i)^T}\beta\right) -
f\left(x^{(i)^T}\beta\right) + y^{(i)} f\left(x^{(i)^T}\beta\right)\right) x_j^{(i)} \\
& =
\sum_{i=1}^n \left(y^{(i)} - f\left(x^{(i)^T}\beta\right) \right)x_j^{(i)}. \\
\end{split}
\end{align*}

# References
\footnotesize
