Chapter 15 Physiological measurements

15.1 Respirometry

load("data/data_03122025.Rdata")
respirometry_resp2 <- read_excel("data/respirometry_resp2.xlsx")
respirometry_resp2$individual <- as.factor(respirometry_resp2$individual)
respirometry_resp2$cage <- as.factor(respirometry_resp2$cage)
respirometry_resp2$time_point <- as.factor(respirometry_resp2$time_point)
respirometry_resp2$type <- as.factor(respirometry_resp2$type)
respirometry_resp2$population <- as.factor(respirometry_resp2$population)
respirometry_resp2$QC_normalized <- as.numeric(respirometry_resp2$QC_normalized)
respirometry_resp2$r2 <- as.numeric(respirometry_resp2$r2)


#Filter NA values
respirometry_resp2<-respirometry_resp2 %>%
  filter(QC_normalized!="NA")

15.1.1 Acclimation oxygen consumption

respirometry_resp2 %>%
  filter(time_point=="0")%>%
  filter(individual!="AH1_2nd_8") %>%
  filter(individual!="LI1_2nd_4") %>%
  filter(individual!="LI1_2nd_3") %>% #lizard doesn't stop moving during the whole measurement, increasing the value and making it and outlier
  filter(individual!="LI1_2nd_10") %>%
  ggplot(aes(x = population, y = QC_normalized, color=population, fill=population, alpha=0.2)) +
    geom_boxplot()+
    geom_jitter() +
      scale_color_manual(name="Population",
          breaks=c("Cold","Warm"),
          labels=c("Cold","Warm"),
          values=c('#008080', "#d57d2c")) +
      scale_fill_manual(name="Population",
          breaks=c("Cold","Warm"),
          labels=c("Cold","Warm"),
          values=c('#00808050', "#d57d2c50"))+
    #geom_text(aes(label = individual), hjust = 0, nudge_x = 0.05) +
    theme(axis.text.x = element_text(angle = 45, vjust = 0.5, hjust=1))+
    stat_compare_means(size=3,vjust = 3, hjust=1 )+
    theme(legend.position="none",
          panel.background = element_blank(),
          panel.grid.major = element_blank(),
          panel.grid.minor = element_blank())+
    theme_minimal()+
    labs(x = "Population", y= "Normalized O2 consumption (ml/s/g)")

15.1.2 Time-point oxygen consumption

respirometry_resp2 %>%
   filter(weight!=5.19)%>%
  filter(weight!=5.91)%>%
  filter(weight!=5.03)%>%
  filter(r2!=0.808)%>%
  filter(QC_normalized!=0.000036) %>% #r2 low
  filter(r2!=0.728) %>%
  filter(cage!="Cold_17") %>%
  filter(cage!="Cold_3") %>%
  filter(cage!="Cold_6") %>%
  filter(cage!="Cold_9") %>%
  filter(cage!="Hot_2") %>%
  filter(cage!="Hot_8") %>%  #r2 low
  ggplot(aes(x = time_point, y = QC_normalized, color=time_point, fill=time_point, alpha=0.2)) +
    geom_boxplot()+
    geom_jitter() +
      scale_color_manual(name="Time_point",
          breaks=c("0","1","2"),
          labels=c("Acclimation","1 week post FMT", "2 weeks post FMT"),
          values=c('#BFA366', "#dec14b", "#6E5244")) +
      scale_fill_manual(name="Time_point",
          breaks=c("0","1","2"),
          labels=c("Acclimation","1 week post FMT", "2 weeks post FMT"),
          values=c('#BFA36650', "#dec14b50","#6E524450"))+
    theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))+
    facet_wrap(~ factor(type))+
    theme(legend.position="right")+
    theme_classic()+
    labs(x = "Time_point", y= "Normalized O2 consumption (ml/s/g)")

