Figure 5: Comparison of H170 variants

Figure 5 uses panel B to display maximum amplitude and decay rate constants for each of the H170 mutants at LPR5 and LPR10.

The Dataset

We process the NeRh50_Table_S1_raw_data_used_in_figures.csv dataset to obtain the data for this analysis in Table 1.

Show the code
# Show interactive tables of data
DT::datatable(dfms$dfm_fig5_amp)
DT::datatable(dfms$dfm_fig5_k)
# Write datasets to file (commented out for website)
#readr::write_csv(dfms$dfm_fig5_amp, "assets/data/03_fig5_amplitude.csv")
#readr::write_csv(dfms$dfm_fig5_k, "assets/data/03_fig5_rate.csv")
Table 1: Measurements for WT and H170 variants across LPR5 and LPR10 for maximum amplitude and decay rate constant.
(a) Maximum amplitude
(b) Decay rate

We visualise the dataset in the style of draft figure 5, in Figure 1.

Show the code
# Visualise datasets as box/whisker with superimposed datapoints
p4_h170a_amp <- ggplot2::ggplot(dfms$dfm_fig5_amp |> dplyr::filter(Variant=="H170A"), 
                                ggplot2::aes(x=LPR, y=Value, color=LPR))  +
  ggplot2::geom_boxplot(outlier.shape = NA) +
  ggplot2::geom_jitter() +
  ggplot2::labs(y="Maximum amplitude (nA)", x="") +
  ggplot2::ylim(0, 4) +
  ggplot2::theme_minimal() + 
  ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 45, vjust = 0.5, hjust=1))

p4_h170a_k <- ggplot2::ggplot(dfms$dfm_fig5_k |> dplyr::filter(Variant == "H170A"), 
                              ggplot2::aes(x=LPR, y=Value, color=LPR))  +
  ggplot2::geom_boxplot(outlier.shape = NA) +
  ggplot2::geom_jitter() +
  ggplot2::labs(y="Decay rate constant (/s)", x="") +
  ggplot2::ylim(0, 75) +
  ggplot2::theme_minimal() + 
  ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 45, vjust = 0.5, hjust=1))

p4_h170d_amp <- ggplot2::ggplot(dfms$dfm_fig5_amp |> dplyr::filter(Variant == "H170D"),
                                ggplot2::aes(x=LPR, y=Value, color=LPR)) +
  ggplot2::geom_boxplot(outlier.shape = NA) +
  ggplot2::geom_jitter() +
  ggplot2::labs(y="Maximum amplitude (nA)", x="") +
  ggplot2::ylim(0, 4) +
  ggplot2::theme_minimal() + 
  ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 45, vjust = 0.5, hjust=1))

p4_h170d_k <- ggplot2::ggplot(dfms$dfm_fig5_k |> dplyr::filter(Variant == "H170D"), 
                              ggplot2::aes(x=LPR, y=Value, color=LPR))  +
  ggplot2::geom_boxplot(outlier.shape = NA) +
  ggplot2::geom_jitter() +
  ggplot2::labs(y="Decay rate constant (/s)", x="") +
  ggplot2::ylim(0, 75) +
  ggplot2::theme_minimal() + 
  ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 45, vjust = 0.5, hjust=1))

p4_h170e_amp <- ggplot2::ggplot(dfms$dfm_fig5_amp |> dplyr::filter(Variant == "H170E"), 
                                ggplot2::aes(x=LPR, y=Value, color=LPR))  +
  ggplot2::geom_boxplot(outlier.shape = NA) +
  ggplot2::geom_jitter() +
  ggplot2::labs(y="Maximum amplitude (nA)", x="") +
  ggplot2::ylim(0, 4) +
  ggplot2::theme_minimal() + 
  ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 45, vjust = 0.5, hjust=1))

p4_h170e_k <- ggplot2::ggplot(dfms$dfm_fig5_k |> dplyr::filter(Variant == "H170E"),
                              ggplot2::aes(x=LPR, y=Value, color=LPR))  +
  ggplot2::geom_boxplot(outlier.shape = NA) +
  ggplot2::geom_jitter() +
  ggplot2::labs(y="Decay rate constant (/s)", x="") +
  ggplot2::ylim(0, 75) +
  ggplot2::theme_minimal() + 
  ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 45, vjust = 0.5, hjust=1))
  
