1 ################################################################################
2 # Modeling Spatial Variation
3 ################################################################################
5 # There are ten main steps to this protocol:
6 # 1. Load the software needed.
7 # 2. Declare user-supplied variables.
8 # 3. Process the phenotypic data.
9 # 4. Fit the mixed models in sommer.
10 # 5. Format the information needed for output.
13 ################################################################################
14 # 1. Load software needed
15 ################################################################################
20 ################################################################################
21 # 2. Declare user-supplied variables.
22 ################################################################################
24 args = commandArgs(trailingOnly=TRUE)
25 if (length(args) < 2) {
26 stop('Two or more arguments are required.')
28 phenotypeFile = args[1]
32 ################################################################################
33 # 3. Process the phenotypic data.
34 ################################################################################
35 #read in the phenotypic data
36 userPheno <- read.delim(phenotypeFile, header = TRUE, sep="\t", fill=TRUE)
38 #The user should be able to select their response variables from a drop-down menu
39 # of the column names of the userPheno object. Then, those strings should be passed
40 # to this vector, 'userResponse'.
42 userResponse <- unlist(strsplit(traits, split=",", fixed=T))
43 userID <- "germplasmName"
46 userPheno$R <- as.factor(userPheno$rowNumber)
47 userPheno$C <- as.factor(userPheno$colNumber)
50 ################################################################################
51 # 4. Fit the 2D Spline model in sommer
52 ################################################################################
53 # Make a list to save the models.
57 for(i in 1:length(userResponse)){
59 fixedArg <- paste(userResponse[i], " ~ ", "1 +", userID,")", sep = "")
61 randArg <- paste("~vs(", R, ")+vs(", C, ")+ spl2Da(",col,"," ,row ,")", sep = "")
64 m2.sommer <- mmer(fixed = as.formula(fixedArg),
65 random = as.formula(randArg),
67 data=userPheno, verbose = FALSE)
72 userModels[[i]] <- m2.sommer
77 ################################################################################
78 # 5. Format the information needed for output.
79 ################################################################################
82 for(i in 1:length(userModels)){
84 m2.sommer <- userModels[[i]]
86 #Variance_Components <- summary(m2.sommer)$varcomp
88 # outputFile= paste(userID, " Spatial Variance Components", ".out", sep="")
90 write.csv(Variance_Components, outputFile)
92 res <- (randef(m2.sommer)$`u:variety`)
93 BLUP <- as.data.frame(res)
95 # adj = coef(m2.sommer)$Trait
96 outfile_blup = paste(phenotypeFile, ".BLUPs", sep="");
97 write.table(BLUP, outfile_blup)