民族遗传怎么计算的

Python086

民族遗传怎么计算的,第1张

登录

首页

学习

实践

活动

专区

工具

TVP

返回腾讯云官网

邓飞

312 篇文章

关注

全同胞家系如何计算遗传力及育种值

2022-12-13 17:03:35阅读 610

大家好,我是飞哥,今天是农历七月初七,中国的情人节,祝大家节日快乐,有情人终成眷属,单身的尽快脱单。

全同胞家系如何计算遗传力和育种值,本篇介绍一下实现方法和代码。用到的软件有asreml和lme4。

示例数据和代码可以加入星球内自行下载。

1. 什么是全同胞家系

全同胞家系,由同父同母所生子女的集合体称为全同胞家系。

比如父本是A1,A2,A3,母本是B1,B2,B3,如果A1B1,A2B2,A3*B3,每个配对分别有10个后代,比如:

A1*B1,有10个后代,分别是:A1B1_1, A1B1_2……,A1B1_10,那么这10个后代为一个全同胞家系

上面共有30个个体,属于3个全同胞家系

2. 全同胞家系的遗传力计算

全同胞家系的遗传力计算,根据是否有近交分为不同的方法:

无近交的全同胞:(比如自然授粉的林木、动物等)

h2 = 2*(Vf + Vm)/(Vf+Vm+Vfm+Ve)

有近交的全同胞:(比如玉米自交系、小麦、大豆等)

h2 = (Vf + Vm)/(Vf+Vm+Vfm + Ve)

这里总结了一个万能公式的,即是考虑近交系数,整体结论:

3. 案例演示

方差组分的计算方法,可以通过方差分析的形式,间接计算各个因素的方差组分,也可以用混合线性模型,直接计算方差组分。这里使用混合线性模型的方法。

数据:

3.1 免费的lme4解决方案

构建模型

这里,模型报错了:因为有个因素的方差组分为0,所以报错为:boundary

boundary (singular) fit: see help('isSingular')

复制

上面的方差组分中:

Vf:0.016149

Vm: 0

Vfm: 0.0004889

Ve: 0.0514236

计算遗传力

上面方差组分已经给出了,所以按照公式计算就行了:

h

2

f

u

l

l

f

a

m

i

l

y

=

2

(

V

f

+

V

m

)

V

f

+

V

m

+

V

f

m

+

V

e

># 遗传力

># 2*(Sire+Dam)/(Sire+Dam+Sire:Dam+residual)

>2*(0.0161499+0.0000000)/(0.0004889+0.0161499+0.0000000+0.0514236)

[1] 0.4745616

复制

计算育种值BLUP

下面结果中,分别有:父本的BLUP值,母本的BLUP值,以及父本和母本交互的BLUP值。

也可以说包括:父本的一般配合力,母本的一般配合力,以及父母之间的特殊配合力。

>coef(mod1) # 育种值

$`Sire:Dam`

(Intercept) Tank2 Tank3

mal1:fem12.618475 0.03724698 0.01540789

mal1:fem22.627160 0.03724698 0.01540789

mal1:fem32.627732 0.03724698 0.01540789

mal1:fem42.630949 0.03724698 0.01540789

mal1:fem52.631864 0.03724698 0.01540789

mal1:fem62.624565 0.03724698 0.01540789

mal1:fem72.625244 0.03724698 0.01540789

mal1:fem82.627329 0.03724698 0.01540789

mal2:fem12.618231 0.03724698 0.01540789

mal2:fem22.619497 0.03724698 0.01540789

mal2:fem32.627392 0.03724698 0.01540789

mal2:fem42.620567 0.03724698 0.01540789

mal2:fem52.620408 0.03724698 0.01540789

mal2:fem62.622807 0.03724698 0.01540789

mal2:fem72.627750 0.03724698 0.01540789

mal2:fem82.629736 0.03724698 0.01540789

mal3:fem12.627502 0.03724698 0.01540789

mal3:fem22.616568 0.03724698 0.01540789

mal3:fem32.624115 0.03724698 0.01540789

mal3:fem42.636351 0.03724698 0.01540789

mal3:fem52.626824 0.03724698 0.01540789

