2 Laboratory performance

2.1 Load data

The raw data are retrieved from the EHI database using personal access tokens only available for EHI managers. The relevant data are stored in the data/all_data.tsv file that is used for downstream analyses. This document is openly accessible, and can be loaded in the following way:

all_data <- read_tsv("data/all_data.tsv") %>% 
  filter(catalogue != "Species") %>%
  mutate(
    Taxon = factor(Taxon, levels = c(
      "Amphibian",
      "Reptile",
      "Mammal",
      "Bird",
      "Control"
    )),
    Extraction = factor(Extraction, levels = c(
      "REF",
      "DREX1",
      "DREX2"
    ))
  ) %>%
    mutate(Species=factor(Species,levels=c("Calotriton asper",
                                           "Lissotriton helveticus",
                                           "Salamandra atra",
                                           "Chalcides striatus",
                                           "Natrix astreptophora",
                                           "Podarcis muralis",
                                           "Plecotus auritus",
                                           "Sciurus carolinensis",
                                           "Trichosurus vulpecula",
                                           "Geospizopsis unicolor",
                                           "Perisoreus infaustus",
                                           "Zonotrichia capensis",
                                           "Extraction control",
                                           "Library control")))

2.2 DNA yield

Total amount of DNA extracted from the 150 ul subset of the bead-beaten sample.

all_data %>%
    select(Extraction,extract,Taxon) %>%
    group_by(Taxon,Extraction) %>%
    summarise(value = sprintf("%.0f±%.0f", mean(extract), sd(extract))) %>%
    pivot_wider(names_from = Extraction, values_from = value) %>%
    tt(caption = "Mean and standard deviation of total DNA nanograms")
Mean and standard deviation of total DNA nanograms
Taxon REF DREX1 DREX2
Amphibian 297±350 340±475 1138±1195
Reptile 102±71 162±134 250±179
Mammal 448±432 256±224 867±730
Bird 71±134 11±11 44±45
Control 0±0 2±3 1±0
all_data %>%
    select(Library,Species,Extraction,extract,Taxon) %>%
    unique() %>%
    ggplot(aes(x=Extraction, y=extract, color=Species, group=Extraction))+ 
        geom_boxplot(outlier.shape = NA, fill="#f4f4f4", color="#8c8c8c") + 
        geom_jitter() + 
        scale_color_manual(values=vertebrate_colors) +
        facet_grid(. ~ Taxon, scales = "free") +
        theme_minimal() +
        labs(y="DNA yield (ng)",x="Extraction method")

all_data  %>%
    filter(Taxon != "Control") %>%
    mutate("log_extract"=log(extract))%>%
    lmerTest::lmer(log(extract) ~ Taxon + Extraction + (1 | Species/Sample), data = ., REML = TRUE) %>%
    plot()

all_data  %>%
    filter(Taxon != "Control") %>%
    mutate("log_extract"=log(extract))%>%
    lmerTest::lmer(log(extract) ~ Taxon + Extraction + (1 | Species/Sample), data = ., REML = TRUE) %>%
    anova()
Type III Analysis of Variance Table with Satterthwaite's method
            Sum Sq Mean Sq NumDF DenDF F value    Pr(>F)    
Taxon       9.7568  3.2523     3     8  3.9365 0.0537940 .  
Extraction 13.6941  6.8471     2    46  8.2877 0.0008436 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
all_data  %>%
    filter(Taxon != "Control") %>%
    mutate("log_extract"=log(extract))%>%
    lmerTest::lmer(log(extract) ~ Taxon + Extraction + (1 | Species/Sample), data = ., REML = TRUE) %>%
    broom.mixed::tidy() %>%
    tt()
effect group term estimate std.error statistic df p.value
fixed NA (Intercept) 5.32423764 0.6624785 8.03684581 8.902457 2.275553e-05
fixed NA TaxonReptile -0.86837312 0.9120619 -0.95209890 7.999997 3.689227e-01
fixed NA TaxonMammal -0.06459683 0.9120619 -0.07082505 7.999997 9.452755e-01
fixed NA TaxonBird -2.74514876 0.9120619 -3.00982728 7.999997 1.681798e-02
fixed NA ExtractionDREX1 -0.24661418 0.2623890 -0.93988004 46.000018 3.521886e-01
fixed NA ExtractionDREX2 0.77684194 0.2623890 2.96064983 46.000018 4.841350e-03
ran_pars Sample:Species sd__(Intercept) 0.58873659 NA NA NA NA
ran_pars Species sd__(Intercept) 0.96787601 NA NA NA NA
ran_pars Residual sd__Observation 0.90894215 NA NA NA NA
all_data  %>%
    filter(Taxon != "Control") %>%
    mutate("log_extract"=log(extract))%>%
    lmerTest::lmer(log(extract) ~ Taxon + Extraction + (1 | Species/Sample), data = ., REML = TRUE) %>%
    plot_model(.,type="pred",terms=c("Taxon","Extraction"),show.data = TRUE)

