Markovmodeller för allelfrekvenser
I föreläsningen såg du att det ledande egenvärdet för Markovmatrisen \(M\), vars R-utdata är:
[,1] [,2] [,3] [,4]
[1,] 0.980 0.005 0.005 0.010
[2,] 0.005 0.980 0.010 0.005
[3,] 0.005 0.010 0.980 0.005
[4,] 0.010 0.005 0.005 0.980
producerade en egenvektor som modellerar en situation där allelerna är lika representerade (var och en med sannolikheten 0,25).
I den här övningen använder vi en for-loop för att iterera mutationsprocessen från en initial alleldistribution:
[1] 1 0 0 0
och visar att detta verkligen är vad som sker – att egenvektorn ger rätt information i stället för for-loopen.
Mer om Markovprocesser finns på denna länk.
Den här övningen är en del av kursen
Linjär algebra för datavetenskap i R
Övningsinstruktioner
- Skriv ut
x, alleldistributionen efter de 1 000 mutationerna. - Beräkna och skala den första egenvektorn för
M(som redan är inläst) så att den summerar till1. Tilldela resultatet tillv1. - Skriv ut
v1, den skalade första egenvektorn förM, och jämför medx.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# This code iterates mutation 1000 times
x <- c(1, 0, 0, 0)
for (j in 1:1000) {x <- M%*%x}
# Print x
print(___)
# Print and scale the first eigenvector of M
Lambda <- eigen(M)
v1 <- Lambda$vectors[, ___]/sum(Lambda$___[, 1])
# Print v1
print(___)