基于R语言的Lasso回归在水稻全基因组预测中的应用

基于R语言的Lasso回归在水稻全基因组预测中的应用

0 引言

全基因组选择是 21 世纪动植物育种的一种重要的选择策略,其核心就是全基因组预测,即基于分布在整个基因组上的多样性分子标记来对育种值进行预测,为个体的选择提供依据。

全基因组选择( genomic selection,GS) 是利用分布在整个基因组上的分子标记来估算育种值的一种高效、经济的方法.它实质上是估计所有基因或染色体片段的联合效应,并结合这些效应来预测基因组 估计的育种值( genomic estimated breeding value,GEBV)。

许多统计方法都可用于全基因组选择,包括贝叶斯方法( 贝叶斯 B) ,最佳线性无偏预测( BLUP) , 以及正则化线性模型( 岭回归、Lasso 回归和弹性网络) 等。但是对于预测农作物的性状而言没有一种方法是完美的,它们各有各的特点,而预测的效果取决于模型的性质与性状的特点和遗传结构。

本文基于R语言编写Lasso回归方法对水稻产量和产量相关性状进行全基因组预测分析。

1 材料与方法

1.1 实验数据

水稻的产量(yd)等形状的数据来自胡老师在qq群的分享,其最初来源是Gains in QTL detection using an ultra-high density SNP map based on population sequencing relative to traditional RFLP/SSR markers. 实验人员实验人员将珍汕 97 A 和明恢 63 两个水稻品种作为亲本,杂交产生 210 个重组自交系( recombinant inbred lines,RIL) ,从这些重组自交系中收集 4 个产量相关性状的表型数据,它们分别是水稻产量( yd) ,千粒重( kgw) ,分蘖数( tp) 和单株谷粒数 ( gn) 。将各个重复的性状的平均表型值作为响应变量。基因组数据由水稻基因组的约270 000 个 SNP 推断的 1 619 个组( bin) 表示。组内的所有 SNP 都具有完全相同的分离模式( 完全的连锁不平衡( LD) ) ,因 此来自一组的一个SNP 足以代表整个组。210 个RIL 的基因型编码为: 1 代表珍汕97 A 基因型,0代表明 恢 63 基因型。

1.2 统计模型

1.2.1 Lasso 回归

在全基因组选择中,预测变量的数目( p) 通常远远大于个体的数目( n) 。在这种情况 下,普通最小二乘法( ordinary least-squares,OLS) 的估计值具有很差的预测能力,因为标记效应被视为固 定效应,这导致预测变量之间的多重共线性和过度拟合,从而使该模型不可行。

Lasso( least absolute shrinkage and selection operator) 是统计学家 Robert Tibshirani 在 1996 年提出的一种变量选择方法,它是 OLS 的约束版本,是一种基于线性回归模型的降维方法,对高维小样本数据的 稀疏模型十分有用,在基因表达谱分析中被广泛应用。Lasso 回归模型将任意选择一个并分解,而忽略其他 Lasso 模型,这使得 Lasso 的惩罚期望许多系数接近零.该方法也广泛应用于具有大量数据集的领域,例如基因组学。

2 模型代码详解


load("D:\\生信数学基础\\G.Rdata")
load("D:\\生信数学基础\\RIL.Phe.Rdata")

View(G)
View(RIL.Phe)
dim(RIL.Phe)

dim(G)

基于R语言的Lasso回归在水稻全基因组预测中的应用

​ 图1. View(G)

基于R语言的Lasso回归在水稻全基因组预测中的应用

​ 图2. View(RIL.Phe)


Gen$YD  Phe$yd
dim(Gen)

sum(is.na(Gen))

x  model.matrix(YD~.,Gen)

y  Gen$YD

建造训练集和测试集

set.seed(6)

train  sample(1:nrow(x),nrow(x)*7/10)
test  (-train)
x.train  x[train,]
dim(x.train)

x.test  x[test,]
dim(x.test)

y.train  y[train]
y.test  y[test]
length(y.train)

length(y.test)

导入相关库,并手动筛选λ \lambda λ


library(Matrix)
library(glmnet)
library(foreach)
grid  10^seq(10,-2,length=100)

LASSO.model  glmnet(x.train,y.train,lambda = grid)

str(LASSO.model)
coef(LASSO.model)[,70]

LASSO.pred  predict(LASSO.model,newx = x.test,s=LASSO.model$lambda[70])
sqrt(mean((LASSO.pred-y.test)^2))

LASSO.pred  predict(LASSO.model,newx = x.test,s=LASSO.model$lambda[99])
mean((LASSO.pred-y.test)^2)

LASSO.pred  predict(LASSO.model,newx = x.test,s=LASSO.model$lambda[90])
mean((LASSO.pred-y.test)^2)

LASSO.pred  predict(LASSO.model,newx = x.test,s=LASSO.model$lambda[94])
mean((LASSO.pred-y.test)^2)

下面用模型来筛选出最好的λ \lambda λ

cv.LASSO.model  cv.glmnet(x.train,y.train,nfolds = 5)
str(cv.LASSO.model)
plot(cv.LASSO.model)
cv.LASSO.model$lambda.min
log(cv.LASSO.model$lambda.min)
cv.LASSO.pred  predict(cv.LASSO.model,newx = x.test,s=cv.LASSO.model$lambda.min)
RMSE  sqrt(mean((cv.LASSO.pred-y.test)^2))
RMSE
mean((cv.LASSO.pred-y.test)^2)
sum((cv.LASSO.pred-y.test)^2)
SSR  sum((cv.LASSO.pred-mean(y.test))^2)
SSR
SST  sum((y.test-mean(y.test))^2)
SST
R2  SSR/SST
R2

