knitr::opts_chunk$set(echo = FALSE, results = 'asis')
r6obj_docstat <- rmddochelper::R6ClassDocuStatus$new()
r6obj_docstat$set_current_status(psVersion = "0.0.901",
                                 psStatus  = "Initialisation",
                                 psProject = "[REPLACE_WITH_PROJECT]")
r6obj_docstat$include_doc_stat(psTitle = "## Document Status")
r6ob_abbrtable <- rmddochelper::R6ClassTableAbbrev$new()
### # include table of abbreviations only, if there are any
if (!r6ob_abbrtable$is_empty_abbr())
  r6ob_abbrtable$include_abbr_table(psAbbrTitle = "## Abbreviations")

Aufgabe 1: Matrixdefinitionen in R

In R werden Matrizen mit der Funktion matrix erstellt. In der Vorlesung hatten wir gesehen, dass die Funktion matrix() verschiedene Optionen aktzeptiert. Wir wollen uns hier anschauen, wie sich die Parameter auswirken.

Ihre Aufgabe wird es sein die Matrizen mit den verschiedenen Optionen zu erstellen und so besser zu verstehen, was die Optionen für eine Bedeutung haben.

Parameter data

(matA <- matrix(data = c(1:9), nrow = 3, ncol = 3))
(matB <- matrix(nrow = 3, ncol = 3))
(matC <- matrix(data = c(1,2,3), nrow = 3, ncol = 3))
(matC2 <- matrix(data = c(1,2,3,4), nrow = 3, ncol = 3))

Parameter nrow und ncol

(matD <- matrix(data = c(1:9), nrow = 3))
(matE <- matrix(data = c(1:9), ncol = 3))

Parameter byrow

(matF <- matrix(data = c(1:9), nrow = 3, ncol = 3, byrow = TRUE))
(matG <- matrix(data = c(1:9), nrow = 3, ncol = 3, byrow = FALSE))

Aufgabe 2: Matrixmultiplikation in R

Matrixmultiplikationen können in R mit dem Operator %*% oder mit den Funktionen crossprod() oder tcrossprod() ausgeführt werden. Der Vorteil von crossprod() und tcrossprod() gegenüber von %*% ist, dass wir mit crossprod() und tcrossprod() direkt Matrizen und Vektoren multiplizieren können. Das funktioniert mit %*% nicht. Bei der Matrix-Vektor-Multiplikation mit %*% muss der Vektor zuerst in eine Matrix verwandelt werden.

In einem ersten Teil der Aufgabe geht es um einen Vergleich zwischen crossprod(), tcrossprod() und %*% für die Matrix-Matrix-Multiplikation.

a) Gegeben sind die folgenden Matrizen

matA <- matrix(data = c(1:9), ncol = 3)
matB <- matrix(data = c(2:10), ncol = 3)

Finden Sie heraus welcher Multiplikationen mit %*% entspricht die folgende Anweisung?

crossprod(matA,matB)

Lösung

Die Anweisung crossprod(matA,matB) entspricht der Matrixmultiplikation

t(matA) %*% matB

Alternativ dazu gibt es die Funktion tcrossprod(). Finden Sie, welche Matrixmultiplikation mit %*%

tcrossprod(matA, matB)

ausführt.

Lösung

matA %*% t(matB)

b) Gegeben ist zusätzlich der Vektor vecB als

vecB <- c(-3,16,1)

Multiplizieren Sie die Matrix matA mit dem Vektor vecB einmal mit %*% und einmal mit crossprod().

Hinweise: Ein Vektor kann mit der Funktion as.matrix() in eine Matrix verwandelt werden.

Lösung

matA %*% as.matrix(vecB)
crossprod(t(matA), vecB)

Aufgabe 3: Gleichungssysteme

Gegeben ist das folgende Gleichungssystem.

\begin{IEEEeqnarray}{rCl} 2x_2 + 2x_3 &=& 1 \nonumber\ 2x_1 + 4x_2 + 5x_3 &=& 9 \nonumber\ x_1 - x_2 + 2x_3 &=& 3 \label{eq:GlsA1} \end{IEEEeqnarray}

a) Bestimmen Sie die Lösungsmenge des Gleichungssystems (\ref{eq:GlsA1}) mit dem Gaussverfahren

Lösung

\begin{IEEEeqnarray}{rCl} 2x_1 + 4x_2 + 5x_3 &=& 9\ 2x_2 + 2x_3 &=& 1\ x_1 - x_2 + 2x_3 &=& 3 \end{IEEEeqnarray}