all_data  %>%
    filter(Taxon != "Control") %>%
    mutate("log_extract"=log(extract))%>%
    lmerTest::lmer(log(extract) ~ Taxon + Extraction + (1 | Species/Sample), data = ., REML = TRUE) %>%
    ggpredict(.,terms="Extraction")
# Predicted values of extract

Extraction | Predicted |          95% CI
----------------------------------------
REF        |    205.25 |  54.62,  771.31
DREX1      |    160.39 |  42.68,  602.74
DREX2      |    446.34 | 118.77, 1677.29

Adjusted for:
*   Taxon = Amphibian
*  Sample = 0 (population-level)
* Species = 0 (population-level)
all_data  %>%
    filter(Taxon != "Control") %>%
    mutate("log_extract"=log(extract))%>%
    lmerTest::lmer(log(extract) ~ Taxon + Extraction + (1 | Species/Sample), data = ., REML = TRUE) %>%
    ggpredict(.,terms="Taxon")
# Predicted values of extract

Taxon     | Predicted |        95% CI
-------------------------------------
Amphibian |    205.25 | 54.62, 771.31
Reptile   |     86.13 | 22.92, 323.67
Mammal    |    192.41 | 51.20, 723.06
Bird      |     13.19 |  3.51,  49.55

Adjusted for:
* Extraction = REF
*     Sample = 0 (population-level)
*    Species = 0 (population-level)
all_data  %>%
    filter(Taxon != "Control") %>%
    mutate("log_extract"=log(extract))%>%
    lmerTest::lmer(log(extract) ~ Taxon + Extraction + (1 | Species/Sample), data = ., REML = TRUE) %>%
    plot_model(.,type="pred",terms=c("Species"),pred.type = "re",ci.lvl = NA)+
        theme(axis.text.x = element_text(angle = 45, hjust = 1))

all_data  %>%
    filter(Taxon != "Control") %>%
    mutate("log_extract"=log(extract))%>%
    lmerTest::lmer(log(extract) ~ Taxon + Extraction + (1 | Species/Sample), data = ., REML = TRUE) %>%
    r.squaredGLMM()
           R2m       R2c
[1,] 0.4053742 0.7671254

2.3 Sample purity

In common laboratory practice, DNA and RNA samples with A260/A280 and A260/A230 > 1.8 are considered to be “clean”, and suitable for use in most downstream applications

2.4 Sample purity A260/A280 Ratios

260 nm and 280 nm are the absorbance wavelengths used to assess the type of nucleic acid present (DNA or RNA) and they provide a rough indication of purity. A reduction of this ratio typically indicates protein contamination while RNA contamination can be detected by an increase of this ratio. The generally accepted 260/280 values are ~1.8 for pure DNA and ~2.0 for RNA. Lower values may indicate the presence of protein, phenol or other contaminants that have an absorbance close to 280 nm.

all_data %>%
  filter(!is.na(x260_280)) %>% 
  select(Extraction, x260_280, Taxon) %>%
  group_by(Extraction) %>%
  #group_by(Taxon, Extraction) %>%
  summarise(value = sprintf("%.2f±%.2f", mean(x260_280), sd(x260_280))) %>%
  pivot_wider(names_from = Extraction, values_from = value) %>%
  tt(caption = "Mean and standard deviation of 260/280 values")
Mean and standard deviation of 260/280 values
REF DREX1 DREX2
1.35±0.18 1.63±0.35 1.44±0.31
all_data %>%
  filter(!is.na(x260_280)) %>% 
  mutate(d260_280=abs(1.8-x260_280)) %>% 
  select(Extraction, d260_280, Taxon) %>%
  group_by(Taxon, Extraction) %>%
  summarise(value = sprintf("%.2f±%.2f", mean(d260_280), sd(d260_280))) %>%
  pivot_wider(names_from = Extraction, values_from = value) %>%
  tt(caption = "Mean and standard deviation of the deviation of 260/280 values from 1.8")