ggpubr::ggarrange(p4_h170a_amp, p4_h170a_k, p4_h170d_amp, p4_h170d_k, p4_h170e_amp, p4_h170e_k,
                  common.legend=TRUE,
                  labels=c("H170A", "", "H170D", "", "H170E", ""),
                  nrow=1
                  )
Figure 1: H170 variant measurements across LPR5 and LPR10 as in figure 5B from the draft manuscript

Downloads

The Models

We treat the system as a single experiment with two dependent variables (maximum amplitude and decay rate constant), fitting linear models with LPR and Variant as explanatory variables. We initially fit the full model Value ~ LPR * Variant as in Table 2.

Show the code
model4_amp_lm <- lm(Value ~ LPR * Variant, data=dfms$dfm_fig5_amp)
model4_k_lm <- lm(Value ~ LPR * Variant, data=dfms$dfm_fig5_k)

gtsummary::tbl_regression(model4_amp_lm)
gtsummary::tbl_regression(model4_k_lm)
Table 2: Linear model fits of Value ~ LPR * Variant
(a) Maximum amplitude
Characteristic Beta 95% CI p-value
LPR


    LPR5 — —
    LPR10 -0.91 -1.3, -0.55 <0.001
Variant


    WT — —
    H170A -0.58 -0.96, -0.20 0.003
    H170D -0.33 -0.68, 0.02 0.066
    H170E 0.33 -0.03, 0.70 0.075
LPR * Variant


    LPR10 * H170A 0.45 -0.12, 1.0 0.12
    LPR10 * H170D 0.10 -0.48, 0.69 0.7
    LPR10 * H170E -0.31 -0.85, 0.23 0.3
Abbreviation: CI = Confidence Interval
(b) Decay rate
Characteristic Beta 95% CI p-value
LPR


    LPR5 — —
    LPR10 -11 -15, -6.8 <0.001
Variant


    WT — —
    H170A -8.5 -13, -3.9 <0.001
    H170D -13 -17, -8.8 <0.001
    H170E -20 -25, -16 <0.001
LPR * Variant


    LPR10 * H170A 1.3 -6.3, 8.9 0.7
    LPR10 * H170D -0.54 -7.7, 6.7 0.9
    LPR10 * H170E 0.73 -5.5, 7.0 0.8
Abbreviation: CI = Confidence Interval

The model fits in Table 2 indicate that there are no important interaction effects for either maximum amplitude or decay rate constant.

The models indicate the following non-zero differences in maximum amplitude:

  • between LPR5 and LPR10 (-0.91nA [-1.3, -0.55])
  • between WT and H170A (-0.58nA [-0.96, -0.20])

They also indicate non-zero differences in decay rate constant:

  • between LPR5 and LPR10 (-11/s [-15, -6.8])
  • between WT and all three H170 variants (a reduction in decay rate constant):
    • H170A, -8.5/s [-13, -3.9]
    • H170D -13/s [-17, -8.8]
    • H170E, -20/s [-25, -16].

We check the model fits in Figure 2.

Show the code
performance::check_model(model4_amp_lm, size_title=6)

performance::check_model(model4_k_lm, size_title=6)
(a) Maximum amplitude
(b) Decay rate
Figure 2: Diagnostic plots of Value ~ LPR + Variant fit

On the whole the diagnostic plots do not indicate issues, except for the LPR:Variant correlation. However, as this is an interaction term, the collinearity is likely a result of “essential ill-conditioning” and unavoidable. As the interactions are not indicated to have any great effect on the model we proceed with the model as it stands, and extract the contrasts in Table 3.

Show the code
EMM1 <- emmeans::emmeans(model4_amp_lm, ~ LPR | Variant)
confint(emmeans::contrast(EMM1, "pairwise", adjust="sidak")) |>
  kableExtra::kbl(digits=3) |>
  kableExtra::kable_styling(
    bootstrap_options = c("hover", "responsive")
  )