\begin{IEEEeqnarray}{rCl} 2x_1 + 4x_2 + 5x_3 &=& 9\ 2x_2 + 2x_3 &=& 1\ - 3x_2 - \frac{1}{2}x_3 &=& -\frac{3}{2} \end{IEEEeqnarray}

\begin{IEEEeqnarray}{rCl} 2x_1 + 4x_2 + 5x_3 &=& 9\ 2x_2 + 2x_3 &=& 1\ \frac{5}{2}x_3 &=& 0 \end{IEEEeqnarray}

Somit ist $x_3 = 0$.

b) Verwandeln Sie das Gleichungssystem (\ref{eq:GlsA1}) in Matrix-Vektor-Schreibweise

Lösung

\begin{IEEEeqnarray}{rCl} A \cdot x &=& b \end{IEEEeqnarray}

wobei die sogenannte Koeffizientenmatrix $A$, der Vektor $x$ und die rechte Handseite $b$ wie folgt definiert sind

$$A = \left[ \begin{array}{ccc} 0 & 2 & 2\ 2 & 4 & 5\ 1 & -1 & 2 \end{array} \right]$$,

$$x\left[ \begin{array}{c} x_1 \ x_2 \ x_3 \end{array} \right]$$

und

$$b=\left[ \begin{array}{c} 1 \ 9 \ 3 \end{array} \right]$$

c) Wie lautet die Lösung des Gleichungssystem (\ref{eq:GlsA1}) in Matrix-Vektor-Schreibweise

$$x = A^{-1} \cdot b$$

d) Berechnen Sie die Lösung aus c) mit R

Hinweis * Für die Multiplikation der Matrix $A^{-1}$ mit dem Vektor $b$ muss der Vektor $b$ in eine Matrix verwandelt werden. Dies kann mit der Funktion as.matrix() gemacht werden.

Lösung

matA <- matrix(data = c(0,2,2,2,4,5,1,-1,2),nrow = 3,ncol = 3, byrow = TRUE)
matAInv <- solve(matA)
vecB <- c(1,9,3)
sol <- matAInv %*% as.matrix(vecB)
print(sol)

Aufgabe 4: Quantitative Genetik

In einer Population wurden für einen Genort folgende Häufigkeiten bei Genotypen gezählt

dfGenotypeFreq <- data.frame(Genotypen = c("$A_1A_1$", "$A_1A_2$", "$A_2A_2$"),
                             Anzahl    = c(24, 53, 23),
                             stringsAsFactors = FALSE)
knitr::kable(dfGenotypeFreq)

a) Bestimmen Sie die Genotypfrequenzen

Lösung

nTotNrInd <- sum(dfGenotypeFreq$Anzahl)
vGenoTypeFreq <- dfGenotypeFreq$Anzahl / nTotNrInd
cat(paste("Genotyp-Frequenz", dfGenotypeFreq$Genotypen[1]), ": ", vGenoTypeFreq[1])
cat(paste("Genotyp-Frequenz", dfGenotypeFreq$Genotypen[2]), ": ", vGenoTypeFreq[2])
cat(paste("Genotyp-Frequenz", dfGenotypeFreq$Genotypen[3]), ": ", vGenoTypeFreq[3])

b) Bestimmen Sie die Allelfrequenzen

Lösung

vGenFreqP <- vGenoTypeFreq[1] + 0.5*vGenoTypeFreq[2]
vGenFreqQ <-  vGenoTypeFreq[3] + 0.5*vGenoTypeFreq[2]
cat("Allelfrequenz fuer A1: ", vGenFreqP)
cat("Allelfrequenz fuer A2: ", vGenFreqQ)

c) Berechnen Sie das Populationsmittel $\mu$ unter der Annahme, dass die genotypischen Werte zwischen den homozygoten Genotypen $20$ Einheiten auseinanderliegen und dass der heterozygote Genotyp einen genotypischen Wert von $2$ hat.

Lösung

nDeltaHom <- 20
### # additiver Wert A
nAddValue <- nDeltaHom / 2
nDom <- 2
### # Populationsmittel
nMu <- (vGenFreqP-vGenFreqQ) * nAddValue + 2 * vGenFreqP * vGenFreqQ * nDom
cat("Populationsmittel: ", nMu, "\n")
r6ob_abbrtable$writeToTsvFile()


charlotte-ngs/ZLHS2016 documentation built on May 13, 2019, 3:33 p.m.