基于R语言的Lasso回归在水稻全基因组预测中的应用

​ 图3. plot(cv.LASSO.model)

基于R语言的Lasso回归在水稻全基因组预测中的应用

​ 图4. 程序输出结果

3 结果与分析

λ m i n \lambda_{min}λm i n ​R M S E RMSE R M S E R 2 R^2 R 2

0.20124.47880.3927

​ 表1. 输出结果(RMASE表示Root Mean Square Error,均方根误差)

所以由模型给出的结果是当λ \lambda λ=0.2012的时候,预测效果最好,R M S E RMSE R M S E在所进行的实验中也是最小的。

不过有意思的是,在之前手动取最小值的时候,偶然发现当λ = 0.0534 \lambda=0.0534 λ=0 .0 5 3 4时,拟合优度R 2 R^2 R 2达到了0.89!

基于R语言的Lasso回归在水稻全基因组预测中的应用
基于R语言的Lasso回归在水稻全基因组预测中的应用
图5、6 偶然发现的好参数

然后我就把此时λ \lambda λ的取值放到c v . L A S S O . m o d e l cv.LASSO.model c v .L A S S O .m o d e l中,算出来的结果如下:

cv.LASSO.pred  predict(cv.LASSO.model,newx = x.test,s=cv.LASSO.model$lambda.min)
cv.LASSO.pred  predict(cv.LASSO.model,newx = x.test,s=0.05336699)
RMSE  sqrt(mean((cv.LASSO.pred-y.test)^2))
RMSE
mean((cv.LASSO.pred-y.test)^2)
sum((cv.LASSO.pred-y.test)^2)
SSR  sum((cv.LASSO.pred-mean(y.test))^2)
SSR
SST  sum((y.test-mean(y.test))^2)
SST
R2  SSR/SST
R2

λ m i n \lambda_{min}λm i n ​R M S E RMSE R M S E R 2 R^2 R 2

0.053375.08510.9236

​ 表2. 有意思参数的输出结果

基于R语言的Lasso回归在水稻全基因组预测中的应用

​ 图7. 有意思参数的输出结果

不过,模型给出的λ \lambda λ在R M S E RMSE R M S E 评价指标中还是在所有实验中排在榜首的,说明模型还是很不错的!

4 附录

完整代码如下:


load("D:\\生信数学基础\\G.Rdata")
load("D:\\生信数学基础\\RIL.Phe.Rdata")

fix(G)
fix(RIL.Phe)
typeof(RIL.Phe)
dim(RIL.Phe)
dim(G)
Phe  as.data.frame(RIL.Phe)
Phe$yd
typeof(Phe)
Gen  as.data.frame(G)
typeof(Gen)

Gen$YD  Phe$yd

dim(Gen)

sum(is.na(Gen))

x  model.matrix(YD~.,Gen)

y  Gen$YD

set.seed(6)

train  sample(1:nrow(x),nrow(x)*7/10)

test  (-train)

x.train  x[train,]

dim(x.train)
x.test  x[test,]
dim(x.test)
y.train  y[train]
y.test  y[test]
length(y)
length(y.train)
length(y.test)

library(Matrix)
library(glmnet)
library(foreach)
grid  10^seq(10,-2,length=100)

LASSO.model  glmnet(x.train,y.train,lambda = grid)

str(LASSO.model)
coef(LASSO.model)[,70]

LASSO.pred  predict(LASSO.model,newx = x.test,s=LASSO.model$lambda[70])

SST  sum((y.test-mean(y.test))^2)
SSR  sum((LASSO.pred-mean(y.test))^2)
R2  SSR/SST
R2
sqrt(mean((LASSO.pred-y.test)^2))
LASSO.pred  predict(LASSO.model,newx = x.test,s=LASSO.model$lambda[99])

SSR  sum((LASSO.pred-mean(y.test))^2)
R2  SSR/SST
R2
mean((LASSO.pred-y.test)^2)
sqrt(mean((LASSO.pred-y.test)^2))
LASSO.pred  predict(LASSO.model,newx = x.test,s=LASSO.model$lambda[90])

SSR  sum((LASSO.pred-mean(y.test))^2)
R2  SSR/SST
R2
mean((LASSO.pred-y.test)^2)
sqrt(mean((LASSO.pred-y.test)^2))
LASSO.pred  predict(LASSO.model,newx = x.test,s=LASSO.model$lambda[94])
SSR  sum((LASSO.pred-mean(y.test))^2)
R2  SSR/SST
R2
sqrt(mean((LASSO.pred-y.test)^2))
mean((LASSO.pred-y.test)^2)
LASSO.model$lambda[94]

cv.LASSO.model  cv.glmnet(x.train,y.train,nfolds = 5)
str(cv.LASSO.model)
plot(cv.LASSO.model)
cv.LASSO.model$lambda.min
log(cv.LASSO.model$lambda.min)
cv.LASSO.pred  predict(cv.LASSO.model,newx = x.test,s=cv.LASSO.model$lambda.min)
cv.LASSO.pred  predict(cv.LASSO.model,newx = x.test,s=0.05336699)
RMSE  sqrt(mean((cv.LASSO.pred-y.test)^2))
RMSE
mean((cv.LASSO.pred-y.test)^2)
sum((cv.LASSO.pred-y.test)^2)
SSR  sum((cv.LASSO.pred-mean(y.test))^2)
SSR
SST  sum((y.test-mean(y.test))^2)
SST
R2  SSR/SST
R2

Original: https://blog.csdn.net/dream_of_grass/article/details/122127368
Author: Dream of Grass
Title: 基于R语言的Lasso回归在水稻全基因组预测中的应用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/631512/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球