一文讲清楚动物模型中的母体效应
「母体效应」
是母亲对后代生活环境的影响(泌乳能力,母性等),是母亲带来的效应。
俗话说:“父挫,挫一个;母挫,挫一窝”。因为,母体效应很强大,母亲的影响力要甩父亲几条街。从遗传的角度,想要改良家族的基因和性格,男性找一个好的女性做配偶,比女性找一个好的男性做配偶,影响更大。
想到这里,忽然感觉结婚时,给女方大量的彩礼,也可以理解了。
女性对后代影响大,不只是从遗传的角度,还有环境的作用,还有交互的作用,更别提还有线粒体遗传呢!
我一直对个体永久环境效应
,母体遗传效应
,母体永久环境效应
分不清楚,构建模型时,总是知其然而不知其所以然,这种一瓶子不满半瓶子咣当
的状态显然不是一个段子说得好
的数据分析师应该具备的素养。
「所以,」
我就写篇博客介绍一下,顺便理清一下自己的思路。毕竟,你如果不炫富,别人怎么知道你有钱呢?你如果带着口罩,别人怎么知道你帅呢?你如果不看时间,别人怎么知道你有劳力士呢?你如果不写出来,别人怎么知道你有两把刷子呢?(高考作文排比句系列)
「所以,」
我就写篇博客,证明一下自己是一个有劳力士会讲段子帅气的数据分析师。
1. 几个概念
- 个体永久环境效应(Individual permanent environmental effect),也称为永久环境效应,一般是个体有重复值时可以将其剖分出来,比如鸡产蛋,猪产仔等。
- 母体遗传效应(Maternal genetic effect),一般我们将个体加性效应称为个体加性遗传效应,因为它会考虑个体间亲缘关系矩阵(A或者G或者H矩阵),如果母体作为随机因子,也考虑亲缘关系矩阵,就称为母体遗传效应。
- 母体环境效应(Maternal permanent environmental effect),也称为母体永久环境效应,在分析时作为随机因子,但是不考虑亲缘关系矩阵。
2. 母体效应包括两种
第一种:母体遗传效应,这里母体遗传效应也分为两种,一种是考虑母体遗传效应和个体加性效应协方差,一种是不考虑,不过默认都是考虑的。
第二种:母体环境效应,就是不考虑情缘关系矩阵,作为随机因子的那种模型。
3. 第一种:母体遗传效应
3.1 考虑母体遗传效应和个体加性效应协方差
「模型书写:」
这里:
- Xb为固定因子
- Za为随机因子,个体加性效应
- Zm_g为随机因子,母体遗传效应
- e为残差
「方差协方差结构:」
这里A为亲缘关系矩阵,可以看出加性和母体存在协方差,而且加性和母体都要考虑A矩阵。
「示例数据+示例代码+示例结果」
数据和代码:
# 载入软件包
# devtools::install_github("dengfei2013/learnasreml")
library(learnasreml)
# asreml属于商业版软件,需要购买,购买请联系:http://www.vsnc.com.cn/
library(asreml)
data("animalmodel.dat")
data("animalmodel.ped")
head(animalmodel.dat)
head(animalmodel.ped)
# m1 单性状动物模型
dat = animalmodel.dat
ped = animalmodel.ped
dat[dat==0] = NA
str(dat)
# 计算亲缘关系逆矩阵
# m1 单性状动物模型 + 母体遗传效应 + 加性效应和母体遗传效应互作
m1 = asreml(BWT ~ SEX + BYEAR, random= ~ str(~vm(ANIMAL,ainv) + vm(MOTHER,ainv), ~us(2):vm(ANIMAL,ainv)),
residual = ~ idv(units),data = dat)
summary(m1)$varcomp
vpredict(m1,h2 ~ V1/(V1+V2+V3+V4))
结果:
> summary(m1)$varcomp
component std.error z.ratio bound %ch
vm(ANIMAL, ainv)+vm(MOTHER, ainv)!us(2)_1:1 1.66469827 0.9069349 1.8355213 P 0.0
vm(ANIMAL, ainv)+vm(MOTHER, ainv)!us(2)_2:1 0.01602755 0.4968458 0.0322586 P 0.8
vm(ANIMAL, ainv)+vm(MOTHER, ainv)!us(2)_2:2 1.35818328 0.4194201 3.2382408 P 0.0
units!units 2.19186868 0.6632651 3.3046644 P 0.0
units!R 1.00000000 NA NA F 0.0
> vpredict(m1,h2 ~ V1/(V1+V2+V3+V4))
Estimate SE
h2 0.3182506 0.1714373
从结果可以看出:
- 加性方差组分:1.665
- 加性和母体遗传协方差组分:0.016
- 母体遗传方差组分:1.35
- 残差方差组分:2.19
由此计算的遗传力为0.318
3.2 不考虑母体遗传效应和个体加性效应协方差
「模型书写:」
这里:
- Xb为固定因子
- Za为随机因子,个体加性效应
- Zm_g为随机因子,母体遗传效应
- e为残差
「方差协方差结构:」
这里A为亲缘关系矩阵,可以看出,不考虑加性和母体协方差,而且加性和母体都要考虑A矩阵。
「示例数据+示例代码+示例结果」
这里,将us
变为diag
,即不考虑协方差。
m2.1 = asreml(BWT ~ SEX + BYEAR, random= ~ str(~vm(ANIMAL,ainv) + vm(MOTHER,ainv), ~diag(2):vm(ANIMAL,ainv)),
residual = ~ idv(units),data = dat)
summary(m2.1)$varcomp
vpredict(m2.1,h2 ~ V1/(V1+V2+V3))
结果:
> summary(m2.1)$varcomp
component std.error z.ratio bound %ch
vm(ANIMAL, ainv)+vm(MOTHER, ainv)!diag(2)_1 1.689122 0.5291361 3.192225 P 0.0
vm(ANIMAL, ainv)+vm(MOTHER, ainv)!diag(2)_2 1.366709 0.3151848 4.336215 P 0.1
units!units 2.174346 0.3932961 5.528523 P 0.0
units!R 1.000000 NA NA F 0.0
> vpredict(m2.1,h2 ~ V1/(V1+V2+V3))
Estimate SE
h2 0.3229569 0.09621066
从结果可以看出:
- 加性方差组分:1.68
- 母体遗传方差组分:1.36
- 残差方差组分:2.17
由此计算的遗传力为0.32
「另外一种写法:」可以和加性方差组分写法类似,直接用vm
函数,这种写法比较简单,但是没有考虑加性和母体遗传效应的协方差。
# m2 单性状动物模型 + 母体遗传效应
m2.2 = asreml(BWT ~ SEX + BYEAR, random= ~ vm(ANIMAL,ainv) + vm(MOTHER,ainv),
residual = ~ idv(units),data = dat)
summary(m2.2)$varcomp
vpredict(m2.2,h2 ~ V1/(V1+V2+V3))
> summary(m2.2)$varcomp
component std.error z.ratio bound %ch
vm(ANIMAL, ainv) 1.689188 0.5292161 3.191868 P 0
vm(MOTHER, ainv) 1.366777 0.3153196 4.334578 P 0
units!units 2.174264 0.3932864 5.528448 P 0
units!R 1.000000 NA NA F 0
> vpredict(m2.2,h2 ~ V1/(V1+V2+V3))
Estimate SE
h2 0.3229663 0.09621819
可以看到结果完全一样。
4. 第二种:母体环境效应
「模型书写:」
这里:
- Xb为固定因子
- Za为随机因子,个体加性效应
- Zm为随机因子,母体环境效应
- e为残差
「方差协方差结构:」
这里A为亲缘关系矩阵,可以看出,不考虑加性和母体协方差,而且加性和考虑A矩阵,母体不考虑A矩阵。
这里的母体环境效应,不考虑亲缘关系矩阵,将其作为随机因子即可。
# m3 单性状动物模型 + 母体环境效应
m3 = asreml(BWT ~ SEX + BYEAR, random= ~ vm(ANIMAL,ainv) + MOTHER,
residual = ~ idv(units),data = dat)
summary(m3)$varcomp
vpredict(m3,h2 ~ V1/(V1+V2+V3))
「结果:」
> summary(m3)$varcomp
component std.error z.ratio bound %ch
MOTHER 1.104038 0.2398000 4.603997 P 0
vm(ANIMAL, ainv) 2.277785 0.4970861 4.582274 P 0
units!units 1.656900 0.3734446 4.436803 P 0
units!R 1.000000 NA NA F 0
> vpredict(m3,h2 ~ V1/(V1+V2+V3))
Estimate SE
h2 0.2191107 0.04364284
5. 同时考虑母体遗传效应和母体环境效应
「模型书写:」
这里:
- Xb为固定因子
- Za为随机因子,个体加性效应
- Zm_g为随机因子,母体遗传效应
- Zm为随机因子,母体环境效应
- e为残差
「方差协方差结构:」
# m4 单性状动物模型 + 母体遗传效应 + 加性效应和母体遗传效应互作 + 母体环境效应
m4 = asreml(BWT ~ SEX + BYEAR, random= ~ str(~vm(ANIMAL,ainv) + vm(MOTHER,ainv), ~us(2):vm(ANIMAL,ainv)) + MOTHER,
residual = ~ idv(units),data = dat)
summary(m4)$varcomp
vpredict(m4,h2 ~ V1/(V1+V2+V3+V4+V5))
「结果:」
> summary(m4)$varcomp
component std.error z.ratio bound %ch
vm(ANIMAL, ainv)+vm(MOTHER, ainv)!us(2)_1:1 1.688055506 0.9091111 1.85681974 P 0.0
vm(ANIMAL, ainv)+vm(MOTHER, ainv)!us(2)_2:1 0.006385884 0.4954503 0.01288905 P 4.0
vm(ANIMAL, ainv)+vm(MOTHER, ainv)!us(2)_2:2 1.057027088 0.4405431 2.39937292 P 0.1
MOTHER 0.497693182 0.3694028 1.34729116 P 0.6
units!units 2.157268745 0.6628453 3.25455845 P 0.0
units!R 1.000000000 NA NA F 0.0
> vpredict(m4,h2 ~ V1/(V1+V2+V3+V4+V5))
Estimate SE
h2 0.3122311 0.1665252
5. 基因组选择如何应用母体遗传效应?
GBLUP或者SSGBLUP(一步法)的好处是,传统动物模型能用的模型,基因组选择都可以使用。一些性状在分析时,需要考虑重复力模型,母体遗传,母体环境等模型,分析结果会更准确。
6. 终于填坑完成
很多老师和同学和我交流,询问如何计算母体效应,如何计算母体遗传效应,如何计算母体环境效应,如何计算个体加性效应和母体遗传效应的交互等等,这次这篇博客一次性讲清楚了。
还有同学告诉我, 我之前的培训教程中,计算的母体效应,其实是母体环境效应(仅仅将母体作为随机因子,没有考虑系谱亲缘关系矩阵),我说我知道了,回头我写篇博客解释汇总一下。我看了一下聊天记录:2020年5月10号,这位同学,久等了。
7. 参考文献
❝张勤老师 2020年暑期summer school 统计遗传学暑期学校教材,中国农业大学 Lawrence R. Schaeffer, Linear Models and Animal Breeding, 2010 A R Gilmour, ASReml User Guide Release 4.1 Structural Specification, 2015 D G Butler, ASReml-R Reference Manual Version, 2018❞
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PyTorch版:集成注意力和MobileNet的YOLOv4
- 从源代码级别看懂MinIO对象存储网关的实现
- 4种主流超参数调优技术
- 一分钟学Python| 面向对象(上)
- Python 为什么不支持 switch 语句?
- 你还在认为 count(1) 比 count(*) 效率高?
- 一分钟学Python| 面向对象(中)
- uni-app自定义打包目录package.json命令配置
- 在Zeppelin中如何使用Hive
- B站真题:如何判断括号是否有效?
- (在模仿中精进数据可视化03)OD数据的特殊可视化方式
- Ubuntu20.04 体验和美化
- hadoop重用机制
- hadoop搭建完全分布式集群
- 一篇让你搞懂 Nginx