respirometry_resp2 %>%
  filter(weight!=5.19)%>%
  filter(weight!=5.91)%>%
  filter(weight!=5.03)%>%
  filter(r2!=0.808)%>%
  filter(QC_normalized!=0.000036) %>% #r2 low
  filter(r2!=0.728) %>%
  ggplot(aes(x = time_point, y = QC_normalized, color=time_point, fill=time_point, alpha=0.2)) +
    geom_boxplot()+
    geom_jitter() +
    scale_color_manual(name="Time_point",
          breaks=c("0","1","2"),
          labels=c("Acclimation","1 week post FMT", "2 weeks post FMT"),
          values=c('#BFA366', "#dec14b", "#6E5244")) +
      scale_fill_manual(name="Time_point",
          breaks=c("0","1","2"),
          labels=c("Acclimation","1 week post FMT", "2 weeks post FMT"),
          values=c('#BFA36650', "#dec14b50","#6E524450"))+
    theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))+
    facet_wrap(~ factor(type))+
    stat_compare_means(size=3)+
    theme(legend.position="none")+
    labs(x = "Time_point", y= "Normalized O2 consumption (ml/s/g)")+
    geom_signif(comparisons = list(c("0", "1"), c("0", "2"), c("1", "2")),
              map_signif_level = TRUE)

15.1.3 Data modelling

15.1.3.1 CI from acclimation to post FMT

#subset all the wrong measurements
respirometry_resp2_subsetci<-respirometry_resp2%>%
  filter(type!="WC")%>%
  filter(weight!=5.19)%>%
  filter(weight!=5.91)%>%
  filter(weight!=5.03)%>%
  filter(r2!=0.808)%>%
  filter(QC_normalized!=0.000036) %>% #r2 low
  filter(r2!=0.728) %>%
  filter(cage!="Cold_17") %>%
  filter(cage!="Cold_3") %>%
  filter(cage!="Cold_6") %>%
  filter(cage!="Cold_9") %>%
  filter(cage!="Hot_2") %>%
  filter(cage!="Hot_8")%>%
  filter(type=="CI")

#Create linear model formula
model <- lme(fixed = QC_normalized ~  time_point, data = respirometry_resp2_subsetci,
             random = ~ 1 | individual)

#Print the model summary
summary(model)
Linear mixed-effects model fit by REML
  Data: respirometry_resp2_subsetci 
        AIC       BIC   logLik
  -309.2305 -304.2518 159.6152

Random effects:
 Formula: ~1 | individual
        (Intercept)    Residual
StdDev: 2.29294e-05 6.76107e-05

Fixed effects:  QC_normalized ~ time_point 
                    Value    Std.Error DF   t-value p-value
(Intercept)  0.0004114141 2.521493e-05 12 16.316288  0.0000
time_point1 -0.0001157218 3.700860e-05 12 -3.126888  0.0087
time_point2 -0.0001871709 3.294370e-05 12 -5.681539  0.0001
 Correlation: 
            (Intr) tm_pn1
time_point1 -0.622       
time_point2 -0.695  0.476

Standardized Within-Group Residuals:
       Min         Q1        Med         Q3        Max 
-1.6331042 -0.4856905 -0.3210267  0.6764998  1.7762233 

Number of Observations: 23
Number of Groups: 9 
MuMIn::r.squaredGLMM(model)
           R2m       R2c
[1,] 0.5715768 0.6157691

15.1.3.2 CC from acclimation to post FMT

#subset all the wrong measurements
respirometry_resp2_subsetcc<-respirometry_resp2%>%
  filter(type!="WC")%>%
  filter(weight!=5.19)%>%
  filter(weight!=5.91)%>%
  filter(weight!=5.03)%>%
  filter(r2!=0.808)%>%
  filter(QC_normalized!=0.000036) %>% #r2 low
  filter(r2!=0.728) %>%
  filter(cage!="Cold_17") %>%
  filter(cage!="Cold_3") %>%
  filter(cage!="Cold_6") %>%
  filter(cage!="Cold_9") %>%
  filter(cage!="Hot_2") %>%
  filter(cage!="Hot_8")%>%
  filter(type=="CC")