EMM2 <- emmeans::emmeans(model4_k_lm, ~ LPR | Variant)
confint(emmeans::contrast(EMM2, "pairwise", adjust="sidak")) |>
  kableExtra::kbl(digits=3) |>
  kableExtra::kable_styling(
    bootstrap_options = c("hover", "responsive")
  )
Table 3: Contrasts for model fits, with Sidak adjustment
(a) Maximum amplitude: change `LPR`, constant `Variant`
contrast Variant estimate SE df lower.CL upper.CL
LPR5 - LPR10 WT 0.914 0.183 54 0.546 1.281
LPR5 - LPR10 H170A 0.459 0.221 54 0.015 0.903
LPR5 - LPR10 H170D 0.810 0.227 54 0.355 1.265
LPR5 - LPR10 H170E 1.225 0.196 54 0.832 1.617
(b) Decay rate: change `LPR`, constant `Variant`
contrast Variant estimate SE df lower.CL upper.CL
LPR5 - LPR10 WT 11.023 2.125 52 6.759 15.286
LPR5 - LPR10 H170A 9.725 3.110 52 3.484 15.966
LPR5 - LPR10 H170D 11.563 2.887 52 5.770 17.356
LPR5 - LPR10 H170E 10.290 2.271 52 5.733 14.848

Restricting interpretation to the contrasts in manuscript figure 5, we find the following robustly nonzero differences for LPR changes:

  • Maximum amplitude decreases for H170A by 0.459nA [0.0151,0.903] from LPR5 to LPR10
  • Maximum amplitude decreases for H170D by 0.810nA [0.355,1.26] from LPR5 to LPR10
  • Maximum amplitude decreases for H170E by 1.22nA [0.832,1.62] from LPR5 to LPR10
  • Decay rate decreases for H170A by 9.72/s [3.48,16.0] from LPR5 to LPR10
  • Decay rate decreases for H170A by 11.6/s [5.77,17.4] from LPR5 to LPR10
  • Decay rate decreases for H170A by 10.3 [5.73,14.8] from LPR5 to LPR10

Figure

We visualise this with \(p\)-values in Figure 3, which we interpret as the change from LPR5 to LPR10 inducing a significant reduction in maximum amplitude and decay rate constant for all three variants.

Show the code
# Get p-values, accounting for heteroscedasticity and multiple testing
# Also generate group1 and group2 columns
EMM_amp <- as.data.frame(pairs(EMM1)) |>
  tidyr::separate(contrast, into=c("group1", "group2"), sep=" - ") |>
  dplyr::mutate(y.position=4) |>
  rstatix::add_significance()
EMM_k <- as.data.frame(pairs(EMM2)) |>
  tidyr::separate(contrast, into=c("group1", "group2"), sep=" - ") |>
  dplyr::mutate(y.position=70) |>
  rstatix::add_significance()

p4_h170a_amp_annot <- p4_h170a_amp + 
  ggpubr::stat_pvalue_manual(EMM_amp |> dplyr::filter(Variant == "H170A"), label="p = {scales::pvalue(p.value)}",
                             size=3, step.increase=0.1) 
p4_h170a_k_annot <- p4_h170a_k + 
  ggpubr::stat_pvalue_manual(EMM_k |> dplyr::filter(Variant == "H170A"), label="p = {scales::pvalue(p.value)}",
                             size=3, step.increase=0.1) 
p4_h170d_amp_annot <- p4_h170d_amp + 
  ggpubr::stat_pvalue_manual(EMM_amp |> dplyr::filter(Variant == "H170D"), label="p = {scales::pvalue(p.value)}",
                             size=3, step.increase=0.1)
p4_h170d_k_annot <- p4_h170d_k + 
  ggpubr::stat_pvalue_manual(EMM_k |> dplyr::filter(Variant == "H170D"), label="p = {scales::pvalue(p.value)}",
                             size=3, step.increase=0.1) 
p4_h170e_amp_annot <- p4_h170e_amp + 
  ggpubr::stat_pvalue_manual(EMM_amp |> dplyr::filter(Variant == "H170E"), label="p = {scales::pvalue(p.value)}",
                             size=3, step.increase=0.1)
