BLUE和BLUP的比较及使用R语言计算它们

听我说一句:这是我的学习笔记,仅供参考

现在的分析喜欢计算表型值

目前就只有三个答案计算表型值:

1 平均值

2 BLUE值 (最佳线性无偏估计, 固定因子)

3 BLUP值 (最佳线性无偏预测, 随机因子)

1 各自的原理

1.1 BLUE

植物育种,感觉多年多点的数据,其实应该用BLUE,但是目前大多数都用BLUP了。在论坛的讨论如下,

论坛来源:https://www.researchgate.net/post/Does-any-one-have-an-idea-of-which-one-BLUE-or-BLUP-to-use-for-a-GWAS-analysis-of-a-trait-in-wheat-eg-resistance-to-rust

问题:

在这里插入图片描述

回答1:

在这里插入图片描述

回答2:

在这里插入图片描述

论坛说用BLUE好

1.2 BLUP

动物育种用这个多

参考文章1:https://www.omicsclass.com/article/1380

参考文章2:https://cloud.tencent.com/developer/article/1771941

BULP的优点:

  • 能有效地充分利用所有亲属的信息
  • 能更有效地校正环境效应
  • 能校正由于非随机交配(选择交配)造成的偏差
  • 能考虑不同群体及不同世代的遗传差异(注意:不同群体联合评定时,群体间有一定的遗传联系)
  • 能提供个体育种值的最精确的无偏估计值

1.3 BLUE值和BLUP值

BLUP —— Best Liner Unbiased Prediction 最佳线性无偏预测

BLUE —— 最佳线性无偏估计

  • **「BLUE」**值,相当于是对混合线性模型中固定因子的估算
  • **「BLUP」**值,相当于是对混合线性模型中随机因子的预测

BLUE值一般是矫正的表型值,尺度和表型值一致,如果是多个重复或者多年多点的数据,可以将其代替平均值进行相关GS和GWAS的分析。

BLUP值一般用于品种排名,品种选种时的依据。

2 计算BLUP育种值(多环境无重复)

使用R语言计算BLUP。

多环境:意味着实验在多个不同的环境中进行,比如不同的地点、年份、栽培条件等。

无重复:在每个环境中,基因型样本没有重复。这意味着同一个基因型在某个特定环境下只出现一次,没有进行重复实验。

2.1 读入数据

数据格式

 lines env   y                 
  <chr> <chr> <chr>             
1 sanple1 env1  29.2              
2 sanple2 env1  25.399999999999995
3 sanple3 env1  NA                
4 sanple4 env1  27.1              
5 sanple5 env1  28.633333333333336
6 sanple6 env1  29.933333333333334
7 sanple1 env2  29              
8 sanple2 env3  25
9 sanple3 env4  27                
10 sanple4 env5  NA              
11 sanple5 env6  28.6
12 sanple6 env7  29.93

getwd()
library(lme4)
library(readxl)
data <- read_excel("blup_DATA.xlsx",sheet = 1,col_names = TRUE)
head(data)
# 使用 sapply 查看数据框每列的类
sapply(data, class)

2.2 转换因子—数据清洗

#因子是一种用于分类数据的特殊类型,通常用于表示分类变量。
# 将 data$lines 列转换为因子类型
data$lines=factor(data$lines)
# 将 data$env 列转换为因子类型
data$env=factor(data$env)

##报错发现没有将y列转换成数值
#将 y 列转换为数值类型:
data$y = as.numeric(data$y)
# 删除含有NA值的行
data <- na.omit(data)

#再次查看一下数据类型
sapply(data, class)

2.3 BLUP的计算

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

blp=lmer(y~(1|env)+(1|lines),data=data)
blp

计算结果

> summary(blp)
Linear mixed model fit by REML ['lmerMod']
Formula: y ~ (1 | env) + (1 | lines)
   Data: data

REML criterion at convergence: 17441.4

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-4.0656 -0.5439 -0.0272  0.5378  5.7567 

Random effects:
 Groups   Name        Variance Std.Dev.
 lines    (Intercept) 17.3720  4.1680  
 env      (Intercept)  0.2514  0.5014  
 Residual             11.8308  3.4396  
Number of obs: 3039, groups:  lines, 615; env, 5

Fixed effects:
            Estimate Std. Error t value
(Intercept)  28.2340     0.2871   98.33

2.4 计算遗传力

遗传力的计算公式

img

#遗传力的计算
H = 17.3720/(17.3720 + 11.8308/5)
H

数据来源

在这里插入图片描述

2.5 获取BLUP育种值

ranef函数获取随机效应值。

blups返回一个list,包含env和lines的随机效应值即BLUP。

blp@beta为整体均值。

