Quantifying Phenotypic Plasticity of Crops

Quantifying Phenotypic Plasticity of Crops


Phenotypic plasticity refers to the ability of an individual organism, in this case, a plant, to display varying phenotypic traits or characteristics in response to different environmental conditions. These traits can include physical features, physiological processes, and behaviors.

Phenotypic plasticity is a crucial adaptive mechanism that allows organisms to optimize their survival and reproduction in varying environments. Crops are particularly reliant on phenotypic plasticity to cope with changes in factors such as light, temperature, moisture, nutrient availability, and other environmental cues.

For example, a crop grown in low light conditions might elongate its stems to reach towards a source of light, a phenomenon known as etiolation. Conversely, a plant grown in bright light might develop shorter, sturdier stems. Other examples of phenotypic plasticity in crops include variations in leaf size, shape, and thickness, as well as changes in root morphology based on soil conditions.

Phenotypic plasticity is a result of the interaction between an organism’s genetic makeup and its environment. It’s an essential aspect of how organisms can adapt and survive in diverse and changing ecological niches.

Let’s examine the figure above. The x-axis represents numerical values for the environment. For instance, towards the left of the x-axis, there’s a higher amount of nitrogen fertilizer, and as you move to the right, the nitrogen fertilizer amount decreases. The y-axis represents yield.

I’ll present three different scenarios.

A) In scenario A, even as the nitrogen fertilizer amount decreases, both genotype A and B show no difference in yield. In other words, the plasticity of crop yield in response to nitrogen fertilizer differences remains unchanged.

B) In scenario B, as the nitrogen fertilizer amount decreases, the yield decreases for both genotypes. This means that there’s plasticity in crop yield based on nitrogen fertilizer.

C) In scenario C, while genotype B shows a yield decrease as nitrogen fertilizer decreases, genotype A exhibits a slight yield increase, despite the reduction in nitrogen fertilizer. In this case, both genotypes show plasticity in crop yield, and a GxE interaction is observed. This indicates an interaction between genotype and environment. Notably, for genotype B, the yield didn’t decrease but increased in an unfavorable environment. This suggests that genotype B holds potential for further investigation.



How to quantify phenotypic plasticity?

I will introduce several methods for quantifying the plasticity.

I have the following dataset. Yield differences were analyzed for five different genotypes between the control group (no treatment) and the treatment group (virus inoculation is assumed as the treatment). As a result, this treatment exhibited a tendency of reducing the yield.

GenotypeControlTreatment
A10090
B12070
C11590
D9585
E110105
Mean10888

With this data, we will analyze plasticity in various ways.



1) Responsiveness

I will calculate responsiveness. It is calculated as (Treatment - Control) / Control. This way, we can calculate the response to each treatment for each variety.

GenotypeControlTreatmentResponsiveness
A10090-10.0%
B12070-41.7%
C11590-21.7%
D9585-10.5%
E110105-4.5%
Mean10888

For the genotype B, it exhibited a responsiveness of -41.7% under the treatment, while the genotype E showed a responsiveness of -4.5% under the treatment. Based on this data, we can conclude that the genotype B demonstrates the highest plasticity, whereas the genotype E shows the lowest plasticity. Let’s visualize this using R.

Genotype= c("A","B","C","D","E")
Responsiveness= c(-0.10,-0.417,-0.217,-0.105,-0.045)
dataA= data.frame(Genotype,Responsiveness)

ggplot(data=dataA, aes(x=Genotype, y=as.numeric(Responsiveness), fill=Genotype))+
  geom_bar(stat="identity",position="dodge", width=0.7, size=1) +
  scale_fill_manual(values=c("grey25","grey35","grey45","grey55","grey65")) +
  scale_y_reverse(limits=c(0,-0.5), breaks=seq(0,-0.5, by = -0.1), labels=scales::percent) +
  scale_x_discrete(limits=rev) +
  coord_flip() +
  labs(x="Genotype", y="Responsiveness (%)") +
  theme_grey(base_size=17, base_family="serif")+
  theme(legend.position='none',
        axis.line=element_line(size=0.5, colour="black")) +
  windows(width=5.5, height=5)

How to calculate responsiveness in response to control using R?



2) Reaction norm

This time, let’s calculate the reaction norm. There might be various approaches to calculating the reaction norm, but I will proceed with (Control - Treatment) / (mean of Control - mean of Treatment).

GenotypeControlTreatmentReaction norm
A100900.5
= (100-90) / (108-88)
B120702.5
C115901.3
D95850.5
E1101050.3
Mean10888

Indeed, the reaction norm also indicates that the genotype B has the highest value, while the genotype E has the lowest. The reaction norm is often most clearly represented when visualized as a graph.

Genotype= rep(c("A","B","C","D","E"), times=2)
Factor= rep(c("Control","Treatment"), each=5)
Yield= c(100,120,115,95,110,90,70,90,85,105)
Reaction_norm= c(0.5,2.5,1.3,0.5,0.3,0.5,2.5,1.3,0.5,0.3)
dataA= data.frame(Genotype,Factor,Yield,Reaction_norm)

