基因组选择育种-2.1.最佳线性无偏估计
最佳线性无偏估计:基因组选择育种的“最优”预测工具
在基因组选择育种中,我们评估个体遗传价值的核心工具是最佳线性无偏估计(BLUE)和最佳线性无偏预测(BLUP)。它们确保了我们对固定效应的估算和随机效应的预测都是最精确、最可靠的。
1. 核心概念:“最优”、“线性”与“无偏”
无论BLUE还是BLUP,它们都具备三个关键特性:
- 线性(Linear): 估算或预测值是基于观测数据(比如表型值)的线性组合。
- 无偏(Unbiased): 估算或预测结果没有系统性偏差,长期来看平均值等于真实值。
- 最佳(Best): 在所有线性和无偏的方法中,它们的方差最小,意味着结果最接近真实值,精度最高。
2. 最佳线性无偏估计(BLUE):估算固定效应的“精确测量尺”
BLUE主要用于估算固定效应的真实值。固定效应是我们感兴趣的、非随机的特定类别或处理水平,例如不同品种的平均产量、不同年份对性状的影响或性别的平均差异。
通俗理解: 就像你要精确测量几个特定物品的长度,BLUE会给你最准确、无偏差的测量结果。
应用场景:
- 比较不同玉米品种的平均产量。
- 评估不同饲养方案对动物生长性能的平均影响。
R 代码示例:使用 lm()
进行 BLUE 估算
对于简单的固定效应模型,R 中的 lm()
函数就能实现 BLUE 估算(在线性模型假定下)。
# 假设有以下数据:玉米产量 (yield),品种 (variety),年份 (year)
data <- data.frame(yield = c(80, 85, 75, 90, 92, 88, 70, 78, 82, 85, 95, 89),variety = rep(c("A", "B", "C"), each = 4),year = rep(c(2023, 2023, 2024, 2024), 3)
)# 估算不同品种的固定效应
# 这里 'variety' 被视为固定效应,模型会估算每个品种的平均产量(相对于参考水平)
model_blue <- lm(yield ~ variety, data = data)
summary(model_blue)# 结果中的 Coefficients 部分会显示品种A、B、C的效应估算(其中一个品种作为截距参考)
# 例如:
# Coefficients:
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 86.250 2.100 41.066 < 2e-16 *** (品种 A 的估计平均值)
# varietyB -1.750 2.970 -0.589 0.569 (品种 B 相对于品种 A 的差异)
# varietyC -5.750 2.970 -1.936 0.083 (品种 C 相对于品种 A 的差异)
3. 最佳线性无偏预测(BLUP):预测随机效应的“水晶球”
BLUP主要用于预测随机效应的真实值。这些效应通常是我们无法直接测量但又需要知道的个体特定值,例如每个个体的育种值。BLUP能整合亲缘关系、群体结构等信息,对这些随机的、未知的效应进行最佳预测。
通俗理解: 就像你要预测一个未来冠军赛马的潜力,你不能直接测量它的“冠军基因”,但你可以根据它的血统、兄弟姐妹的表现,以及自身特点等,用BLUP来预测它的遗传潜力。BLUP还会把极端的预测值拉向群体平均值,因为极端情况往往是偶然因素。
应用场景:
- 估算动物的育种值,用于筛选优秀的种畜。
- 预测植物株系的遗传潜力。
R 代码示例:使用 lme4
包进行 BLUP 预测
在R中,lme4
包常用于处理混合线性模型,从而实现BLUP预测。这里我们以一个简单的动物模型来预测个体的育种值。
# 假设有以下数据:产奶量 (milk),个体ID (animal_id),以及一个随机的环境因子 (pen)
# 为了简化,我们假设个体间有某种隐式关系,实际中会提供亲缘关系矩阵
library(lme4)data_blup <- data.frame(milk = c(25, 28, 22, 30, 26, 29, 23, 31, 27, 24),animal_id = factor(1:10), # 假设10个个体pen = factor(c(1,1,2,2,3,3,1,1,2,2)) # 假设存在圈舍(随机效应)
)# 构建一个简单的混合模型:产奶量受固定效应(截距)和随机效应(个体ID和圈舍)影响
# 这里的 (1|animal_id) 表示 animal_id 是一个随机效应,用于预测每个个体的随机遗传效应(类似育种值)
# (1|pen) 表示 pen 是一个随机效应,用于预测每个圈舍的随机效应
model_blup <- lmer(milk ~ 1 + (1|animal_id) + (1|pen), data = data_blup)# 提取随机效应的预测值 (BLUPs)
# random.effects() 或 ranef() 函数可以获取随机效应的预测值
random_effects <- ranef(model_blup)# 查看个体ID的随机效应(这可以视为简化的育种值预测)
print(random_effects$animal_id)
# 实际的基因组BLUP (GBLUP) 会更复杂,需要传入基因组亲缘关系矩阵 (G矩阵)
# 这通常需要 'BGLR' 或 'sommer' 等更专业的包来处理
# 例如,使用sommer包 (需要提前计算G矩阵):
# library(sommer)
# data_gblup <- data.frame(
# yield = c(80, 85, 75, 90, 92, 88),
# line = factor(1:6) # 系谱线或个体ID
# )
# G_matrix <- diag(6) # 假设一个单位矩阵作为示例G矩阵,实际需要根据SNP数据计算
# ans <- mmer(yield ~ 1,
# random = ~vs(line, G = G_matrix), # G = G_matrix 指定基因组亲缘关系矩阵
# data = data_gblup)
# GEBVs <- ans$U$`u:line`$yield # 获取基因组育种值
# print(GEBVs)
4. BLUE与BLUP的协同作用
在实际的基因组选择中,我们几乎总是使用一个混合线性模型,它能同时估算固定效应(用BLUE)和预测随机效应(用BLUP)。比如,在评估奶牛的产奶量时,我们会把农场、年份等作为固定效应(用BLUE估算它们的平均影响),而把每头奶牛自身的遗传潜力(育种值)作为随机效应(用BLUP进行预测)。这种综合分析能让我们更全面、更准确地进行遗传评估,从而做出最佳的育种决策。