大家好,我是飞哥。
最近有老师问如何计算多个育种值的综合育种值,因为选择育种时,需要考虑多个性状,而这些性状单位不一样,怎么合并计算?
这里面其实就是包括两部分内容:
1,多个性状的育种值进行标准化
2,多个性状的育种值赋予权重
为何要进行标准化?
所谓标准化,就是将数据变为平均数为0,方差为1的数据集。将所有性状都标准化,就意味着这些性状的尺度都是一样的,是一个总体,可以进行加减乘除的操作。然后可以对不同的性质设置不同的权重,才可以进行综合育种值的计算。
标准化就是将育种值减去平均育种值,然后除以标准差。公式如下:
为何要对不同性状赋予权重?
因为我们的选择时,不同的性状重要程度不同,我们可以对不同的性状赋予不同的权重,这个权重是我们自己设置的,要求是性状的权重绝对值之和为1。
下面我们用一组数据来介绍一下计算方法,首先模拟一个数据,包括ID,y1,y2,y3三个性状。
library(tidyverse)
# 模拟数据
set.seed(123)
dat = data.frame(ID = 1:100,y1=rnorm(100)+10, y2 = rnorm(100)+20, y3=rnorm(100))
head(dat)
第一种计算方法:tidyverse方法
基本逻辑是根据across,批量提取y开头的性状,然后进行标准化,最后使用mutate进行修改。最后将权重对应的性状相乘,相加变为综合育种值。
# 标准化
d1 = d1 %>% mutate(across(starts_with("y"),scale))
# 赋予权重
d1 = d1 %>% mutate(index = y1*0.3 + y2*0.3 + y3*0.4)
head(d1)
第二种方法:比较直观但是麻烦的方法
# 传统方法
d2 = dat
head(d2)
d2$y1 = (d2$y1-mean(d2$y1))/(sd(d2$y1))
d2$y2 = (d2$y2-mean(d2$y2))/(sd(d2$y2))
d2$y3 = (d2$y3-mean(d2$y3))/(sd(d2$y3))
d2$index = d2$y1*0.3 + d2$y2*0.3 + d2$y3*0.4
head(d2)
两者结果是一致的。
注意:
1,如果有些性状是负向选择,比如玉米含水量,猪的百公斤日龄,那就将权重设置为负数。
2,多性状选择时,尽量不要超过5个性状,否则就没有重点,效果也不佳。
3,权重的设置,来源于育种的经验数值,科学的确定权重的大小,需要考虑经济效益。
代码汇总:
library(tidyverse)
# 模拟数据
set.seed(123)
dat = data.frame(ID = 1:100,y1=rnorm(100)+10, y2 = rnorm(100)+20, y3=rnorm(100))
head(dat)
d1 = dat
# 标准化
d1 = d1 %>% mutate(across(starts_with("y"),scale))
# 赋予权重
d1 = d1 %>% mutate(index = y1*0.3 + y2*0.3 + y3*0.4)
head(d1)
# 传统方法
d2 = dat
head(d2)
d2$y1 = (d2$y1-mean(d2$y1))/(sd(d2$y1))
d2$y2 = (d2$y2-mean(d2$y2))/(sd(d2$y2))
d2$y3 = (d2$y3-mean(d2$y3))/(sd(d2$y3))
d2$index = d2$y1*0.3 + d2$y2*0.3 + d2$y3*0.4
head(d2)
head(d1)
分割线
大家好,我是邓飞,一个持续分享的农业数据分析师,这里我将自己公众号的干货内容挑重点罗列一下,方便大家阅读和使用。
1,GWAS学习教程(快来领取 | 飞哥的GWAS分析教程),这个pdf是我将公众号的内容进行了汇总,更方便从头学习GWAS分析,里面配套了数据、代码和讲解,属于干货推荐的Number 1。
2,农学人如何入门数据分析资料汇总(飞哥汇总 | 入门数据分析资源推荐),里面推荐了免费的教程,包括编程、统计和专业书籍。
3,数量遗传学电子书下载(数量遗传学,分享几本书的电子版)
4,R语言电子书线上书籍推荐(R语言学习看最新版的电子书不香嘛?)
加微信好友,互秀朋友圈呀,你扫我,还是我扫你?
联系客服