#Create linear model formula
model <- lme(fixed = QC_normalized ~  time_point, data = respirometry_resp2_subsetcc,
             random = ~ 1 | individual)

#Print the model summary
summary(model)
Linear mixed-effects model fit by REML
  Data: respirometry_resp2_subsetcc 
        AIC       BIC  logLik
  -154.1358 -152.1463 82.0679

Random effects:
 Formula: ~1 | individual
         (Intercept)     Residual
StdDev: 5.171869e-05 0.0001025694

Fixed effects:  QC_normalized ~ time_point 
                    Value    Std.Error DF   t-value p-value
(Intercept)  0.0004012041 5.137181e-05  7  7.809810  0.0001
time_point1 -0.0000504835 6.487061e-05  7 -0.778219  0.4619
time_point2 -0.0002544009 6.944695e-05  7 -3.663241  0.0080
 Correlation: 
            (Intr) tm_pn1
time_point1 -0.631       
time_point2 -0.590  0.467

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-1.15689254 -0.50323582 -0.07749878  0.40769296  1.89013865 

Number of Observations: 14
Number of Groups: 5 
MuMIn::r.squaredGLMM(model)
           R2m       R2c
[1,] 0.4769358 0.5829662

15.1.3.3 WC from acclimation to post FMT

#subset all the wrong measurements
respirometry_resp2_subsetwc<-respirometry_resp2%>%
  filter(weight!=5.19)%>%
  filter(weight!=5.91)%>%
  filter(weight!=5.03)%>%
  filter(r2!=0.808)%>%
  filter(QC_normalized!=0.000036) %>% #r2 low
  filter(r2!=0.728) %>%
  filter(cage!="Cold_17") %>%
  filter(cage!="Cold_3") %>%
  filter(cage!="Cold_6") %>%
  filter(cage!="Cold_9") %>%
  filter(cage!="Hot_2") %>%
  filter(cage!="Hot_8")%>%
  filter(type=="WC")

#Create linear model formula
model <- lme(fixed = QC_normalized ~  time_point, data = respirometry_resp2_subsetwc,
             random = ~ 1 | individual)

#Print the model summary
summary(model)
Linear mixed-effects model fit by REML
  Data: respirometry_resp2_subsetwc 
        AIC      BIC  logLik
  -233.5539 -229.691 121.777

Random effects:
 Formula: ~1 | individual
         (Intercept)     Residual
StdDev: 0.0001075056 6.948756e-05

Fixed effects:  QC_normalized ~ time_point 
                    Value    Std.Error DF   t-value p-value
(Intercept)  3.003645e-04 5.225790e-05 10  5.747734  0.0002
time_point1  1.761614e-05 4.206676e-05 10  0.418766  0.6842
time_point2 -6.069897e-05 4.206676e-05 10 -1.442920  0.1796
 Correlation: 
            (Intr) tm_pn1
time_point1 -0.491       
time_point2 -0.491  0.610

Standardized Within-Group Residuals:
       Min         Q1        Med         Q3        Max 
-1.3485818 -0.5221958  0.1544826  0.3441676  1.4275786 

Number of Observations: 19
Number of Groups: 7 
MuMIn::r.squaredGLMM(model)
            R2m       R2c
[1,] 0.07285218 0.7267936

15.1.3.4 CC vs CI Raw data modelling (LMM)

#subset all the wrong measurements
respirometry_resp2_subset<-respirometry_resp2%>%
  filter(type!="WC")%>%
  filter(weight!=5.19)%>%
  filter(weight!=5.91)%>%
  filter(weight!=5.03)%>%
  filter(r2!=0.808)%>%
  filter(QC_normalized!=0.000036) %>% #r2 low
  filter(r2!=0.728) %>%
  filter(cage!="Cold_17") %>%
  filter(cage!="Cold_3") %>%
  filter(cage!="Cold_6") %>%
  filter(cage!="Cold_9") %>%
  filter(cage!="Hot_2") %>%
  filter(cage!="Hot_8")

