Problem 1: Numerator Relationship Matrix
The following pedigree is given
The pedigree can be read from the file
https://charlotte-ngs.github.io/lbgfs2022/data/ped_num_rel_mat.csv
Compute the numerator relationship matrix \(A\) for the given pedigree. Recall from the
course notes that elements of matrix \(A\) are computed differently for elements
on the diagonal and for off-diagonal elements. In summary, we
compute
- diagonal element \((A)_{ii}\) as
\((A)_{ii} = 1+F_i\) where \(F_i = 0.5 * (A)_{sd}\) where \(s\) and \(d\) are parents of \(i\).
- off-diagonal element \((A)_{ki}\)
as \((A)_{ki} = 0.5 * \left[(A)_{ks} +
(A)_{kd}\right]\) where \(s\)
and \(d\) are parents of \(i\)
Task
Use two nested loops over the rows and the columns of matrix \(A\) to compute all the elements of matrix
\(A\) using the formulas given
above.
Your Solution
- Read the pedigree from the given file
- Add parents that do not appear as animals to the column of
animals
- Create an empty square matrix \(A\)
with as many rows and columns as we have animals in the pedigree.
- Use the above formula to compute the diagonal element of the first
row
- Create a first loop to compute all the off-diagonal elements of the
first row
- Create a loop to repeat the computations over all rows.
Problem 2: Verification
Use the function pedigreemm::getA()
from package
pedigreemm
to verify your result from problem 1.
Your Solution
- Define the pedigree
- Compute the relationship matrix with
getA()
Problem 3: Functions in R
Computations such as the computation of the diagonal elements or such
as the one of the off-diagonal elements can be isolated and factored out
in a important programming construct which is called
function
. A function takes a set of input parameter and
transforms them into a result which is returned. For our example of the
numerator relationship matrix two functions can be constructed according
to the following template
compute_square <- function(pn_number){
square_result <- pn_number*pn_number
return(square_result)
}
The function can be used by function calls which take a given input
and return a result
compute_square(pn_number = 3)
[1] 9
compute_square(1:10)
[1] 1 4 9 16 25 36 49 64 81 100
Task
Use the above template to construct a function and factor out the
computations of the diagonal elements and of the off-diagonal elements
into two separate functions.
Your Solution
- Write a function to compute a diagonal element
- Write a function to compute an off-diagonal element
- Use the functions to compute all elements of the numerator
relationship matrix
Latest Changes: 2022-11-18 07:25:38 (pvr)
LS0tCnRpdGxlOiBMaXZlc3RvY2sgQnJlZWRpbmcgYW5kIEdlbm9taWNzIC0gTm90ZWJvb2sgNwphdXRob3I6IFBldGVyIHZvbiBSb2hyCmRhdGU6ICcyMDIyLTExLTExJwpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKcGFyYW1zOgogIGRvY3R5cGU6CiAgICBsYWJlbDogRG9jdW1lbnQgVHlwZQogICAgdmFsdWU6IHNvbHV0aW9uCiAgICBjaG9pY2VzOgogICAgLSBleGVyY2lzZQogICAgLSBzb2x1dGlvbgogICAgLSBub3RlYm9vawogIGlzb25saW5lOgogICAgbGFiZWw6IE9ubGluZSAoeS9uKQogICAgdmFsdWU6IHRydWUKICAgIGNob2ljZXM6CiAgICAtIHRydWUKICAgIC0gZmFsc2UKLS0tCgoKCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpCmBgYAoKCiMjIFByb2JsZW0gMTogTnVtZXJhdG9yIFJlbGF0aW9uc2hpcCBNYXRyaXgKYGBge3IgbGJnLWV4MDctcDAxLXNldHVwLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIGlmIChwYXJhbXMkaXNvbmxpbmUpewogIHNfcGVkX2RhdGEgPC0gImh0dHBzOi8vY2hhcmxvdHRlLW5ncy5naXRodWIuaW8vbGJnZnMyMDIyL2RhdGEvcGVkX251bV9yZWxfbWF0LmNzdiIKIyB9IGVsc2UgewojICAgIHNfcGVkX2RhdGEgPC0gZmlsZS5wYXRoKGhlcmU6OmhlcmUoKSwgImRvY3MiLCAiZGF0YSIsICJwZWRfbnVtX3JlbF9tYXQuY3N2IikKIyB9CmBgYAoKVGhlIGZvbGxvd2luZyBwZWRpZ3JlZSBpcyBnaXZlbgoKYGBge3IsIGVjaG89RkFMU0V9Cm5yX2FuaW1hbCA8LSA2CnRibF9wZWRpZ3JlZSA8LSByZWFkcjo6cmVhZF9kZWxpbShmaWxlID0gc19wZWRfZGF0YSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZXMgPSByZWFkcjo6Y29scyhDYWxmID0gcmVhZHI6OmNvbF9pbnRlZ2VyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXJlID0gcmVhZHI6OmNvbF9pbnRlZ2VyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYW0gPSByZWFkcjo6Y29sX2ludGVnZXIoKSkpCmtuaXRyOjprYWJsZSh0YmxfcGVkaWdyZWUsIGJvb2t0YWJzID0gVFJVRSwgbG9uZ3RhYmxlID0gVFJVRSkKYGBgCgpUaGUgcGVkaWdyZWUgY2FuIGJlIHJlYWQgZnJvbSB0aGUgZmlsZQoKYGBge3IsIGVjaG89RkFMU0V9CmNhdChzX3BlZF9kYXRhLCAiXG4iKQpgYGAKCkNvbXB1dGUgdGhlIG51bWVyYXRvciByZWxhdGlvbnNoaXAgbWF0cml4ICRBJCBmb3IgdGhlIGdpdmVuIHBlZGlncmVlLiBSZWNhbGwgZnJvbSB0aGUgY291cnNlIG5vdGVzIHRoYXQgZWxlbWVudHMgb2YgbWF0cml4ICRBJCBhcmUgY29tcHV0ZWQgZGlmZmVyZW50bHkgZm9yIGVsZW1lbnRzIG9uIHRoZSBkaWFnb25hbCBhbmQgZm9yIG9mZi1kaWFnb25hbCBlbGVtZW50cy4gSW4gc3VtbWFyeSwgd2UgY29tcHV0ZQoKKiBkaWFnb25hbCBlbGVtZW50ICQoQSlfe2lpfSQgYXMgJChBKV97aWl9ID0gMStGX2kkIHdoZXJlICRGX2kgPSAwLjUgKiAoQSlfe3NkfSQgd2hlcmUgJHMkIGFuZCAkZCQgYXJlIHBhcmVudHMgb2YgJGkkLiAKKiBvZmYtZGlhZ29uYWwgZWxlbWVudCAkKEEpX3traX0kIGFzICQoQSlfe2tpfSA9IDAuNSAqIFxsZWZ0WyhBKV97a3N9ICsgKEEpX3trZH1ccmlnaHRdJCB3aGVyZSAkcyQgYW5kICRkJCBhcmUgcGFyZW50cyBvZiAkaSQKCgojIyMgVGFzawpVc2UgdHdvIG5lc3RlZCBsb29wcyBvdmVyIHRoZSByb3dzIGFuZCB0aGUgY29sdW1ucyBvZiBtYXRyaXggJEEkIHRvIGNvbXB1dGUgYWxsIHRoZSBlbGVtZW50cyBvZiBtYXRyaXggJEEkIHVzaW5nIHRoZSBmb3JtdWxhcyBnaXZlbiBhYm92ZS4KCiMjIyBZb3VyIFNvbHV0aW9uCgoqIFJlYWQgdGhlIHBlZGlncmVlIGZyb20gdGhlIGdpdmVuIGZpbGUKKiBBZGQgcGFyZW50cyB0aGF0IGRvIG5vdCBhcHBlYXIgYXMgYW5pbWFscyB0byB0aGUgY29sdW1uIG9mIGFuaW1hbHMKKiBDcmVhdGUgYW4gZW1wdHkgc3F1YXJlIG1hdHJpeCAkQSQgd2l0aCBhcyBtYW55IHJvd3MgYW5kIGNvbHVtbnMgYXMgd2UgaGF2ZSBhbmltYWxzIGluIHRoZSBwZWRpZ3JlZS4KKiBVc2UgdGhlIGFib3ZlIGZvcm11bGEgdG8gY29tcHV0ZSB0aGUgZGlhZ29uYWwgZWxlbWVudCBvZiB0aGUgZmlyc3Qgcm93CiogQ3JlYXRlIGEgZmlyc3QgbG9vcCB0byBjb21wdXRlIGFsbCB0aGUgb2ZmLWRpYWdvbmFsIGVsZW1lbnRzIG9mIHRoZSBmaXJzdCByb3cKKiBDcmVhdGUgYSBsb29wIHRvIHJlcGVhdCB0aGUgY29tcHV0YXRpb25zIG92ZXIgYWxsIHJvd3MuCgoKCgoKIyMgUHJvYmxlbSAyOiBWZXJpZmljYXRpb24KVXNlIHRoZSBmdW5jdGlvbiBgcGVkaWdyZWVtbTo6Z2V0QSgpYCBmcm9tIHBhY2thZ2UgYHBlZGlncmVlbW1gIHRvIHZlcmlmeSB5b3VyIHJlc3VsdCBmcm9tIHByb2JsZW0gMS4KCiMjIyBZb3VyIFNvbHV0aW9uCgoqIERlZmluZSB0aGUgcGVkaWdyZWUKKiBDb21wdXRlIHRoZSByZWxhdGlvbnNoaXAgbWF0cml4IHdpdGggYGdldEEoKWAKCgoKCgojIyBQcm9ibGVtIDM6IEZ1bmN0aW9ucyBpbiBSCkNvbXB1dGF0aW9ucyBzdWNoIGFzIHRoZSBjb21wdXRhdGlvbiBvZiB0aGUgZGlhZ29uYWwgZWxlbWVudHMgb3Igc3VjaCBhcyB0aGUgb25lIG9mIHRoZSBvZmYtZGlhZ29uYWwgZWxlbWVudHMgY2FuIGJlIGlzb2xhdGVkIGFuZCBmYWN0b3JlZCBvdXQgaW4gYSBpbXBvcnRhbnQgcHJvZ3JhbW1pbmcgY29uc3RydWN0IHdoaWNoIGlzIGNhbGxlZCBgZnVuY3Rpb25gLiBBIGZ1bmN0aW9uIHRha2VzIGEgc2V0IG9mIGlucHV0IHBhcmFtZXRlciBhbmQgdHJhbnNmb3JtcyB0aGVtIGludG8gYSByZXN1bHQgd2hpY2ggaXMgcmV0dXJuZWQuIEZvciBvdXIgZXhhbXBsZSBvZiB0aGUgbnVtZXJhdG9yIHJlbGF0aW9uc2hpcCBtYXRyaXggdHdvIGZ1bmN0aW9ucyBjYW4gYmUgY29uc3RydWN0ZWQgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgdGVtcGxhdGUKCmBgYHtyfQpjb21wdXRlX3NxdWFyZSA8LSBmdW5jdGlvbihwbl9udW1iZXIpewogIHNxdWFyZV9yZXN1bHQgPC0gcG5fbnVtYmVyKnBuX251bWJlcgogIHJldHVybihzcXVhcmVfcmVzdWx0KQp9CmBgYAoKVGhlIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGJ5IGZ1bmN0aW9uIGNhbGxzIHdoaWNoIHRha2UgYSBnaXZlbiBpbnB1dCBhbmQgcmV0dXJuIGEgcmVzdWx0CgpgYGB7cn0KY29tcHV0ZV9zcXVhcmUocG5fbnVtYmVyID0gMykKY29tcHV0ZV9zcXVhcmUoMToxMCkKYGBgCgoKIyMjIFRhc2sKVXNlIHRoZSBhYm92ZSB0ZW1wbGF0ZSB0byBjb25zdHJ1Y3QgYSBmdW5jdGlvbiBhbmQgZmFjdG9yIG91dCB0aGUgY29tcHV0YXRpb25zIG9mIHRoZSBkaWFnb25hbCBlbGVtZW50cyBhbmQgb2YgdGhlIG9mZi1kaWFnb25hbCBlbGVtZW50cyBpbnRvIHR3byBzZXBhcmF0ZSBmdW5jdGlvbnMuCgoKIyMjIFlvdXIgU29sdXRpb24KCiogV3JpdGUgYSBmdW5jdGlvbiB0byBjb21wdXRlIGEgZGlhZ29uYWwgZWxlbWVudAoqIFdyaXRlIGEgZnVuY3Rpb24gdG8gY29tcHV0ZSBhbiBvZmYtZGlhZ29uYWwgZWxlbWVudAoqIFVzZSB0aGUgZnVuY3Rpb25zIHRvIGNvbXB1dGUgYWxsIGVsZW1lbnRzIG9mIHRoZSBudW1lcmF0b3IgcmVsYXRpb25zaGlwIG1hdHJpeAoKCgogCgoKYGBge3IsIGVjaG89RkFMU0UsIHJlc3VsdHM9J2FzaXMnfQpjYXQoJ1xuLS0tXG5cbiBfTGF0ZXN0IENoYW5nZXM6ICcsIGZvcm1hdChTeXMudGltZSgpLCAnJVktJW0tJWQgJUg6JU06JVMnKSwgJyAoJywgU3lzLmluZm8oKVsndXNlciddLCAnKV9cbicsIHNlcCA9ICcnKQpgYGAKIAo=