#获取BLUP值
blups= ranef(blp)
names(blups)
lines=blups$lines+blp@beta
res=data.frame(id=rownames(lines),blup=lines)

#保存BLUP育种值
write.table(res,file="data_blup_result.txt",row.names = F,quote = F,sep="\t")

2.6 描述性统计

#画一个柱状图看看
hist(lines[,1],col="black",border="white",xlab="BLUP of lines",main="")
#描述统计读入数据
PL_BLUP <- read.table("data_blup_result.txt",header = T,sep = "\t")
#install.packages("fBasics")
library(fBasics)
#描述统计
summary(data_BLUP$X.Intercept.)
var(data_BLUP$X.Intercept.) #方差
sd(data_BLUP$X.Intercept.) #标准差
skewness(data_BLUP$X.Intercept.) #偏度
kurtosis(data_BLUP$X.Intercept.) #计算峰度

在r中没有直接函数可以调用,但是有两个包可以使用:moments、fBasics

这两个包区别是:峰度moments没有减3,fBasics减3

3 计算BLUE育种值

该计算方式是昨年写的,又复习了一遍

3.1 读入数据

Line:品种名 Rep:重复(基因型重复) Year:种植年份 Loc:地理位置 Trait:表型数据

从上往下垒:

Line	 Rep	Year	Loc	Trait
C005	3	2018	SZ	110.8
C007	3	2018	SZ	101.6
C009	3	2018	SZ	98.2
C015	3	2018	SZ	94
C018	3	2018	SZ	101
C019	3	2018	SZ	100.2
C020	3	2018	SZ	NA
C021	3	2018	SZ	124.2
C023	3	2018	SZ	94.4
C005	3	2019	BJ	110
C007	3	2019	BJ	101.63
C009	3	2019	BJ	98.35
C015	3	2019	BJ	94.89
C018	3	2019	BJ	101
C019	3	2019	BJ	100
C020	3	2019	BJ	102
C021	3	2019	BJ	NA
C023	3	2019	BJ	94.8

3.2 计算BLUE和遗传力

getwd()
library(lme4)
options(lmerControl=list(check.nobs.vs.rankZ ="warning",
                         check.nobs.vs.nlev = "warning",
                         check.nobs.vs.nRE= "warning",
                         check.nlev.gtreq.5 = "warning",
                         check.nlev.gtr.1= "warning"))
phe <- read.table("你的数据",header = T,
                  sep = "\t")
trait <- phe$Trait
line <-  phe$Line
loc <-  phe$Loc
Rep <- phe$Rep
year <- phe$Year
TRAIT <- as.numeric(trait)
LINE <-  as.factor(line)
LOC <- as.factor(loc)
REP <-  as.factor(Rep)
YEAR <-  as.factor(year)
blue <-  lmer(TRAIT~ line + (1|loc) + (1|loc:Rep) + (1|year),data = phe)
as.data.frame(fixef(blue))
summary(blue)
#install.packages("lsmeans")
library(lsmeans)
re = lsmeans(blue,"line") 
re
write.table(re,"re_BLUE.txt",sep = "\t")

#这个方法也能直接计算遗传力:
blue_h <- lmer(TRAIT~(1|LINE)+(1|LOC)+
               (1|YEAR)+(1|REP%in%LOC:YEAR)+(1|LINE:LOC)+(1|LINE:YEAR))
summary(blue_h)
#计算公式:H2=Vg/{Vg+(VGL/L)+(VGY/Y)+(VE/LYR)},
#其中H2为广义遗传力,
#Vg、VGL、VGY、VE分别为遗传方差、基因型与地点互作方差、基因型与年份互作方差、残差方差,
#L、Y、R为地点数、年份数、重复数。

##line是遗传方差,LINE:LOC 是基因型与地点互作方差Vgl,
##LINE:YEAR是品种与年份互作方差Vgy,Residual是残差方差Ve,
##以上都是取第一列的数值,重复数R,年份数Y,环境个数L
  (1|YEAR)+(1|REP%in%LOC:YEAR)+(1|LINE:LOC)+(1|LINE:YEAR))

summary(blue_h)
#计算公式:H2=Vg/{Vg+(VGL/L)+(VGY/Y)+(VE/LYR)},
#其中H2为广义遗传力,
#Vg、VGL、VGY、VE分别为遗传方差、基因型与地点互作方差、基因型与年份互作方差、残差方差,
#L、Y、R为地点数、年份数、重复数。

##line是遗传方差,LINE:LOC 是基因型与地点互作方差Vgl,
##LINE:YEAR是品种与年份互作方差Vgy,Residual是残差方差Ve,
##以上都是取第一列的数值,重复数R,年份数Y,环境个数L


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值