mal3:fem62.628414 0.03724698 0.01540789

mal3:fem72.630178 0.03724698 0.01540789

mal3:fem82.625393 0.03724698 0.01540789

mal4:fem12.625201 0.03724698 0.01540789

mal4:fem22.637076 0.03724698 0.01540789

mal4:fem32.613214 0.03724698 0.01540789

mal4:fem42.615317 0.03724698 0.01540789

mal4:fem52.628018 0.03724698 0.01540789

mal4:fem62.619636 0.03724698 0.01540789

mal4:fem72.623354 0.03724698 0.01540789

mal4:fem82.628650 0.03724698 0.01540789

mal5:fem12.623366 0.03724698 0.01540789

mal5:fem22.615097 0.03724698 0.01540789

mal5:fem32.632922 0.03724698 0.01540789

mal5:fem42.627520 0.03724698 0.01540789

mal5:fem52.632250 0.03724698 0.01540789

mal5:fem62.624192 0.03724698 0.01540789

mal5:fem72.628797 0.03724698 0.01540789

mal5:fem82.633027 0.03724698 0.01540789

mal6:fem12.624464 0.03724698 0.01540789

mal6:fem22.639064 0.03724698 0.01540789

mal6:fem32.630475 0.03724698 0.01540789

mal6:fem42.627757 0.03724698 0.01540789

mal6:fem52.623259 0.03724698 0.01540789

mal6:fem62.627856 0.03724698 0.01540789

mal6:fem72.626831 0.03724698 0.01540789

mal6:fem82.621637 0.03724698 0.01540789

mal7:fem12.625796 0.03724698 0.01540789

mal7:fem22.616051 0.03724698 0.01540789

mal7:fem32.635939 0.03724698 0.01540789

mal7:fem42.621669 0.03724698 0.01540789

mal7:fem52.620610 0.03724698 0.01540789

mal7:fem62.629153 0.03724698 0.01540789

mal7:fem72.625289 0.03724698 0.01540789

mal7:fem82.615246 0.03724698 0.01540789

mal8:fem12.636898 0.03724698 0.01540789

mal8:fem22.630099 0.03724698 0.01540789

mal8:fem32.608405 0.03724698 0.01540789

mal8:fem42.620194 0.03724698 0.01540789

mal8:fem52.624137 0.03724698 0.01540789

mal8:fem62.630151 0.03724698 0.01540789

mal8:fem72.620476 0.03724698 0.01540789

mal8:fem82.626033 0.03724698 0.01540789

$Dam

(Intercept) Tank2 Tank3

fem12.498704 0.03724698 0.01540789

fem22.521068 0.03724698 0.01540789

fem32.507300 0.03724698 0.01540789

fem42.511590 0.03724698 0.01540789

fem52.744273 0.03724698 0.01540789

fem62.724599 0.03724698 0.01540789

fem72.762486 0.03724698 0.01540789

fem82.733753 0.03724698 0.01540789

$Sire

(Intercept) Tank2 Tank3

mal12.625472 0.03724698 0.01540789

mal22.625472 0.03724698 0.01540789

mal32.625472 0.03724698 0.01540789

mal42.625472 0.03724698 0.01540789

mal52.625472 0.03724698 0.01540789

mal62.625472 0.03724698 0.01540789

mal72.625472 0.03724698 0.01540789

mal82.625472 0.03724698 0.01540789

复制

3.2 付费的asreml解决方案

构建模型

计算遗传力

asreml中有函数可以直接计算遗传力和标准误。

计算育种值

asreml中有函数,可以直接计算BLUP值以及标准误。

>summary(m2,coef=T)$coef.random # 育种值

solutionstd.error z.ratio

Sire_mal1

最佳线性无偏预测(Best Linear Unbiased Prediction,简称BLUP)可以对多环境数据进行整合,去除环境效应,得到个体稳定遗传的表型。BLUP是表型处理的常用做法。R包lme4中lmer函数是BLUP分析常用的方法,在很多 NG文章 都引用了该方法。

下面将用实际数据演示多环境无重复数据和多环境有重复数据的过程。首先安装lme4包。