#Create linear model formula
model <- lme(fixed = QC_normalized ~  time_point+type, data = respirometry_resp2_subset,
             random = ~ 1 | individual)

#Print the model summary
summary(model)
Linear mixed-effects model fit by REML
  Data: respirometry_resp2_subset 
        AIC       BIC   logLik
  -499.7762 -490.7972 255.8881

Random effects:
 Formula: ~1 | individual
         (Intercept)     Residual
StdDev: 2.828782e-05 8.566976e-05

Fixed effects:  QC_normalized ~ time_point + type 
                    Value    Std.Error DF   t-value p-value
(Intercept)  0.0004015990 3.245994e-05 21 12.372144  0.0000
time_point1 -0.0000856584 3.541372e-05 21 -2.418792  0.0247
time_point2 -0.0002059412 3.378535e-05 21 -6.095577  0.0000
typeCI       0.0000094826 3.334928e-05 12  0.284343  0.7810
 Correlation: 
            (Intr) tm_pn1 tm_pn2
time_point1 -0.530              
time_point2 -0.478  0.472       
typeCI      -0.638  0.055 -0.063

Standardized Within-Group Residuals:
       Min         Q1        Med         Q3        Max 
-1.6356763 -0.5924021 -0.1745956  0.3513655  2.8648961 

Number of Observations: 37
Number of Groups: 14 
MuMIn::r.squaredGLMM(model)
           R2m      R2c
[1,] 0.4855379 0.536115

15.1.3.5 CI vs WC Raw data modelling (LMM)

#Filter out WC from the dataframe and create a subset
respirometry_resp2_subset<-respirometry_resp2%>%
  filter(weight!=5.19)%>%
  filter(weight!=5.91)%>%
  filter(weight!=5.03)%>%
  filter(r2!=0.808)%>%
  filter(QC_normalized!=0.000036) %>% #r2 low
  filter(r2!=0.728) %>%
  filter(cage!="Cold_17") %>%
  filter(cage!="Cold_3") %>%
  filter(cage!="Cold_6") %>%
  filter(cage!="Cold_9") %>%
  filter(cage!="Hot_2") %>%
  filter(cage!="Hot_8")

#Create linear model formula
model <- lme(fixed = QC_normalized ~  time_point+type, data = respirometry_resp2_subset,
             random = ~ 1 | individual)

#Print the model summary
summary(model)
Linear mixed-effects model fit by REML
  Data: respirometry_resp2_subset 
        AIC       BIC   logLik
  -765.5592 -752.0364 389.7796

Random effects:
 Formula: ~1 | individual
        (Intercept)     Residual
StdDev: 7.00926e-05 8.491172e-05

Fixed effects:  QC_normalized ~ time_point + type 
                    Value    Std.Error DF   t-value p-value
(Intercept)  0.0003725904 4.195910e-05 33  8.879849  0.0000
time_point1 -0.0000487464 2.909231e-05 33 -1.675576  0.1033
time_point2 -0.0001601635 2.806418e-05 33 -5.707045  0.0000
typeCI       0.0000122457 4.883159e-05 18  0.250774  0.8048
typeWC      -0.0000129492 5.103162e-05 18 -0.253748  0.8026
 Correlation: 
            (Intr) tm_pn1 tm_pn2 typeCI
time_point1 -0.347                     
time_point2 -0.314  0.517              
typeCI      -0.736  0.030 -0.038       
typeWC      -0.683 -0.036 -0.060  0.606

Standardized Within-Group Residuals:
       Min         Q1        Med         Q3        Max 
-1.5658463 -0.5182418 -0.1041003  0.5945025  2.3909153 

Number of Observations: 56
Number of Groups: 21 
MuMIn::r.squaredGLMM(model)
           R2m       R2c
[1,] 0.2849197 0.5747142