Mean and standard deviation of the deviation of 260/280 values from 1.8
Taxon REF DREX1 DREX2
Amphibian 0.57±0.15 0.33±0.13 0.24±0.14
Reptile 0.40±0.22 0.25±0.16 0.25±0.11
Mammal 0.53±0.12 0.23±0.21 0.43±0.22
Bird 0.35±0.12 0.46±0.24 0.68±0.33
Control 0.33±0.28 0.52±0.16 0.15±0.12

Higher deviation from 1.8 indicates lower purity of the DNA extracts

all_data %>%
  select(Extraction, x260_280, Taxon, Species) %>%
    ggplot(aes(x=Extraction, y=x260_280, color=Species, group=Extraction))+ 
        geom_boxplot(outlier.shape = NA, fill="#f4f4f4", color="#8c8c8c") + 
        geom_jitter() + 
        scale_color_manual(values=vertebrate_colors) +
        facet_grid(. ~ Taxon, scales = "free") +
        theme_minimal() +
        labs(y="260/280 values",x="Extraction method")

all_data  %>%
  filter(!is.na(x260_280),Taxon != "Control") %>% 
  #filter(!is.na(x260_280),Taxon != "Control", !Sample %in% c("ABD27", "AJP51", "AFO83","AAZ65","AGI41", "AIV55")) %>% 
  mutate(d260_280=abs(1.8-x260_280)) %>% 
  lmerTest::lmer(rank(d260_280) ~ Taxon + Extraction + (1 | Species/Sample), data = ., REML = TRUE) %>%
  plot()

all_data  %>%
  filter(!is.na(x260_280),Taxon != "Control") %>% 
  #filter(!is.na(x260_280),Taxon != "Control", !Sample %in% c("ABD27", "AJP51", "AFO83","AAZ65","AGI41", "AIV55")) %>% 
  mutate(d260_280=abs(1.8-x260_280)) %>% 
  lmerTest::lmer(rank(d260_280) ~ Taxon + Extraction + (1 | Species/Sample), data = ., REML = TRUE) %>%
    anova()
Type III Analysis of Variance Table with Satterthwaite's method
           Sum Sq Mean Sq NumDF DenDF F value  Pr(>F)  
Taxon      2420.2  806.74     3    58  2.7091 0.05334 .
Extraction 2166.8 1083.38     2    58  3.6381 0.03247 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
all_data  %>%
  filter(!is.na(x260_280),Taxon != "Control") %>% 
  #filter(!is.na(x260_280),Taxon != "Control", !Sample %in% c("ABD27", "AJP51", "AFO83","AAZ65","AGI41", "AIV55")) %>% 
  mutate(d260_280=abs(1.8-x260_280)) %>% 
  lmerTest::lmer(rank(d260_280) ~ Taxon + Extraction + (1 | Species/Sample), data = ., REML = TRUE) %>%
    broom.mixed::tidy() %>%
    tt()
effect group term estimate std.error statistic df p.value
fixed NA (Intercept) 40.307144 5.621064 7.1707318 58 1.514226e-09
fixed NA TaxonReptile -7.547479 6.014439 -1.2548933 58 2.145505e-01
fixed NA TaxonMammal 1.592086 6.110570 0.2605462 58 7.953653e-01
fixed NA TaxonBird 9.812092 6.204784 1.5813754 58 1.192307e-01
fixed NA ExtractionDREX1 -14.625757 5.434118 -2.6914685 58 9.280304e-03
fixed NA ExtractionDREX2 -9.026627 5.442600 -1.6585137 58 1.026129e-01
ran_pars Sample:Species sd__(Intercept) 0.000000 NA NA NA NA
ran_pars Species sd__(Intercept) 0.000000 NA NA NA NA
ran_pars Residual sd__Observation 17.256500 NA NA NA NA
all_data  %>%
  filter(!is.na(x260_280),Taxon != "Control") %>% 
  #filter(!is.na(x260_280),Taxon != "Control", !Sample %in% c("ABD27", "AJP51", "AFO83","AAZ65","AGI41", "AIV55")) %>% 
  mutate(d260_280=abs(1.8-x260_280)) %>% 
  lmerTest::lmer(rank(d260_280) ~ Taxon + Extraction + (1 | Species/Sample), data = ., REML = TRUE) %>%
    plot_model(.,type="pred",terms=c("Taxon","Extraction"))

