Kom igångKom igång gratis

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

Visa kurs

Ö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 till 1. Tilldela resultatet till v1.
  • Skriv ut v1, den skalade första egenvektorn för M, och jämför med x.

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(___)
Redigera och kör kod