ggplot(data=dataA, aes(x=Reaction_norm, y=Yield))+
  geom_smooth(aes(group=Factor, color=Factor), method=lm, level=0.95, se=FALSE, linetype=1, size=0.5, formula=y~x) +
  geom_point (aes(shape=Factor, fill=Factor), col="Black", size=5) +
  geom_label_repel(aes(label=Genotype), min.segment.length = 1) +
  scale_fill_manual(values = c("Black","Dark red")) +
  scale_color_manual(values = c("Black","Dark red")) +
  scale_shape_manual(values = c(21,22)) +
  scale_x_continuous(breaks = seq(0,3,0.5),limits = c(0,3)) + 
  scale_y_continuous(breaks = seq(0,150,50), limits = c(0,150)) +
  labs(x="Reaction norm", y="Yield") +
  theme_grey(base_size=17, base_family="serif")+
  theme(legend.position= c(0.84, 0.15),
        legend.key = element_rect(color = "white", fill = "white"),
        legend.background= element_rect(fill= alpha("grey",.05)),
        legend.title = element_text(size = 14),
        legend.text = element_text(size = 14),
        axis.line= element_line(size=0.5, colour="black")) +
  windows(width=5.5, height=5)

For the genotype B, the reaction norm is the highest, indicating the largest difference in harvest yield between the Control and Treatment. This implies that it has the highest plasticity. On the other hand, for the genotype E, plasticity is the lowest. In other words, the genotype E demonstrates the most stable response to environmental changes.



3) Environmental Index

This time, let’s calculate the Environmental Index. Let’s take a moment to consider. Suppose we have obtained harvest yield values for 10 different treatments. The graph could be plotted as shown below.

Now, I’d like to explain how the harvest yield for each variety (TR1 – TR10) changes based on environmental differences. By examining the differences in slopes in the graph above, we can infer the plasticity.

However, there’s a challenge here. The x-axis consists of categorical values, which means they are not numerical. Because the x-axis is not numeric, it’s not straightforward to represent x-y regression (though it’s possible, it would result in a general linear model rather than a regression model). So, how can we represent the x-axis numerically?

This is where the concept of the Environmental Index comes into play.

ABCDEMeanEnv_Index
Control100120115951101005 (=100-95)
Treatment9070908510590-5 (=90-95)
Grand
mean
95

Let’s proceed with calculating the data as described. Calculate the average for each of the 5 varieties for each treatment. Then, calculate the overall average. The difference between these averages will give you the Environmental Index. Now, you can apply this Environmental Index to each harvest yield value. This approach will help incorporate the environmental differences and provide a more numerical representation for the x-axis, enabling you to analyze how harvest yields change based on the Environmental Index.

GenotypeConditionYieldEnvironmental Index
AControl1005
BControl1205
CControl1155
DControl955
EControl1105
ATreatment90-5
BTreatment70-5
CTreatment90-5
DTreatment85-5
ETreatment105-5


Now, set the x-axis as the Environmental Index and the y-axis as Yield, then proceed to plot the graph.

Genotype= rep(c("A","B","C","D","E"), times=2)
Condition= rep(c("Control", "Treatment"), each=5)
Yield= c(110,120,115,95,110,90,70,90,85,105)
Env_Index= rep(c(5,-4), each=5)
dataA= data.frame(Genotype,Condition,Yield,Env_Index)

ggplot(data=dataA, aes(x=Env_Index, y=Yield))+
  geom_smooth(aes(group=Genotype, color=Genotype), method=lm, level=0.95, se=TRUE, linetype=1, size=0.5, formula=y~x) +
  geom_point(aes(shape=Genotype, fill=Genotype), col="Black", size=5) +
  scale_fill_manual(values = c("Black","Dark red","Green","Orange","Blue")) +
  scale_shape_manual(values = c(21,21,21,21,21)) +
  scale_color_manual(values = c("Black","Dark red","Green","Orange","Blue")) +
  scale_x_continuous(breaks = seq(-7,7,2),limits = c(-7,7)) + 
  scale_y_continuous(breaks = seq(0,130,20), limits = c(0,130)) +
  labs(fill="Genotype", x="Environmental Index", y="Yield") +
  theme_grey(base_size=17, base_family="serif")+
  theme(legend.position= c(0.84, 0.20),
        legend.key = element_rect(color = "white", fill = "white"),
        legend.background= element_rect(fill= alpha("grey",.05)),
        legend.title = element_text(size = 14),
        legend.text = element_text(size = 14),
        axis.line= element_line(size=0.5, colour="black")) +
  windows(width=5.5, height=5)

Now that the x-axis consists of numerical data, we can calculate the slopes. By examining the graph above, we can observe that the genotype B shows the highest slope. Therefore, we can conclude that the gentype B has the highest plasticity.

The concept you’ve described aligns with the Finlay Wilkinson Regression model. For more detailed information, you can refer to the link below.


What is Finlay-Wilkinson Regression Model?



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.