all_data  %>%
filter(!is.na(x260_280),Taxon != "Control") %>% 
  #filter(!is.na(x260_280),Taxon != "Control", !Sample %in% c("ABD27", "AJP51", "AFO83","AAZ65","AGI41", "AIV55")) %>% 
    mutate(d260_280=abs(1.8-x260_280)) %>% 
  lmerTest::lmer(rank(d260_280) ~ Taxon + Extraction + (1 | Species/Sample), data = ., REML = TRUE) %>%
    ggpredict(.,terms="Extraction")
# Predicted values of d260_280

Extraction | Predicted |       95% CI
-------------------------------------
REF        |     40.31 | 29.04, 51.57
DREX1      |     25.68 | 15.36, 36.00
DREX2      |     31.28 | 20.95, 41.61

Adjusted for:
*   Taxon = Amphibian
*  Sample = 0 (population-level)
* Species = 0 (population-level)
all_data  %>%
  filter(!is.na(x260_280),Taxon != "Control") %>% 
  mutate(d260_280=abs(1.8-x260_280)) %>% 
  lmerTest::lmer(rank(d260_280) ~ Taxon + Extraction + (1 | Species/Sample), data = ., REML = TRUE) %>%
    r.squaredGLMM()
           R2m       R2c
[1,] 0.1957896 0.1957896

2.5 Sample purity A260/A230 Ratios

The A260/A230 is a sensitive indicator of contaminants that absorb at 230 nm. These contaminants are significantly more numerous than those absorbing at 280 nm, and include chaotropic salts such as guanidine thiocyanate (GTC) and guanidine hydrochloride (GuHCl), EDTA, non-ionic detergents like Triton™ X-100 and Tween® 20, proteins, and phenol. Substances like polysaccharides or free floating solid particles like silica fibers absorb at this wavelength, but will have a weaker effect.

Low 260/230 values indicates the presence of residual extraction reagent (ex. Carbohydrates, Chaotropic salts, phenol).

all_data %>%
  filter(!is.na(x260_230)) %>% 
  select(Extraction, x260_230, Taxon) %>%
  group_by(Extraction) %>%
  #group_by(Taxon, Extraction) %>%
  summarise(value = sprintf("%.2f±%.2f", mean(x260_230), sd(x260_230))) %>%
  pivot_wider(names_from = Extraction, values_from = value) %>%
  tt(caption = "Mean and standard deviation of 260/230 values")
Mean and standard deviation of 260/230 values
REF DREX1 DREX2
0.09±0.11 0.17±0.13 0.20±0.27
all_data %>%
  filter(!is.na(x260_230)) %>% 
  mutate(d260_230=abs(1.8-x260_230)) %>% 
  select(Extraction, d260_230, Taxon) %>%
  group_by(Taxon, Extraction) %>%
  summarise(value = sprintf("%.2f±%.2f", mean(d260_230), sd(d260_230))) %>%
  pivot_wider(names_from = Extraction, values_from = value) %>%
  tt(caption = "Mean and standard deviation of the deviation of 260/230 values from 1.8")
Mean and standard deviation of the deviation of 260/230 values from 1.8
Taxon REF DREX1 DREX2
Amphibian 1.72±0.09 1.53±0.15 1.61±0.17
Reptile 1.76±0.04 1.66±0.13 1.63±0.17
Mammal 1.62±0.17 1.63±0.12 1.38±0.52
Bird 1.72±0.09 1.69±0.10 1.67±0.10
Control 1.79±0.00 1.72±0.09 1.79±0.00

Higher deviation from 1.8 indicates lower purity of the DNA extracts

all_data %>%
  filter(!is.na(x260_230)) %>% 
  select(Extraction, x260_230, Taxon, Species) %>%
    ggplot(aes(x=Extraction, y=x260_230, color=Species, group=Extraction))+ 
        geom_boxplot(outlier.shape = NA, fill="#f4f4f4", color="#8c8c8c") + 
        geom_jitter() + 
        scale_color_manual(values=vertebrate_colors) +
        facet_grid(. ~ Taxon, scales = "free") +
        theme_minimal() +
        labs(y="Deviation of 260/230 values from 1.8",x="Extraction method")

all_data  %>%
  #  filter(!is.na(x260_230),Taxon != "Control") %>% 
  filter(!is.na(x260_230),Taxon != "Control", !Sample %in% c("ABD27", "AJP51", "AFO83","AAZ65","AGI41", "AIV55")) %>% 
  mutate(d260_230=abs(1.8-x260_230)) %>% 
  lmerTest::lmer(rank(d260_230) ~ Taxon + Extraction + (1 | Species/Sample), data = ., REML = TRUE) %>%
  plot()

