发布于 

配子一定比例致死的人类遗传病计算问题

半年没更博,文化课战士回来报道。

前言

老师同学们好!

本人高中生,有关生物的见识仅局限高中范围,本文有关专有用语可能不够准确。

本文旨在分享我对此前期考复习前的一道题目的思考。

题目内容如下:

右图是甲、乙两种单基因遗传病的家系图,家系中无突变发生且其中一种病为伴X遗传。已知正常人群中乙病携带者占1/6,且含乙病基因的雄配子半数致死。6号个体与人群中正常男性结婚,生育一个两病兼患男孩的概率是( )。 A. 1/184 B. 1/192 C. 1/368 D. 1/384 {% image https://s2.loli.net/2023/01/29/bXp5OMztm7v1n3B.png 题图 width:400px padding:20px bg:hex

%}

这道题的最初来源我没有能够找到,只在[1]中有所发现。

问题分析

甲病有关基因用 XAX^AXaX^a 表示,乙病有关基因用 BBbb 表示。对于甲病的结果我不存在质疑,很容易得出该夫妇生出一个患甲病男孩的概率

P1=12×12×14=116P_1=\frac{1}{2}\times\frac{1}{2}\times\frac{1}{4}=\frac{1}{16}

接下来仅需计算该夫妇所生育的孩子中患乙病的概率 P2P_2,通过自由组合定律即可得出该题的答案

P=P1×P2P=P_1\times P_2

问题的焦点在于如何计算 P2P_2

计算机模拟结果

将原问题抽离成为与现实相符的一个模型。假设现有一个大小为 NN 的男性正常群体。

我将男性每一个个体从 11NN 编号记为 ai=ia_i=i 。为了满足题目条件,另 ai1(mod6)\forall a_i\equiv 1 \pmod{6} 的男性个体为乙病的携带者。

然后随机生成一个数 x[1,N]x\in [1,N] 表示个体6与编号为 xx 的男性个体交配。

如果 x1(mod6)x\equiv 1 \pmod{6} 则表示个体6与一男性乙病的携带者交配。考虑该男性的配子。若不考虑致死该男性配子 BBbb 应为 1:11:1 。现 bb 半数致死,则该男性配子比例应为 2:12:1 。因而再生成一个随机数 y[1,3]y\in[1,3] ,如果所得随机数为 11 则此次模拟该男性产生的配子为 bb ,其余情况则为 BB

如果 xx 不满足 x1(mod6)x\equiv 1 \pmod{6} 。则该男性产生的配子一定为 BB

将男性产生的配子与女性的配子组合即可得到后代的基因型。

将随机生成 xx 的步骤重复 Ω\Omega 次,记录下其中后代为 bbbb 的次数 TT 即可得到

P2=TΩP_2=\frac{T}{\Omega}

计算机实现代码如下:

green,c++代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<ctime>
#include<cstdlib>
using namespace std;

#define REP(i,e,s) for(register int i=e; i<=s; i++)
#define DREP(i,e,s) for(register int i=e; i>=s; i--)
#define ll long long
#define DE(...) fprintf(stderr,__VA_ARGS__)
#define DEBUG(a) DE("DEBUG: %d\n",a)
#define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)

int read() {
int x=0,f=1,ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}

const int MAXN=1000000+10;

const int N=1000000;

int a[MAXN];

int _rand(int l,int r) {
return rand()%(r-l+1)+l;
}

int main() {
freopen("data.out","w",stdout);
srand(time(0));
printf("%d\n",_rand(1,2));
const int omega=1000000;
int T=0;
for(int i=1; i<=omega; i++) {
int x=_rand(1,N);
if(x%6==1) {
int y=_rand(1,3);
if(y==1) {T++;
printf("x:%d y:%d T+1\n",x,y);
}
else printf("x:%d y:%d T+0\n",x,y);
}
else printf("x:%d\n",x);
}

printf("Ω:%d T:%d\n",omega,T);

return 0;
}

green,python代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import random


T=0
Omega=1000000
N=1000000

fp=open("./data.txt","w+")
for i in range(1,Omega):
x=random.randint(1,N)
if(x%6==1):
y=random.randint(1,3)
if(y==1):
T+=1
print("x:",x," y:",y," T+1",file=fp)
else:
print("x:",x," y:",y," T+0",file=fp)
else:
print("x:",x,file=fp)

print("Ω:",Omega," T:",T,file=fp)

fp.close()

