Вычисление вероятности того, что у потомства будет хотя бы один доминантный аллель

Я пытаюсь решить проблему "Первого закона Менделя" на 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 ответ

Решение

Я предлагаю немного изменить мышление, выполнив вычисления в три этапа:

  1. Какова вероятность получения генотипа X для первого родителя? (Кроме того, сколько различных вариантов есть для X?)

  2. Какова вероятность получения генотипа Y для второго родителя?

  3. Учитывая генотипы X и Y родителей, какова вероятность того, что у ребенка будет доминирующий генотип?

Суммируйте шаги 1-3 для каждой пары (X, Y).

Когда я нарисовал древовидную диаграмму вручную, мне было легче вычислить вероятность того, что у ребенка НЕ ​​будет доминирующий аллель. Есть меньше вариантов для суммирования, и затем вы можете вычесть эту сумму из 1.

Другие вопросы по тегам