forked from MarcooLopez/Genomic-Selection
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfitModels_multi.R
105 lines (88 loc) · 3 KB
/
fitModels_multi.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
setwd("/mnt/home/lopezcru/GS")
rm(list=ls())
library(BGLR)
#=========================================================
# User specifications
#=========================================================
# Choose one model. 1: single; 2:across; 3:MxE; 4:R-Norm
mod <- 4
# Type of CV. 1:CV1; 2:CV2
CV <- 1
# Partition number
part <- 1
#=========================================================
# Read arguments passed from command line
args=(commandArgs(TRUE))
if(length(args)==0){
cat('No args provided',"\n")
}else{
for(i in 1:length(args)){
eval(parse(text=args[[i]]))
}
}
# Load data
load("multiEnvironment/prepData_multi.RData")
load(paste0("multiEnvironment/YNA_CV",CV,"_multiEnv.RData"))
n <- nrow(Y); nEnv <- ncol(Y)
# Models
models <- c("Single","Across","MxE","R-Norm")
model <- models[mod]
# Number of iterations and burn-in for Bayesian models
nIter <- 30000; burnIn <- 2000
YNA0 <- YNA[[part]]
yNA <- as.vector(YNA0)
#--------------------------------------------------------
# 1. Single environment (within-environment) model
#--------------------------------------------------------
if(model=="Single")
{
YHat <- matrix(NA,nrow=nrow(Y),ncol=ncol(Y))
ETA <- list(G=list(V=eigen_G$vectors,d=eigen_G$values,model='RKHS'))
for(env in 1:nEnv){
fm <-BGLR(y=YNA0[,env],ETA=ETA,nIter=nIter,burnIn=burnIn)
YHat[,env] <- fm$yHat
}
}
#--------------------------------------------------------
# 2. Across-environments model
#--------------------------------------------------------
if(model=="Across")
{
ETA <- list(list(~envID-1,model="FIXED"))
ETA[[2]] <- list(V=eigen_G0$vectors,d=eigen_G0$values,model='RKHS')
# Model Fitting
fm <- BGLR(y=yNA,ETA=ETA,nIter=nIter,burnIn=burnIn)
YHat <- matrix(fm$yHat,ncol=nEnv)
}
#--------------------------------------------------------
# 3. MxE interaction model
#--------------------------------------------------------
if(model=="MxE")
{
ETA <- list(list(~envID-1,model="FIXED"))
ETA[[2]] <- list(V=eigen_G0$vectors,d=eigen_G0$values,model='RKHS')
# Adding interaction terms
for(env in 1:nEnv){
eigen_G1 <- MxE_eigen[[env]]
ETA[[(env+2)]] <- list(V=eigen_G1$vectors,d=eigen_G1$values,model='RKHS')
}
# Model Fitting
fm <- BGLR(y=yNA,ETA=ETA,nIter=nIter,burnIn=burnIn)
YHat <- matrix(fm$yHat,ncol=nEnv)
}
#--------------------------------------------------------
# 4. Reaction-Norm model
#--------------------------------------------------------
if(model=="R-Norm")
{
ETA <- list(list(~envID-1,model="FIXED"))
ETA[[2]] <- list(V=eigen_G0$vectors,d=eigen_G0$values,model='RKHS')
ETA[[3]] <- list(V=eigen_GE$vectors,d=eigen_GE$values,model="RKHS")
# Model Fitting
fm <- BGLR(y=yNA,ETA=ETA,nIter=nIter,burnIn=burnIn)
YHat <- matrix(fm$yHat,ncol=nEnv)
}
# Save results
outfolder <- paste0("multiEnvironment/CV",CV,"/",model)
if(!file.exists(outfolder)) dir.create(outfolder,recursive=T)
save(YHat,file=paste0(outfolder,"/outPRED_multiEnv_partition_",part,".RData"))