НачатьНачать бесплатно

Марковские модели для частот аллелей

На лекции вы видели, что ведущее собственное значение марковской матрицы \(M\), вывод которой в 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

порождает собственный вектор, описывающий ситуацию, при которой все аллели представлены равномерно (каждый с вероятностью 0,25).

В этом упражнении мы используем цикл for, чтобы смоделировать процесс мутаций, начиная с исходного распределения аллелей:

[1] 1 0 0 0

и убедиться, что это действительно так — собственный вектор даёт ту же информацию, что и цикл.

Подробнее о марковских процессах можно узнать по этой ссылке.

Это упражнение является частью курса

Линейная алгебра для науки о данных на R

Посмотреть курс

Инструкции к упражнению

  • Выведите на экран x — распределение аллелей после 1000 мутаций.
  • Найдите первый собственный вектор матрицы M (она уже загружена) и нормируйте его так, чтобы сумма элементов равнялась 1. Сохраните результат в v1.
  • Выведите на экран v1 — нормированный первый собственный вектор матрицы M — и сравните его с x.

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

# 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(___)
Редактировать и запускать код