all_data  %>%
  #  filter(!is.na(x260_230),Taxon != "Control") %>% 
  filter(!is.na(x260_230),Taxon != "Control",!dna_extract %in% c("AGI41E1")) %>% 
  #filter(!is.na(x260_230),Taxon != "Control", !Sample %in% c("ABD27", "AJP51", "AFO83","AAZ65","AGI41", "AIV55")) %>% 
  mutate(d260_230=abs(1.8-x260_230)) %>% 
  lmerTest::lmer(rank(d260_230) ~ Taxon + Extraction + (1 | Species/Sample), data = ., REML = TRUE) %>%
  anova()
Type III Analysis of Variance Table with Satterthwaite's method
            Sum Sq Mean Sq NumDF  DenDF F value   Pr(>F)   
Taxon       633.23  211.08     3  7.947  0.9068 0.479655   
Extraction 2535.12 1267.56     2 40.454  5.4455 0.008049 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
all_data  %>%
  #  filter(!is.na(x260_230),Taxon != "Control") %>% 
  filter(!is.na(x260_230),Taxon != "Control", !Sample %in% c("ABD27", "AJP51", "AFO83","AAZ65","AGI41", "AIV55")) %>% 
  mutate(d260_230=abs(1.8-x260_230)) %>% 
  lmerTest::lmer(rank(d260_230) ~ Taxon + Extraction + (1 | Species/Sample), data = ., REML = TRUE) %>%
  broom.mixed::tidy() %>% 
  tt()
effect group term estimate std.error statistic df p.value
fixed NA (Intercept) 32.4284615 6.339797 5.1150630 12.163079 0.0002446977
fixed NA TaxonReptile 6.8963418 8.091541 0.8522903 8.223421 0.4181819448
fixed NA TaxonMammal -5.7184280 8.091541 -0.7067168 8.223421 0.4992748629
fixed NA TaxonBird 8.7727143 8.273361 1.0603567 8.888935 0.3169426589
fixed NA ExtractionDREX1 -9.6666667 4.231586 -2.2844072 33.999693 0.0287121253
fixed NA ExtractionDREX2 -13.0000000 4.231586 -3.0721338 33.999693 0.0041659257
ran_pars Sample:Species sd__(Intercept) 0.8608917 NA NA NA NA
ran_pars Species sd__(Intercept) 7.6823091 NA NA NA NA
ran_pars Residual sd__Observation 12.6947594 NA NA NA NA
all_data  %>%
  #  filter(!is.na(x260_230),Taxon != "Control") %>% 
  filter(!is.na(x260_230),Taxon != "Control", !Sample %in% c("ABD27", "AJP51", "AFO83","AAZ65","AGI41", "AIV55")) %>% 
  mutate(d260_230=abs(1.8-x260_230)) %>% 
  lmerTest::lmer(rank(d260_230) ~ Taxon + Extraction + (1 | Species/Sample), data = ., REML = TRUE) %>%
  plot_model(.,type="pred",terms=c("Taxon","Extraction"),show.data = TRUE)

all_data  %>%
  filter(!is.na(x260_230),Taxon != "Control") %>% 
  mutate(d260_230=abs(1.8-x260_230)) %>% 
  lmerTest::lmer(rank(d260_230) ~ Taxon + Extraction + (1 | Species/Sample), data = ., REML = TRUE) %>%
  r.squaredGLMM()
          R2m       R2c
[1,] 0.178054 0.4098904

2.6 Amplification performance

all_data %>%
  filter(!is.na(ct_d_rn)) %>% 
  select(Extraction, ct_d_rn, Taxon) %>%
  group_by(Taxon, Extraction) %>%
  summarise(value = sprintf("%.2f±%.2f", mean(ct_d_rn), sd(ct_d_rn))) %>%
  pivot_wider(names_from = Extraction, values_from = value) %>%
  tt(caption = "Mean and standard deviation of Cts (cycle threshold) values")
Mean and standard deviation of Cts (cycle threshold) values
Taxon REF DREX1 DREX2
Amphibian 18.19±2.11 15.57±3.29 14.42±2.53
Reptile 16.16±3.91 14.56±3.36 16.33±3.37
Mammal 15.21±4.13 14.75±1.84 14.45±2.06
Bird 20.36±3.58 20.83±2.31 18.91±2.51
Control 23.86±2.69 23.39±0.76 26.23±4.24
all_data %>%
  #filter(!Taxon=="Control") %>% 
    select(Library,Species,Extraction, ct_d_rn,Taxon) %>%
    unique() %>%
    ggplot(aes(x=Extraction, y=ct_d_rn, color=Species, group=Extraction))+ 
        geom_boxplot(outlier.shape = NA, fill="#f4f4f4", color="#8c8c8c") + 
        geom_jitter() + 
        scale_color_manual(values=vertebrate_colors) +
        facet_grid(. ~ Taxon, scales = "free") +
        theme_minimal() +
        labs(y="Cts (cycle threshold) values",x="Extraction method")

