Вычисление вероятности того, что у потомства будет хотя бы один доминантный аллель
Я пытаюсь решить проблему "Первого закона Менделя" на http://rosalind.info/
Я пробовал несколько разных подходов, но я просто не могу найти решение, которое бы давало тот же ответ, что и образец проблемы на их странице. Я знаю, что их выборка верна, хотя.
Вот что у меня есть:
traitProb :: Int -> Int -> Int -> Double
traitProb k m n = getProb list
where list = cartProd genotypes genotypes
genotypes = (replicate k Dominant) ++ (replicate m Heterozygous) ++ (replicate n Recessive)
getProb = sum . map ((flip (/)) total . getMultiplier)
total = fromIntegral $ length list
getMultiplier (Dominant, Dominant) = 1.0
getMultiplier (Recessive, Dominant) = 1.0
getMultiplier (Dominant, Recessive) = 1.0
getMultiplier (Dominant, Heterozygous) = 1.0
getMultiplier (Heterozygous, Dominant) = 1.0
getMultiplier (Heterozygous, Heterozygous) = 0.75
getMultiplier (Heterozygous, Recessive) = 0.5
getMultiplier (Recessive, Heterozygous) = 0.5
getMultiplier (Recessive, Recessive) = 0.0
Я не уверен, что код неправильный или мой метод вычисления вероятности неверен. По сути, идея состоит в том, чтобы получить список всех возможных родителей, а затем, основываясь на том, являются ли они гомозиготными доминантными, рецессивными или гетерозиготными, вычислить вероятность того, что каждая пара родителей родит ребенка по крайней мере с одним доминантным аллелем. Затем разделите каждый результат на общее количество пар родителей. После этого я просто подвожу список. Но мой ответ немного неверен.
Может кто-то указать мне верное направление?
РЕДАКТИРОВАТЬ: cartProd - это "декартово произведение" двух списков, переданных ему, если хотите.
cartProd :: [a] -> [a] -> [(a, a)]
cartProd xs ys = [ (x, y) | x <- xs, y <- ys ]
1 ответ
Я предлагаю немного изменить мышление, выполнив вычисления в три этапа:
Какова вероятность получения генотипа X для первого родителя? (Кроме того, сколько различных вариантов есть для X?)
Какова вероятность получения генотипа Y для второго родителя?
Учитывая генотипы X и Y родителей, какова вероятность того, что у ребенка будет доминирующий генотип?
Суммируйте шаги 1-3 для каждой пары (X, Y).
Когда я нарисовал древовидную диаграмму вручную, мне было легче вычислить вероятность того, что у ребенка НЕ будет доминирующий аллель. Есть меньше вариантов для суммирования, и затем вы можете вычесть эту сумму из 1.