[Maize Article] GxE interaction in terms of stability
GxE interaction is when the phenotypic difference between a pair of genotypes is larger or smaller in one environment than in another environment. It is important to understand that what genotypes have different phenotypic values in two environments is not the same as GxE interaction.
Env<-c("Env1","Env2","Env1","Env2")
Genotype<-c("Genotype1","Genotype1","Genotype2","Genotype2")
Yield<-c(7,9,3,5)
dataB<-data.frame(Env,Genotype,Yield)
ggplot(data=dataB, aes(x=Env, y=Yield, color=Genotype,group=Genotype))+
geom_line (linetype=1,size=1) +
scale_color_manual(values = c("Black", "Dark red"))+
scale_y_continuous(breaks= seq(0,10,2), limits = c(0,10)) +
ggtitle("No interaction") +
labs(x="Environment", y="Phenotypic value") +
theme_grey(base_size=16, base_family="serif")+
theme(plot.title= element_text(family="serif"),
legend.position = c(0.2,0.1),
legend.title = element_blank(),
legend.key = element_rect(color=alpha("grey",.05), fill=alpha("grey",.05)),
legend.background= element_rect(fill= alpha("grey",.05)),
axis.line= element_line(size=0.5, colour="black"))+
windows(width=5.5, height=5)
Please look at above graph. Both genotypes had a different phenotype in the two different environments (Env1 and Env2), but there was no interaction in this case because the difference between the phenotypic values was the same for the two environments (i.e., there is no increase or decrease of the difference in phenotypic values between the two environments). In each environment, the difference between the two genotypes was the same, and for each genotype, the difference between the two environments was also the same.
library(data.table)
Env<- c("Env1","Env2")
Genotype1<- c(7,9)
Genotype2<- c(3,5)
dataB<- data.frame(Env, Genotype1,Genotype2)
dataB$difference<-abs(dataB$Genotype1-dataB$Genotype2)
dataB<- rbind(setDT(dataB), dataB[, c(list(Env = 'difference'),
lapply(.SD, function(Env) diff(rev(Env)))), .SDcols = 2:4])
dataB
If we calculate the grand mean and the environmental effect (mean of each environment – grand mean) and genotypic effect (mean of each genotype – grand mean), we can predict the phenotypic value of each genotype in each environment.
Env<- c("Env1","Env2")
Genotype1<- c(7,9)
Genotype2<- c(3,5)
dataB<- data.frame(Env, Genotype1,Genotype2)
dataB$Avg <- rowMeans (dataB %>% select(-Env))
dataB <- rbind(dataB, c("Avg", colMeans(dataB %>% select(-Env))))
dataB
For example, the grand mean is 6.
dataB$Avg <- as.numeric(dataB$Avg)
dataB$Env_effect <- dataB$Avg - dataB$Avg[nrow(dataB)]
Genotypic_effect <- c(Env="Genotypic_effect",
Genotype1=as.numeric(dataB$Genotype1[3])-as.numeric(dataB$Avg[3]),
Genotype2=as.numeric(dataB$Genotype2[3])-as.numeric(dataB$Avg[3]), Avg=0, Env_effect="NA")
dataC<-rbind(dataB,Genotypic_effect)
dataC
The main effects of genotype1
and genotype2
are 2 and -2 respectively, and the main effects of ENV1
and ENV2
are –1 and 1 respectively.
Indeed, yij = μ + τi+ βj where μ = grand mean, τi = effect of genotype, βj = effect of environment
7 = 6 + 2 + (–1) = 7
3 = 6 – 2 + (–1) = 3
9 = 6 + 2 + 1 = 9
5 = 6 – 2 + 1 = 5