计算机模拟的结果如下:

单机此处下载 /data.txt

最终 Ω=1000000\Omega=1000000 T=55506T=55506

P2=TΩ=555061000000=0.055506118P_2=\frac{T}{\Omega}=\frac{55506}{1000000}=0.055506\approx\frac{1}{18}

参考答案的计算方式

我在这里简单描述一下参考答案的计算方式。

对于一个人群,其中有 16\frac{1}{6} 的正常男性,则可知男性中 BB:Bb=5:1BB:Bb=5:1 。假设不考虑考虑男性配子致死的情况,则该人群中正常男性产生的配子比例 B:b=11:1B:b=11:1 。又由于有一半的 bb 致死,则比例为 B:b=11:0.5=22:1B:b=11:0.5=22:1 。则男性群体中产生 bb 配子的概率为 P2=123P_2=\frac{1}{23} 。这样得出的答案

P=P1×P2=116×123=1368P=P_1\times P_2=\frac{1}{16}\times\frac{1}{23}=\frac{1}{368}

应选C。

然而,这样计算得来的 P2P_2 与计算机模拟的结果不同。

我认为的计算方式

对于个体6,记她所遇到的男性个体为乙病携带者的事件为 SS ,所遇到不为乙病携带者的事件为 TT 。显然 P(S)=16P(S)=\frac{1}{6}P(T)=56P(T)=\frac{5}{6}

将正常男性群体产生的配子分为两类,一类为纯合子产生的配子 B1B_1 ,另一类为杂合子产生的配子 B2B_2b2b_2

然后再考虑个体6所遇的配子的问题。记个体6的配子 bbb2b_2 相遇的事件为 YY

显然

P2=P(SY)=P(S)×P(YS)=16×13=118P_2=P(SY)=P(S)\times P(Y|S)=\frac{1}{6}\times\frac{1}{3}=\frac{1}{18}

简单来说,就是个体6有 16\frac{1}{6} 的可能与一名携带乙病基因的男性交配,而与一名携带乙病基因的男性交配后代为乙病的概率为 13\frac{1}{3} ,因而个体6与人群中正常男性交配后代患乙病的概率 P2=13×16P_2=\frac{1}{3}\times\frac{1}{6}

两种计算方式答案不同的分析

参考答案错误的可能原因

对于参考答案的计算方式,我们可以理解为,将人群中所有正常男性的配子放在一起,再从这些配子中随机选取一个。这样可以解释为什么分母为 2323

这样对于存在致死的男性的配子,他们的配子在整个男性人群中则会少去致死的那一部分,使存在致死男性的竞争力减弱。

简单来说,例如这里有 1212 名男性,其中 1010 人为 BBBB22 人为 BbBb 。假设每个人产生两个配子。一共会产生 12×21=2312\times2-1=23 个配子。则产生配子的比例为 B1:B2:b2=20:2:1B_1:B_2:b_2=20:2:1 。如果直接从这 2323 个配子中计算比例,那么对于 BbBb 男性人群与个体6交配的概率为 B2+b2B1+B2+b2=1+323<16\frac{B_2+b_2}{B_1+B_2+b_2}=\frac{1+3}{23}<\frac{1}{6} 。这与事实是矛盾。

事实情况应保证个体6与任意男性交配的概率相当,即个体6与 BbBb 男性群体交配的比例应当为 16\frac{1}{6} 。解决这一问题就需要分步进行讨论。

两种计算方式的适用性

如果对于人类群体而言,我认为,应当使用后面的计算方式。

如果对象是花粉传播的植物,若假设所有不携带乙病基因的雄性植株个体产生的花粉数相同,而携带乙病基因的雄性植株产生的花粉少 14\frac{1}{4} ,那么携带乙病基因的植株竞争力会减弱,则应当使用参考答案的方式。

我的态度

以下为我的态度,可能存在事实性错误

我认为参考答案的计算方法不符合实际,应为答案错误。 对于这样一个实际问题,不存在两种答案,更不存在一种更精确一种高级的说法,一定存在唯一正确的答案。 对于是否“超纲”的问题,我尚不清楚,但可以肯定的是往年高考出现过配子致死的题目。

恳请老师同学对我的想法批评指导。与我联系me@micdz.cn

参考资料



[1]. 2020学年第一学期浙南名校联盟第一次联考高三年级生物试题卷

鸣谢

感谢邓毅萍老师。
感谢许锜桐同学。