[Maize Article] GxE interaction in terms of stability

[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

Leave a Reply

If you include a website address in the comment section, I cannot see your comment as it will be automatically deleted and will not be posted. Please refrain from including website addresses.