--- format: pdf fontsize: 11pt bibliography: ../MV_Referenzen_Seminar.bib include-in-header: ../MV_Header_Seminar.tex lang: de --- # (4) Multivariate Normalverteilungen Ziel dieser Sitzung ist es, die Begriffe des Zufallsvektors und der multivariaten Wahrscheinlichkeitsverteilung anhand von **R**-Abbildungen und Simulationen von bivariaten Normalverteilungen zu verdeutlichen. ## Konstruktion bivariater Normalverteilungen Wir besinnen uns zunächst der Konstruktion bivariater Normalverteilungen aus univariaten Standardnormalverteilungen. Der folgende **R**-Code veranschaulicht das dazugehörige Theorem aus der Vorlesung anhand der Parameterwerte $\mu_1 = 5$, $\mu_2 = 4$, $\sigma_1 = 1.5$, $\sigma_2 = 1.0$, $\rho = 0.9$. \tiny ```{r, eval = F, warning = F} # Parameterdefinitionen mu_1 = 5.0 # \mu_1 mu_2 = 4.0 # \mu_2 sig_1 = 1.5 # \sigma_1 sig_2 = 1.0 # \sigma_2 rho = 0.9 # \rho # Realisierungen der standardnormalverteilten ZVen nr = 100 # Anzahl Realisierungen zeta_1 = rnorm(nr) # \zeta_1 \sim N(0,1) zeta_2 = rnorm(nr) # \zeta_1 \sim N(0,1) # Evaluation von Realisierungen von \xi_1 und \xi_2 xi_1 = sig_1*zeta_1 + mu_1 # Realsierungen von zeta_1 xi_2 = sig_2*(rho*zeta_1 + sqrt(1-rho^2)*zeta_2) + mu_2 # Realsierungen von zeta_2 # Parameter der gemeinsamen Verteilung von \xi_1 und \xi_2 mu = matrix(c(mu_1, # \mu \in \mathbb{R}^2 mu_2), nrow = 2, byrow = TRUE) Sigma = matrix(c(sig_1^2, rho*sig_1*sig_2, # \Sigma \in \mathbb{R}^{2 x 2} rho*sig_1*sig_2, sig_2^2), nrow = 2, byrow = TRUE) # R-Pakete library(latex2exp) library(mvtnorm) # Abbildungsparameter 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 = 0.7, cex.main = 1.2) # Visualisierung x_min = 0 x_max = 10 x_res = 1e3 x_1 = seq(x_min, x_max, length.out = x_res) x_2 = seq(x_min, x_max, length.out = x_res) X = expand.grid(x_1,x_2) p = matrix(dmvnorm(as.matrix(X), mu, Sigma), nrow = x_res) contour(x_1, x_2, p, xlim = c(x_min,x_max), ylim = c(x_min,x_max), xlab = TeX("$x_1$"), ylab = TeX("$x_2$"), main = TeX("$(\\xi_1, \\xi_2)^T \\sim N(\\mu, \\Sigma)$"), nlevels = 5) points(xi_1, xi_2, pch = 21, col = "white", bg = "gray60", cex = 0.9) # Speicherung als PDF dev.copy2pdf( file = "./Abbildungen/konstruktion.pdf", width = 3, height = 3) ``` \normalsize Wir erhalten @fig-konstruktion, wobei die Realisierungen aus der bivariaten Normalverteilung erkennbar der durch das Theorem beschriebenen Wahrscheinlichkeitsverteilung folgen. ![Konstruktion bivariater Normalverteilungen.]("./Abbildungen/konstruktion.pdf"){#fig-konstruktion fig-align="center" width=80%} ## Wahrscheinlichkeitsdichtefunktionen bivariater Normalverteilungen Wir visualisieren anschließend die Wahrscheinlichkeitsdichtefunktionen (WDFen) verschiedener bivariater Normalverteilungen mithilfe des folgenden **R**-Codes. \tiny ```{r, eval = F, warning = F, message = F, results = "hide"} # R-Pakete library(mvtnorm) # multivariate Normalverteilungen library(latex2exp) # LaTeX-Code in Figure-Labels # Abbildungsparameter 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 = 0.7, cex.main = 1.2) # Ergebnisraumdefintion x_min = 0 # x_i Minimum x_max = 2 # x_i Maximumumum 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"), ")"))) # Schleife über Kovarianzmatrixparameter i = 1 for (Sigma in S){ # Auswertung der Wahrscheinlichkeitsdichtefunktion p = matrix(dmvnorm(as.matrix(X), mu, Sigma), # Matrixkonversion des von nrow = x_res) # dmvnorm() ausgegebenen Vektors # Visualisierung als Konturplot contour(x_1, x_2, p, xlim = c(x_min,x_max), ylim = c(x_min,x_max), xlab = TeX("$x_1$"), ylab = TeX("$x_2$"), nlevels = 5) text(1, 2.2, L[[i]], xpd = TRUE) i = i + 1 } # Speicherung als PDF dev.copy2pdf( file = "./Abbildungen/mvnwdf.pdf", width = 8, height = 4) dev.off() ``` \newpage \normalsize Wir erhalten @fig-mvnwdf, wobei sich die Matrix im Titel der Unterabbildungen auf den jeweiligen Kovarianzmatrixparameter bezieht. ![WDFen bivariater normalverteilter Zufallsvektoren.]("./Abbildungen/mvnwdf.pdf"){#fig-mvnwdf fig-align="center" width=100%} ## Realisierungen aus bivariaten Normalverteilungen Als nächstes wollen wir unabhängig und identische verteilte Realisierungen von bivariaten Zufallsvektoren gewinnen und visualisieren, die den oben dargestellten Normalverteilungen folgen. Dazu gebrauchen wir folgenden **R**-Code. \tiny ```{r, eval = F, warning = F, message = F, results = "hide"} # R-Pakete library(mvtnorm) library(latex2exp) # Abbildungsparameter 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 = 0.7, cex.main = 1.2) # 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"), ")"))) # Schleife über Kovarianzmatrixparameter i = 1 for (Sigma in S){ # 200 Realisierungen des Zufallsvektors samples = rmvnorm(n = 200, mu, Sigma) # Visualisierung plot(samples, xlim = c(0,2), ylim = c(0,2), xlab = TeX("$x_1$"), ylab = TeX("$x_2$"), pch = 21, col = "white", bg = "gray60", cex = 1.5) text(1, 2.2, L[[i]], xpd = TRUE) i = i + 1 } # Speicherung als PDF dev.copy2pdf( file = "./Abbildungen/rmvnorm.pdf", width = 8, height = 4) dev.off() ``` \normalsize Wir erhalten @fig-rmvnorm, wobei sich die Matrix im Titel der Unterabbildungen wieder auf den jeweiligen Kovarianzmatrixparameter bezieht. ![Realisierungen bivariater normalverteilter Zufallsvektoren.]("./Abbildungen/rmvnorm.pdf"){#fig-rmvnorm fig-align="center" width=100%} \newpage ## Linear-affine Transformation bivariater Normalverteilungen Schließlich wollen wir uns das Theorem zur linear-affinen Transformation multivariat normalverteilter Zufallsvektoren auf der Eberne der WDFen bzw. der Realisierungen verdeutlichen. Wir greifen hierzu auf das in der Vorlesung behandelte Beispiele einer bivariaten Normalverteilung zurück und studieren folgenden **R**-Code, der @fig-transformation erzeugt. \tiny ```{r, eval = F} # R-Pakete library(mvtnorm) # Abbildungsparameter 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-Modell x_min = -3 # x_i Minimum x_max = 3 # x_i Maximum 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 mu = c(1,1) # \mu \in \mathbb{R}^2 Sigma = matrix(c(0.2, 0.15, 0.15, 0.2), 2) # \Sigma in \mathbb{R}^{2 \times 2} px = matrix(dmvnorm(as.matrix(x), mu, Sigma), nrow = x_res) # x \sim N(\mu,\Sigma) xi = rmvnorm(n = 50, mu, Sigma) # Realisierungen contour(x_1, x_2, px, xlim = c(x_min,x_max), ylim = c(x_min,x_max), xlab = TeX("$x_1$"), ylab = TeX("$x_2$"), levels = c(0.9,0.7,0.5,0.3,0.1), main = TeX("$\\xi \\sim N(\\mu,\\Sigma)$")) points(xi, pch = 21, col = "white", bg = "gray60", cex = 1) # y-Modell A = matrix(c(-2,1,-1,2), nrow = 2, byrow = TRUE) # Transformationsmatrix b = c(1,-1) # Transformationsvektor y_min = -3 # y_i Minimum y_max = 3 # y_i Maximum y_res = 1e3 # y_i Auflösung y_1 = seq(y_min, y_max, length.out = y_res) # y_1 Raum y_2 = seq(y_min, y_max, length.out = y_res) # y_2 Raum y = expand.grid(y_1,y_2) # y = (y_1,y_2)^T Raum py = matrix(dmvnorm(as.matrix(y), A%*%mu+b, A%*%Sigma%*%t(A)), nrow = y_res) # y \sim N(A \mu + b, A \Sigma A^T) ups = t(A %*% t(xi) + replicate(dim(xi)[1],b)) # Realisierungen contour(y_1, y_2, py, xlim = c(y_min,y_max), ylim = c(y_min,y_max), xlab = TeX("$y_1$"), ylab = TeX("$y_2$"), levels = c(0.9,0.7,0.5,0.3,0.1), main = TeX("$\\upsilon \\sim N(A\\mu+b,A\\Sigma A^T)$")) points(ups, pch = 21, col = "white", bg = "gray60", cex = 1) # Speicherung als PDF dev.copy2pdf( file = "./Abbildungen/mvn_transformation.pdf", width = 8, height = 4) dev.off() ``` \normalsize ![Linear-affine Transformation einer bivariaten Normalverteilung]("./Abbildungen/mvn_transformation.pdf"){#fig-transformation fig-align="center" width=100%}