all_data %>%
    select(dna_extract, ct_d_rn, ng_ul_lib, Species, Extraction) %>% 
    ggplot(aes(x=log10(ng_ul_lib), y=ct_d_rn)) + 
      geom_point(aes(color=Extraction)) + geom_smooth(method = "lm", se=FALSE) 

all_data  %>%
  filter(Taxon != "Control") %>%
  lmerTest::lmer(ct_d_rn ~ Taxon + Extraction + log10(ng_ul_lib) + (1 | Species/Sample), data = ., REML = TRUE) %>%
  plot()

all_data  %>%
  filter(Taxon != "Control") %>%
  lmerTest::lmer(ct_d_rn ~ Taxon + Extraction + log10(ng_ul_lib) + (1 | Species/Sample), data = ., REML = TRUE) %>%
  anova()
Type III Analysis of Variance Table with Satterthwaite's method
                  Sum Sq Mean Sq NumDF  DenDF F value    Pr(>F)    
Taxon             22.392   7.464     3  8.709  1.2818    0.3402    
Extraction        26.585  13.292     2 45.423  2.2826    0.1136    
log10(ng_ul_lib) 146.211 146.211     1 39.839 25.1082 1.154e-05 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
all_data  %>%
  filter(Taxon != "Control") %>%
  lmerTest::lmer(ct_d_rn ~ Taxon + Extraction + log10(ng_ul_lib) + (1 | Species/Sample), data = ., REML = TRUE) %>%
  broom.mixed::tidy() %>% 
  tt()
effect group term estimate std.error statistic df p.value
fixed NA (Intercept) 17.5438706 0.8220013 21.3428733 13.276020 1.154989e-11
fixed NA TaxonReptile -1.0851748 1.0070686 -1.0775579 7.629471 3.141183e-01
fixed NA TaxonMammal -1.2919091 0.9970232 -1.2957662 7.438002 2.338163e-01
fixed NA TaxonBird 0.5700030 1.2068017 0.4723253 11.583255 6.454686e-01
fixed NA ExtractionDREX1 -1.4247190 0.7005353 -2.0337576 44.938946 4.790546e-02
fixed NA ExtractionDREX2 -1.0904678 0.7003063 -1.5571298 44.905296 1.264602e-01
fixed NA log10(ng_ul_lib) -3.2269503 0.6439979 -5.0108085 39.838561 1.154229e-05
ran_pars Sample:Species sd__(Intercept) 0.7960002 NA NA NA NA
ran_pars Species sd__(Intercept) 0.4512907 NA NA NA NA
ran_pars Residual sd__Observation 2.4131358 NA NA NA NA
all_data  %>%
  filter(Taxon != "Control") %>%
  lmerTest::lmer(ct_d_rn ~ Taxon + Extraction + log10(ng_ul_lib) + (1 | Species/Sample), data = ., REML = TRUE) %>%
  plot_model(.,type="pred",terms=c("Taxon","Extraction"),show.data = TRUE)

all_data  %>%
    filter(Taxon != "Control") %>%
    mutate("log_extract"=log(extract))%>%
    lmerTest::lmer(ct_d_rn ~ Taxon + Extraction + log10(ng_ul_lib) + (1 | Species/Sample), data = ., REML = TRUE) %>%
    ggeffects::ggpredict(.,terms="Extraction")
# Predicted values of ct_d_rn

Extraction | Predicted |       95% CI
-------------------------------------
REF        |     16.75 | 15.13, 18.37
DREX1      |     15.32 | 13.69, 16.96
DREX2      |     15.66 | 14.03, 17.28

Adjusted for:
*     Taxon = Amphibian
* ng_ul_lib =      1.76
*    Sample = 0 (population-level)
*   Species = 0 (population-level)
all_data  %>%
  filter(Taxon != "Control") %>%
  lmerTest::lmer(ct_d_rn ~ Taxon + Extraction + log10(ng_ul_lib) + (1 | Species/Sample), data = ., REML = TRUE) %>%
  r.squaredGLMM()
           R2m       R2c
[1,] 0.5145871 0.5756074