数据格式如下,数据是每个环境叠加的。 有人喜欢用数字表示系名或环境,这样应该把lines和env转换为因子。缺失值用NA表示。

接下我们用lmer进行BLUP分析,在lmer中 1|env 表示把env当作随机效应,我们把env和lines当作随机效应。

我们可以得到遗传方差(即lines的方差) 和残差方差 。遗传力 . 是遗传方差, 是残差方差, 是环境个数。

我们用ranef函数获取随机效应值,blups返回一个list,包含env和lines的随机效应值即BLUP。 blp@beta 为整体均值。

数据格式也是叠加的,多了一列rep表示重复。

多环境有重复的分析中,重复rep是嵌套在环境里, rep%in%env 表示嵌套。有重复的数据还可以分析基因型和环境的互作效应。

遗传力公式为 。 为基因与环境互作方差, 一个环境的重复数, 为环境个数。

遗传力又称遗传率,指遗传方差在总方差(表型方差)中所占的比值,可以作为杂种后代进行选择的一个指标。遗传力分为单株遗传力、家系遗传力、小区遗传力、个体遗传力。动物中一般用个体遗传力,植物中一般用家系遗传力。

遗传力介绍详细介绍见邓飞老师博客 https://zhuanlan.zhihu.com/p/368057210?ivk_sa=1024320u

https://cloud.tencent.com/developer/article/1445670

对于不同的数据,遗传力计算方法有所不同,本篇文章是对多年单点有重复数据进行遗传力计算。

在计算前,需要将考虑的因素变为因子(Factor)

参照某平台的课程,到这里,一切都是熟悉的样子,天真的我开始和大多数时候一样的操作,复制粘贴——改数据名称,内心毫无波澜,甚至有些急迫地等待结果好继续下面的分析,然而……

这时出现了一长串warning,警告lme4:模型无法与 max | grad | 收敛,但是有输出结果,所以只是一晃而过,也没有太在意,然后查看一下:

哎???品种、年份、残差、品种和年份的互作,方差竟然一模一样!这,这就不对了吧!为了找到问题所在,不再忽略警告,重新运行一次。这里建议大家,不要一开始就选择忽略所有warning,这里的数据是恰好算出来一模一样,如果不是这样的话,很容易被误导,拿到错误结果。

结果依然报错:grouping factors must have >1 sampled level,并且没有输出结果。

继续搜帖子,然后发现,教程里要不然就是单年多点的数据,要不然就是多年多点有重复的数据,为什么没有多年单点有重复的呢?多年多点的模型如下:

emm……为什么这么模型里完全没出现区组和重复呢?

参者这个模型,如果把Loc全部删掉,那我的重复就没有任何意义了;如果把这个模型里的Loc都替换成Blk,也不对,Blk不是一个独立的因子,不能单独存在于函数里。最符合我的理解的,Blk%in%Year,重复嵌套在年份里,也不对,想到前面Blue值计算中,Blk和Year的互作效应,继续尝试:

m2虽然出现了warning,但是有运算结果。可是我也不能确定,这个是不是准确的结果。

为验证R中结果的可靠性,利用SAS进行了计算验证:

从上到下依次为环境方差、区组方差、基因型方差、基因型与环境互作方差、误差方差。

数字上来看,SAS与m2的结果基本一致。

我的疑问在于,SAS中,写法为Blk(Year)和Cul*Year,分别是嵌套和互作,但是为什么在lme4中,都是(1|Year:Cul) 和(1|Blk:Year)交互的写法?而且这样得到的结果竟然是一致的。如果有大佬理解其中的原理,还烦请浪费几分钟,告诉我为什么,不胜感激!

到这里为止,各组分的方差终于可以确定,剩下的部分就是套公式了,公式如下:

Vg:遗传方差(Cul,131.91)

Vge:基因与环境的互作方差 (Year:Cul, 126.75)

l:环境个数 (年份:2)

VΣ:残差 (Residual: 143.54)

r:区组个数 (3)

当然,在上述模型中没有考虑另外一些互作,比如Cul:Blk,Cul:Blk:Year等等,是因为互作考虑的太多,遗传力计算会很复杂,所以这样设置模型主要是便于计算。