罗莎琳德:孟德尔冷杉

2024-07-03 04:27:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在http://rosalind.info/problems/iprb/上解决这个问题

Given: Three positive integers k, m, and n, representing a population containing k+m+n organisms: k individuals are homozygous dominant for a factor, m are heterozygous, and n are homozygous recessive.

Return: The probability that two randomly selected mating organisms will produce an individual possessing a dominant allele (and thus displaying the dominant phenotype). Assume that any two organisms can mate.

我的解决方案适用于示例,但不适用于生成的任何问题。在进一步的研究之后,我似乎应该找到随机选择任何一个有机体的概率,找到选择第二个有机体的概率,然后找到配对产生具有显性等位基因后代的概率。在

我的问题是:我下面的代码找到的概率是多少?它能找到所有可能的交配中带有显性等位基因的后代所占的百分比吗?因此,我的代码不是计算一次随机交配的概率,而是求解所有配对都被测试时具有显性等位基因的后代的百分比?在

f = open('rosalind_iprb.txt', 'r')
r = f.read()
s = r.split()
############# k = # homozygotes dominant, m = #heterozygotes, n = # homozygotes recessive
k = float(s[0])
m = float(s[1])
n = float(s[2])
############# Counts for pairing between each group and within groups
k_k = 0
k_m = 0
k_n = 0

m_m = 0
m_n = 0

n_n = 0


##############
if k > 1:
    k_k = 1.0 + (k-2) * 2.0

k_m = k * m

k_n = k * n

if m > 1:
    m_m = 1.0 + (m-2) * 2.0

m_n = m * n

if n> 1:
    n_n = 1.0 + (n-2) * 2.0
#################
dom = k_k + k_m + k_n + 0.75*m_m + 0.5*m_n
total = k_k + k_m + k_n + m_m + m_n + n_n

chance = dom/total
print chance

Tags: andforifthatfloat概率are等位基因
3条回答

看看你的代码,我很难弄清楚它应该做什么。我将在这里解决这个问题。在

我们简化措辞吧。有n1型1、n2型2和n3型3项。在

有多少种方法可以从所有的物品中选择一套2号的?(n1+n2+n3)选择2。在

每对项都有对应于以下六个无序多集之一的项类型:{1,1},{2,2},{3,3},{1,2},{1,3},{2,3}

有多少个{i,i}形式的多集?我选2。在

有多少个{i,j}形式的多集,我在哪里!=j?新泽西州。在

因此,六个多集的概率如下:

  • P({1,1})=[n1选择2]/[(n1+n2+n3)选择2]
  • P({2,2})=[n2选择2]/[(n1+n2+n3)选择2]
  • P({3,3})=[n3选择2]/[(n1+n2+n3)选择2]
  • P({1,2})=[n1*n2]/[(n1+n2+n3)选择2]
  • P({1,3})=[n1*n3]/[(n1+n2+n3)选择2]
  • P({2,3})=[n2*n3]/[(n1+n2+n3)选择2]

这些加起来是1。请注意,对于X>;1,[X choose 2]仅为[X*(X-1)/2],对于X=0或1,则为0。在

Return: The probability that two randomly selected mating organisms will produce an individual possessing a dominant allele (and thus displaying the dominant phenotype).

要回答这个问题,您只需确定六个多集中的哪一个对应于此事件。如果没有遗传学知识来回答这个问题,那就交给你吧。在

例如,假设一个显性等位基因的结果,如果两个父母中的任何一个是1型。感兴趣的事件是{1,1},{1,2},{1,3},事件发生的概率是P({1,1})+P({1,2})+P({1,3})。在

我在这个问题上花了一些时间,所以,用python澄清一下:

lst = ['2', '2', '2']
k, m, n = map(float, lst)
t = sum(map(float, lst))
# organize a list with allele one * allele two (possibles) * dominant probability
# multiplications by one were ignored
# remember to substract the haplotype from the total when they're the same for the second haplotype choosed
couples = [
            k*(k-1),  # AA x AA
            k*m,  # AA x Aa
            k*n,  # AA x aa
            m*k,  # Aa x AA
            m*(m-1)*0.75,  # Aa x Aa
            m*n*0.5,  # Aa x aa
            n*k,  # aa x AA
            n*m*0.5,  # aa x Aa
            n*(n-1)*0  # aa x aa
]
# (t-1) indicate that the first haplotype was select
print(round(sum(couples)/t/(t-1), 5))

如果你感兴趣,我只是找到了一个解决方案,并把它放在C中。在

    public double mendel(double k, double m, double n)
    {
        double prob;

        prob = ((k*k - k) + 2*(k*m) + 2*(k*n) + (.75*(m*m - m)) + 2*(.5*m*n))/((k + m + n)*(k + m + n -1)); 

        return prob;
    }

我们的参数是k(显性)、m(杂)和amp;n(隐性)。 首先,我找到了每一个可能的繁殖对选择的概率,以种群的百分比表示。所以,第一轮选择k看起来像k/(k+m+n),在第一轮选择k之后的第二轮选择k看起来像(k-1)/(k+m+n)。然后把这两个数相乘得到结果。由于有三个确定的人群,有九个可能的结果。在

然后我将每个结果乘以它的优势概率-k为100%,m&m为75%,m&n为50%,n&n为0%。现在将结果相加,就得到了解决方案。在

http://rosalind.info/problems/iprb/

相关问题 更多 >