Problem 1: Marker Effect Model

We are given the dataset that is shown in the table below. This dataset contains gentyping results of 10 for 2 SNP loci.

Rows: 10 Columns: 4
── Column specification ─────────────────────────────────────────────────────────────────────────
Delimiter: ","
dbl (4): Animal, SNP A, SNP B, Observation

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Animal SNP A SNP B Observation
1 0 0 156
2 1 0 168
3 0 1 161
4 1 0 164
5 -1 0 128
6 -1 1 124
7 0 -1 143
8 1 1 178
9 1 0 163
10 0 0 151

The above data can be read from:

https://charlotte-ngs.github.io/lbgfs2023/data/geno_data.csv 

Your Task

  • The goal of this problem is to estimate SNP marker effects using a marker effect model. Because we have just 2 SNP loci, you can use a fixed effects linear model with the 2 loci as fixed effects. Furthermore you can also include a fixed intercept into the model.
  • Specify all the model components including the vector of observations, the design matrix \(X\), the vector of unknowns and the vector of residuals.
  • You can use the R-function lm() to get the solutions for estimates of the unknown SNP effects.

Your Solution

  • Set up the regression model
  • Use lm() to get the regression coefficients as marker effects

Problem 2: Breeding Value Model

Use the same data as in Problem 1 to estimate genomic breeding values using a breeding value model.

Hints

  • The only fixed effect in this model is the mean \(\mu\) which is the same for all observations.
  • You can use the following function to compute the genomic relationship matrix
#' Compute genomic relationship matrix based on data matrix
computeMatGrm <- function(pmatData) {
  matData <- pmatData
  # check the coding, if matData is -1, 0, 1 coded, then add 1 to get to 0, 1, 2 coding
  if (min(matData) < 0) matData <- matData + 1
  # Allele frequencies, column vector of P and sum of frequency products
  freq <- apply(matData, 2, mean) / 2
  P <- 2 * (freq - 0.5)
  sumpq <- sum(freq*(1-freq))
  # Changing the coding from (0,1,2) to (-1,0,1) and subtract matrix P
  Z <- matData - 1 - matrix(P, nrow = nrow(matData), 
                             ncol = ncol(matData), 
                             byrow = TRUE)
  # Z%*%Zt is replaced by tcrossprod(Z)
  return(tcrossprod(Z)/(2*sumpq))
}
matG <-computeMatGrm(pmatData = t(mat_geno_snp))
matG_star <- matG + 0.01 * diag(nrow = nrow(matG))
n_min_eig_matG_start <- min(eigen(matG_star, only.values = TRUE)$values)
if (n_min_eig_matG_start < sqrt(.Machine$double.eps))
  stop(" *** Genomic relationship matrix singular with smallest eigenvalue: ", 
       n_min_eig_matG_start)
  • The resulting genomic relationship matrix is given by

\[G = \begin{bmatrix} 0.093 & -0.125 & -0.125 & -0.125 & 0.292 & 0.083 & 0.292 & -0.333 & -0.125 & 0.083 \\-0.125 & 0.718 & -0.333 & 0.708 & -0.958 & -1.167 & 0.083 & 0.5 & 0.708 & -0.125 \\-0.125 & -0.333 & 0.718 & -0.333 & 0.083 & 0.917 & -0.958 & 0.5 & -0.333 & -0.125 \\-0.125 & 0.708 & -0.333 & 0.718 & -0.958 & -1.167 & 0.083 & 0.5 & 0.708 & -0.125 \\0.292 & -0.958 & 0.083 & -0.958 & 1.552 & 1.333 & 0.5 & -1.167 & -0.958 & 0.292 \\0.083 & -1.167 & 0.917 & -1.167 & 1.333 & 2.177 & -0.75 & -0.333 & -1.167 & 0.083 \\0.292 & 0.083 & -0.958 & 0.083 & 0.5 & -0.75 & 1.552 & -1.167 & 0.083 & 0.292 \\-0.333 & 0.5 & 0.5 & 0.5 & -1.167 & -0.333 & -1.167 & 1.343 & 0.5 & -0.333 \\-0.125 & 0.708 & -0.333 & 0.708 & -0.958 & -1.167 & 0.083 & 0.5 & 0.718 & -0.125 \\0.083 & -0.125 & -0.125 & -0.125 & 0.292 & 0.083 & 0.292 & -0.333 & -0.125 & 0.093\end{bmatrix}\]

