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