p4_h170e_k_annot <- p4_h170e_k + 
  ggpubr::stat_pvalue_manual(EMM_k |> dplyr::filter(Variant == "H170E"), label="p = {scales::pvalue(p.value)}",
                             size=3, step.increase=0.1)


p_comp <- ggpubr::ggarrange(p4_h170a_amp_annot, p4_h170a_k_annot,
                            p4_h170d_amp_annot, p4_h170d_k_annot,
                            p4_h170e_amp_annot, p4_h170e_k_annot,
                            common.legend=TRUE,
                            labels=c("H170A", "", "H170D", "", "H170E", ""), vjust=5,
                            legend="bottom",
                            nrow=1)
p_comp

# Write figures to file (commented out for webpage)
#ggplot2::ggsave("assets/images/fig05_H170_mutants.pdf", p_comp)
#ggplot2::ggsave("assets/images/fig05_H170_mutants.png", p_comp)
Figure 3: H170 variant measurements across LPR5 and LPR10 as in figure 5B from the draft manuscript , with Sidak-adjusted p-values indicated

Downloads

Additional Contrasts

There are further contrasts used as evidence in the manuscript text. The question arises whether there is a significant difference between WT and H170 variant maximum amplitude or decay rate constant at LPR5, which we explore in Table 4. This indicates a difference in maximum amplitude between WT and H170A (but not H170D or H170E), and a difference in decay rate constant between WT and all H170 variants, at LPR5.

Show the code
EMM1 <- emmeans::emmeans(model4_amp_lm, ~ Variant | LPR)
confint(emmeans::contrast(EMM1, "pairwise", adjust="sidak")) |>
  kableExtra::kbl(digits=3) |>
  kableExtra::kable_styling(
    bootstrap_options = c("hover", "responsive")
  )
EMM2 <- emmeans::emmeans(model4_k_lm, ~ Variant | LPR)
confint(emmeans::contrast(EMM2, "pairwise", adjust="sidak")) |>
  kableExtra::kbl(digits=3) |>
  kableExtra::kable_styling(
    bootstrap_options = c("hover", "responsive")
  )
Table 4: Further contrasts for model fits
(a) Maximum amplitude: changes between `Variant` at each `LPR`
contrast LPR estimate SE df lower.CL upper.CL
WT - H170A LPR5 0.580 0.189 54 0.064 1.095
WT - H170D LPR5 0.328 0.175 54 -0.149 0.805
WT - H170E LPR5 -0.332 0.183 54 -0.832 0.168
H170A - H170D LPR5 -0.252 0.181 54 -0.745 0.241
H170A - H170E LPR5 -0.912 0.189 54 -1.427 -0.396
H170D - H170E LPR5 -0.660 0.175 54 -1.137 -0.183
WT - H170A LPR10 0.125 0.217 54 -0.467 0.717
WT - H170D LPR10 0.224 0.233 54 -0.413 0.862
WT - H170E LPR10 -0.021 0.196 54 -0.556 0.513
H170A - H170D LPR10 0.099 0.261 54 -0.612 0.811
H170A - H170E LPR10 -0.146 0.227 54 -0.768 0.475
H170D - H170E LPR10 -0.246 0.244 54 -0.911 0.419
(b) Decay rate: changes between `Variant` at each `LPR`
contrast LPR estimate SE df lower.CL upper.CL
WT - H170A LPR5 8.451 2.271 52 2.239 14.663
WT - H170D LPR5 12.699 1.954 52 7.354 18.044
WT - H170E LPR5 20.319 2.125 52 14.508 26.130
H170A - H170D LPR5 4.248 2.113 52 -1.530 10.027
H170A - H170E LPR5 11.868 2.271 52 5.656 18.080
H170D - H170E LPR5 7.620 1.954 52 2.275 12.965
WT - H170A LPR10 7.153 3.005 52 -1.065 15.371
WT - H170D LPR10 13.240 3.005 52 5.022 21.457
WT - H170E LPR10 19.587 2.271 52 13.375 25.799
H170A - H170D LPR10 6.087 3.680 52 -3.978 16.151
H170A - H170E LPR10 12.434 3.110 52 3.928 20.940
H170D - H170E LPR10 6.347 3.110 52 -2.159 14.853