Your Tasks

  • Specify all model components of the linear mixed model, including the expected values and the variance-covariance matrix of the random effects.

Your Solution

  • Specify the model formula
  • Name all model components
  • Put all information from the data into the model components
  • Specify expected values and variance-covariance matrix for all random effects in the model
  • Setup mixed model equations
  • Compute solutions of mixed model equations

Latest Changes: 2023-12-08 08:01:29 (pvr)

LS0tCnRpdGxlOiBMaXZlc3RvY2sgQnJlZWRpbmcgYW5kIEdlbm9taWNzIC0gTm90ZWJvb2sgMTMKYXV0aG9yOiBQZXRlciB2b24gUm9ocgpkYXRlOiAnMjAyMy0xMi0wOCcKb3V0cHV0OiBodG1sX25vdGVib29rCnBhcmFtczoKICBkb2N0eXBlOgogICAgbGFiZWw6IERvY3VtZW50IFR5cGUKICAgIHZhbHVlOiBzb2x1dGlvbgogICAgY2hvaWNlczoKICAgIC0gZXhlcmNpc2UKICAgIC0gc29sdXRpb24KICAgIC0gbm90ZWJvb2sKICBpc29ubGluZToKICAgIGxhYmVsOiBPbmxpbmUgKHkvbikKICAgIHZhbHVlOiB0cnVlCiAgICBjaG9pY2VzOgogICAgLSB0cnVlCiAgICAtIGZhbHNlCi0tLQoKCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQpgYGAKCgojIyBQcm9ibGVtIDE6IE1hcmtlciBFZmZlY3QgTW9kZWwKCmBgYHtyIGRhdGFmbGVtc25wb2JzLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQpsaWJyYXJ5KGRwbHlyKQojIyMgIyBmaXggdGhlIG51bWJlciBvZiBhbmltYWxzCm5fbnJfYW5pbWFsIDwtIDEwCiMjIyAjIGludGVyY2VwdApuX2ludGVyX2NlcHQgPC0gMTUwCiMjIyAjIHJlc2lkdWFsIHN0YW5kYXJkIGRldmlhdGlvbgpuX3Jlc19zZCA8LSA5LjMKIyMjICMgdmVjdG9yIG9mIGdlbm90eXBlIHZhbHVlIGNvZWZmaWNpZW50cwp2ZWNfZ2Vub192YWx1ZV9jb2VmZiA8LSBjKC0xLDAsMSkKIyMjICMgc2FtcGxlIGdlbm90eXBlcyBvZiB1bmxpbmtlZCBTTlAgcmFuZG9tbHkKc2V0LnNlZWQoNTQzMikKIyMjICMgZml4IGFsbGVsZSBmcmVxdWVuY3kgb2YgcG9zaXRpdmUgYWxsZWxlCm5fcHJvYl9zbnBzIDwtIC40NQojIyMgIyBnZW5vdHlwaWMgdmFsdWVzIAp2ZWNfZ2Vub192YWwgPC0gYygxNy45LCAzLjMpCm5fbnJfc25wIDwtIGxlbmd0aCh2ZWNfZ2Vub192YWwpCiMjIyAjIHB1dCB0b2dldGhlciB0aGUgZ2Vub3R5cGVzIGludG8gYSBtYXRyaXgKbWF0X2dlbm9fc25wIDwtIG1hdHJpeChjKHNhbXBsZSh2ZWNfZ2Vub192YWx1ZV9jb2VmZiwgbl9ucl9hbmltYWwsIHByb2IgPSBjKCgxLW5fcHJvYl9zbnBzKV4yLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIqKDEtbl9wcm9iX3NucHMpKm5fcHJvYl9zbnBzLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fcHJvYl9zbnBzXjIpLCAKICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlID0gVFJVRSksCiAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlKHZlY19nZW5vX3ZhbHVlX2NvZWZmLCBuX25yX2FuaW1hbCwgcHJvYiA9IGMobl9wcm9iX3NucHNeMiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKigxLW5fcHJvYl9zbnBzKSpuX3Byb2Jfc25wcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMS1uX3Byb2Jfc25wcyleMiksIAogICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2UgPSBUUlVFKSksCiAgICAgICAgICAgICAgICAgICAgICAgbnJvdyA9IG5fbnJfc25wKQptYXRfb2JzX3kgPC0gbl9pbnRlcl9jZXB0ICsgY3Jvc3Nwcm9kKG1hdF9nZW5vX3NucCwgdmVjX2dlbm9fdmFsKSArIHJub3JtKG4gPSBuX25yX2FuaW1hbCwgbWVhbiA9IDAsIHNkID0gbl9yZXNfc2QpCiMjIyAjIGNvbWJpbmUgU05QIGdlbm90eXBlcyBpbnRvIGEgdGliYmxlCmdlbm9fY29kZSA8LSB0aWJibGU6OnRpYmJsZShgU05QIEFgID0gbWF0X2dlbm9fc25wWzEsXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBTTlAgQmAgPSBtYXRfZ2Vub19zbnBbMixdKQoKIyMjICMgYWRkIHRoZSBkYXRhCm1hdF9vYnNfeV9yb3VuZGVkIDwtIHJvdW5kKG1hdF9vYnNfeSwgZGlnaXRzID0gMCkKdGJsX29icyA8LSB0aWJibGU6OnRpYmJsZShPYnNlcnZhdGlvbiA9IG1hdF9vYnNfeV9yb3VuZGVkWywxXSkKZ2Vub19jb2RlICU+JSBiaW5kX2NvbHModGJsX29icykgLT4gdGJsX2FsbF9kYXRhCiMjIyAjIGFkZCBhbmltYWwgaWRzCnRibF9hbGxfZGF0YSA8LSBiaW5kX2NvbHMoQW5pbWFsID0gYygxOm5fbnJfYW5pbWFsKSx0YmxfYWxsX2RhdGEpCiMjIyAjIHdyaXRlIGRhdGEgdG8gZmlsZQojIHNfZGF0YV9wYXRoIDwtIGZpbGUucGF0aChoZXJlOjpoZXJlKCksICJkb2NzIiwgImRhdGEiLCAiZ2Vub19kYXRhLmNzdiIpCiMgcmVhZHI6OndyaXRlX2RlbGltKHRibF9hbGxfZGF0YSwgZmlsZSA9IHNfZGF0YV9wYXRoLCBkZWxpbSA9ICIsIikKIyBkYXRhIHVybApzX2RhdGFfdXJsX3BhdGggPC0gImh0dHBzOi8vY2hhcmxvdHRlLW5ncy5naXRodWIuaW8vbGJnZnMyMDIzL2RhdGEvZ2Vub19kYXRhLmNzdiIKYGBgCgpXZSBhcmUgZ2l2ZW4gdGhlIGRhdGFzZXQgdGhhdCBpcyBzaG93biBpbiB0aGUgdGFibGUgYmVsb3cuIFRoaXMgZGF0YXNldCBjb250YWlucyBnZW50eXBpbmcgcmVzdWx0cyBvZiBgciBuX25yX2FuaW1hbGAgZm9yIGByIG5fbnJfc25wYCBTTlAgbG9jaS4KCmBgYHtyIHNob3dkYXRhZXgxMywgZWNobz1GQUxTRX0KdGJsX2FsbF9kYXRhIDwtIHJlYWRyOjpyZWFkX2RlbGltKHNfZGF0YV91cmxfcGF0aCwgZGVsaW0gPSAiLCIpCmtuaXRyOjprYWJsZSh0YmxfYWxsX2RhdGEsCiAgICAgICAgICAgICBib29rdGFicyA9IFRSVUUsCiAgICAgICAgICAgICBsb25ndGFibGUgPSBUUlVFLAojICAgICAgICAgICAgIGNhcHRpb24gPSAiQW5pbWFscyBXaXRoIFR3byBTTlAgTG9jaSBBIGFuZCBCIEFmZmVjdGluZyBBIFF1YW50aXRhdGl2ZSBUcmFpdCIsCiAgICAgICAgICAgICBlc2NhcGUgPSBGQUxTRSkKCmBgYAoKVGhlIGFib3ZlIGRhdGEgY2FuIGJlIHJlYWQgZnJvbToKCmBgYHtyLCBlY2hvPUZBTFNFfQpjYXQoc19kYXRhX3VybF9wYXRoLCAiXG4iKQpgYGAKCgojIyMgWW91ciBUYXNrCiogVGhlIGdvYWwgb2YgdGhpcyBwcm9ibGVtIGlzIHRvIGVzdGltYXRlIFNOUCBtYXJrZXIgZWZmZWN0cyB1c2luZyBhIGBtYXJrZXIgZWZmZWN0IG1vZGVsYC4gQmVjYXVzZSB3ZSBoYXZlIGp1c3QgYHIgbl9ucl9zbnBgIFNOUCBsb2NpLCB5b3UgY2FuIHVzZSBhIGZpeGVkIGVmZmVjdHMgbGluZWFyIG1vZGVsIHdpdGggdGhlIGByIG5fbnJfc25wYCBsb2NpIGFzIGZpeGVkIGVmZmVjdHMuIEZ1cnRoZXJtb3JlIHlvdSBjYW4gYWxzbyBpbmNsdWRlIGEgZml4ZWQgaW50ZXJjZXB0IGludG8gdGhlIG1vZGVsLgoqIFNwZWNpZnkgYWxsIHRoZSBtb2RlbCBjb21wb25lbnRzIGluY2x1ZGluZyB0aGUgdmVjdG9yIG9mIG9ic2VydmF0aW9ucywgdGhlIGRlc2lnbiBtYXRyaXggJFgkLCB0aGUgdmVjdG9yIG9mIHVua25vd25zIGFuZCB0aGUgdmVjdG9yIG9mIHJlc2lkdWFscy4gCiogWW91IGNhbiB1c2UgdGhlIFItZnVuY3Rpb24gYGxtKClgIHRvIGdldCB0aGUgc29sdXRpb25zIGZvciBlc3RpbWF0ZXMgb2YgdGhlIHVua25vd24gU05QIGVmZmVjdHMuCgoKIyMjIFlvdXIgU29sdXRpb24KCiogU2V0IHVwIHRoZSByZWdyZXNzaW9uIG1vZGVsCiogVXNlIGxtKCkgdG8gZ2V0IHRoZSByZWdyZXNzaW9uIGNvZWZmaWNpZW50cyBhcyBtYXJrZXIgZWZmZWN0cwoKCgoKCiMjIFByb2JsZW0gMjogQnJlZWRpbmcgVmFsdWUgTW9kZWwKVXNlIHRoZSBzYW1lIGRhdGEgYXMgaW4gUHJvYmxlbSAxIHRvIGVzdGltYXRlIGdlbm9taWMgYnJlZWRpbmcgdmFsdWVzIHVzaW5nIGEgYGJyZWVkaW5nIHZhbHVlIG1vZGVsYC4KCgojIyMgSGludHMKKiBUaGUgb25seSBmaXhlZCBlZmZlY3QgaW4gdGhpcyBtb2RlbCBpcyB0aGUgbWVhbiAkXG11JCB3aGljaCBpcyB0aGUgc2FtZSBmb3IgYWxsIG9ic2VydmF0aW9ucy4KKiBZb3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHRvIGNvbXB1dGUgdGhlIGdlbm9taWMgcmVsYXRpb25zaGlwIG1hdHJpeAoKYGBge3IsIGVjaG89VFJVRX0KIycgQ29tcHV0ZSBnZW5vbWljIHJlbGF0aW9uc2hpcCBtYXRyaXggYmFzZWQgb24gZGF0YSBtYXRyaXgKY29tcHV0ZU1hdEdybSA8LSBmdW5jdGlvbihwbWF0RGF0YSkgewogIG1hdERhdGEgPC0gcG1hdERhdGEKICAjIGNoZWNrIHRoZSBjb2RpbmcsIGlmIG1hdERhdGEgaXMgLTEsIDAsIDEgY29kZWQsIHRoZW4gYWRkIDEgdG8gZ2V0IHRvIDAsIDEsIDIgY29kaW5nCiAgaWYgKG1pbihtYXREYXRhKSA8IDApIG1hdERhdGEgPC0gbWF0RGF0YSArIDEKICAjIEFsbGVsZSBmcmVxdWVuY2llcywgY29sdW1uIHZlY3RvciBvZiBQIGFuZCBzdW0gb2YgZnJlcXVlbmN5IHByb2R1Y3RzCiAgZnJlcSA8LSBhcHBseShtYXREYXRhLCAyLCBtZWFuKSAvIDIKICBQIDwtIDIgKiAoZnJlcSAtIDAuNSkKICBzdW1wcSA8LSBzdW0oZnJlcSooMS1mcmVxKSkKICAjIENoYW5naW5nIHRoZSBjb2RpbmcgZnJvbSAoMCwxLDIpIHRvICgtMSwwLDEpIGFuZCBzdWJ0cmFjdCBtYXRyaXggUAogIFogPC0gbWF0RGF0YSAtIDEgLSBtYXRyaXgoUCwgbnJvdyA9IG5yb3cobWF0RGF0YSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSBuY29sKG1hdERhdGEpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXJvdyA9IFRSVUUpCiAgIyBaJSolWnQgaXMgcmVwbGFjZWQgYnkgdGNyb3NzcHJvZChaKQogIHJldHVybih0Y3Jvc3Nwcm9kKFopLygyKnN1bXBxKSkKfQptYXRHIDwtY29tcHV0ZU1hdEdybShwbWF0RGF0YSA9IHQobWF0X2dlbm9fc25wKSkKbWF0R19zdGFyIDwtIG1hdEcgKyAwLjAxICogZGlhZyhucm93ID0gbnJvdyhtYXRHKSkKbl9taW5fZWlnX21hdEdfc3RhcnQgPC0gbWluKGVpZ2VuKG1hdEdfc3Rhciwgb25seS52YWx1ZXMgPSBUUlVFKSR2YWx1ZXMpCmlmIChuX21pbl9laWdfbWF0R19zdGFydCA8IHNxcnQoLk1hY2hpbmUkZG91YmxlLmVwcykpCiAgc3RvcCgiICoqKiBHZW5vbWljIHJlbGF0aW9uc2hpcCBtYXRyaXggc2luZ3VsYXIgd2l0aCBzbWFsbGVzdCBlaWdlbnZhbHVlOiAiLCAKICAgICAgIG5fbWluX2VpZ19tYXRHX3N0YXJ0KQpgYGAKCiogVGhlIHJlc3VsdGluZyBnZW5vbWljIHJlbGF0aW9uc2hpcCBtYXRyaXggaXMgZ2l2ZW4gYnkKCmBgYHtyIHNob3ctZ2Vub21pYy1yZWx0aW9uc2hpcC1tYXRyaXgsIGVjaG89RkFMU0UsIHJlc3VsdHM9J2FzaXMnfQpjYXQocGFzdGUocm1kaGVscDo6Ym1hdHJpeChwbWF0ID0gcm91bmQobWF0R19zdGFyLCBkaWdpdHMgPSAzKSwgcHNfbmFtZSA9ICdHJywgcHNfZW52ID0gJyQkJyksIGNvbGxhcHNlID0gJ1xuJyksICdcbicpCmBgYAoKIyMjIFlvdXIgVGFza3MKKiBTcGVjaWZ5IGFsbCBtb2RlbCBjb21wb25lbnRzIG9mIHRoZSBsaW5lYXIgbWl4ZWQgbW9kZWwsIGluY2x1ZGluZyB0aGUgZXhwZWN0ZWQgdmFsdWVzIGFuZCB0aGUgdmFyaWFuY2UtY292YXJpYW5jZSBtYXRyaXggb2YgdGhlIHJhbmRvbSBlZmZlY3RzLgoKCiMjIyBZb3VyIFNvbHV0aW9uCgoqIFNwZWNpZnkgdGhlIG1vZGVsIGZvcm11bGEKKiBOYW1lIGFsbCBtb2RlbCBjb21wb25lbnRzCiogUHV0IGFsbCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBkYXRhIGludG8gdGhlIG1vZGVsIGNvbXBvbmVudHMKKiBTcGVjaWZ5IGV4cGVjdGVkIHZhbHVlcyBhbmQgdmFyaWFuY2UtY292YXJpYW5jZSBtYXRyaXggZm9yIGFsbCByYW5kb20gZWZmZWN0cyBpbiB0aGUgbW9kZWwKKiBTZXR1cCBtaXhlZCBtb2RlbCBlcXVhdGlvbnMKKiBDb21wdXRlIHNvbHV0aW9ucyBvZiBtaXhlZCBtb2RlbCBlcXVhdGlvbnMKCgoKCgpgYGB7ciwgZWNobz1GQUxTRSwgcmVzdWx0cz0nYXNpcyd9CmNhdCgnXG4tLS1cblxuIF9MYXRlc3QgQ2hhbmdlczogJywgZm9ybWF0KFN5cy50aW1lKCksICclWS0lbS0lZCAlSDolTTolUycpLCAnICgnLCBTeXMuaW5mbygpWyd1c2VyJ10sICcpX1xuJywgc2VwID0gJycpCmBgYAogCg==