The goal of this study was to determine whether energetic state influences tail regeneration in brown anoles, and whether treatment with IGF1 or IGF2 can mitigate the negative effects of energetic stress.
Energetic state was quantified as percent body weight loss, which serves as a continuous measure of metabolic stress.
Regeneration was quantified as percent regeneration over eight weeks following tail autotomy.
#load all packages necessary to run statistical and graphic models
library(ggplot2)
library(nlme)
library(multcomp)
library(emmeans)
library(MuMIn)
library(bestNormalize)
library(lmtest)
library(car)
library(Rmisc)
library(dplyr)
library(viridis)
library(hrbrthemes)
library(plotly)
library(tidyr)
library(ggeffects)
library(lme4)
#Set position dodge location for categorized boxplot graphs and data point locations
pd <- position_dodge(0.02)
dodge <- position_dodge(width = 0.6)
Before interpreting treatment effects, we need to confirm that groups did not differ systematically in size. If one group began with larger animals, any differences in regeneration could reflect starting size rather than treatment.
#Read in data set that includes the SVL, mass, and treatment assignment of each individual immediately before beginning the experiment
diet=read.csv("WL.analysis.csv")
#subset data to only include the original body measurements
pre.diet=subset(diet, Week == "-4")
#Run linear model to determine if there was a statistical difference in SVL at the time of beginning the experiment
SVL=lm(SVL~Treatment, data=pre.diet)
#print linear model results
anova(SVL)
## Analysis of Variance Table
##
## Response: SVL
## Df Sum Sq Mean Sq F value Pr(>F)
## Treatment 3 6.984 2.3279 0.6542 0.5829
## Residuals 72 256.214 3.5585
#plot the relationship of SVL across treatments
svl.pl=ggplot(pre.diet, aes(x=as.factor(Treatment), y=SVL, fill=Treatment)) +
#violin plot displays the density of data at each point displaying the mix and max of each treatment as well
geom_violin(trim=F, position= dodge, scale="width") +
scale_fill_manual(values = c("slategrey", "lemonchiffon2", "thistle4", "mistyrose3")) + #insert boxplot overlay displaying the quantiles and means of each group
geom_boxplot(width=0.1, position= dodge, outlier.shape = NA) +
geom_jitter(width=0.1) +
xlab("Treatment")
svl.pl
ggsave(svl.pl, file="svl.png", width=5, height=4, dpi=600)
Result: There was no statistical difference in body size in SVL at the beginning of the experimental period between treatments.
#Run linear model to determine if there was a statistical difference in SVL at the time of beginning the experiment
Mass=lm(Mass~Treatment, data=pre.diet)
#print linear model results
anova(Mass)
## Analysis of Variance Table
##
## Response: Mass
## Df Sum Sq Mean Sq F value Pr(>F)
## Treatment 3 0.3761 0.12538 0.5547 0.6467
## Residuals 72 16.2743 0.22603
#Plot the relationship of SVL across treatments
mass.pl=ggplot(pre.diet, aes(x=as.factor(Treatment), y=Mass, fill=Treatment)) +
#violin plot displays the density of data at each point displaying the mix and max of each treatment as well
geom_violin(trim=F, position= dodge, scale="width") +
scale_fill_manual(values = c("slategrey", "lemonchiffon2", "thistle4", "mistyrose3")) + geom_boxplot(width=0.1, position= dodge, outlier.shape = NA) +
geom_jitter(width=0.1) +
xlab("Treatment")
ggsave(mass.pl, file="mass.png", width=5, height=4, dpi=600)
Result: There was no statistical difference in body size in mass at the beginning of the experimental period between treatments.
This verifies that the experimental manipulation successfully altered energetic state.
#Look at data set including the body measurements (mass) over time before and after diet implementation. This data set is designed to verify that the diet did result in weight loss in the DR group, and that weight loss levels off before the experiment begins. We do not want to begin the experiment with some animals actively losing weight at a high rate, and others not.
#Subset data to be only the data collected immediately before the experiment begins (week -1).
diet.an=subset(diet, Week == -1)
#Run linear model determining if the group on a diet lost more weight than the group on the ad lib food
diet.lm=lm(Perc_WL~Diet, data=diet.an)
#print the results
anova(diet.lm)
## Analysis of Variance Table
##
## Response: Perc_WL
## Df Sum Sq Mean Sq F value Pr(>F)
## Diet 1 608.22 608.22 13.854 0.0004068 ***
## Residuals 67 2941.39 43.90
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Plot the relationship of percent weight loss between the two groups (diet restricted and ad lib)
diet.pl=ggplot(diet.an, aes(x=as.factor(Diet), y=Perc_Orig, fill=Diet)) +
#violin plot displays the density of data at each point displaying the mix and max of each treatment as well
geom_violin(trim=F, position= dodge, scale="width") +
scale_fill_manual(values = c("slategrey", "lemonchiffon2")) + #insert boxplot overlay displaying the quantiles and means of each group
geom_boxplot(width=0.1, position= dodge, outlier.shape = NA) +
geom_jitter(width=0.1) +
xlab("Diet")
ggsave(diet.pl, file="diet.png", width=5, height=4, dpi=600)
diet.pl
Result: The animals on a restricted diet lost significantly more of their body weight than those from the ad lib diet. This indicates that the diet was effective at calorically restricting the animals. The animals on the ad lib diet lost <5% of their total body weight on average, indicating that the ad lib diet was truly ad lib.
#Plot the relationship of percent weight loss between the two groups (diet restricted and ad lib) over time
diet2.pl=ggplot(diet, aes(x=as.factor(Week), y=Mass, fill=Diet)) +
#violin plot displays the density of data at each point displaying the mix and max of each treatment as well
geom_violin(trim=F, position= dodge, scale="width", width=0.5) +
scale_fill_manual(values = c("slategrey", "lemonchiffon2")) + #insert boxplot overlay displaying the quantiles and means of each group
geom_boxplot(width=0.1, position= dodge, outlier.shape = NA) +
geom_jitter(position= dodge) +
xlab("Week")
ggsave(diet2.pl, file="diet2.png", width=5, height=4, dpi=600)
#plot this relationship as a line graph
diet2.pl=ggplot(diet, aes(x=Week, y=Mass, colour=Diet)) +
geom_smooth() +
scale_color_manual(values = c("slategrey", "lemonchiffon2"))
diet3.pl=ggplot(diet, aes(x=Week, y=Perc_WL, colour=Diet)) +
geom_smooth() +
scale_color_manual(values = c("slategrey", "lemonchiffon2"))
diet4.pl=ggplot(diet, aes(x=Week, y=Perc_Orig, colour=Diet)) +
geom_smooth() +
scale_color_manual(values = c("slategrey", "lemonchiffon2"))
ggsave(diet4.pl, file="diet4.png", width=4.75, height=4, dpi=600)
diet2.pl
diet3.pl
diet4.pl
Result: There was weight fluctuation in the early week, but the weight loss had tapered off by the beginning of the experiment and steadied.
#Length Loss Analysis
reg <- read.csv("R.analysis.currated.csv", stringsAsFactors = FALSE)
reg_sub=subset(reg, Week>2)
pl.ll=ggplot(reg, aes(x=Week, y=Regeneration, colour=Animal_ID)) +
geom_line(aes(group = Animal_ID)) +
facet_wrap(~Treatment, scales="free", ncol=2) +
geom_text(aes(label=Animal_ID),hjust=0, vjust=0, size=2)+
theme(legend.position = "none")
pl.ll
ggsave(pl.ll, file="length_loss.png", width=8, height=8, dpi=600)
pl.ll.sub=ggplot(reg_sub, aes(x=Week, y=Regeneration, colour=Animal_ID)) +
geom_line(aes(group = Animal_ID)) +
facet_wrap(~Treatment, scales="free", ncol=2) +
geom_text(aes(label=Animal_ID),hjust=0, vjust=0, size=2)+
theme(legend.position = "none")
pl.ll.sub
ggsave(pl.ll.sub, file="length_loss_sub.png", width=8, height=8, dpi=600)
Result: There are clear inconsistencies following the 4 week timepoint. Beginning at week 5, there were points in time where there were decreases in regeneration length (meaning tail length was lost). Therefore, we decided to zoom in to the first four weeks of time. Additionally, this decision is supported by the Beatty, Mote, Schwartz Regeneration paper indicating the majority of investment into tail regeneration occurs during the first 4 weeks of tail regeneration. There were no additional inconsistencies in the tail regeneration patterns within the first 4 weeks.
#upload raw data set in long format with all 8 weeks of regeneration, reproduction, and weight data following the acclimation period.
data=read.csv("R.analysis.currated.csv")
early_reg=subset(data, Week <5)
#The primary data set used in analysis will be weeks 1-4. We chose this because our previous study (Beatty, Mote and Schwartz 2020) shows that nearly all investment into regeneration occurs in the first four weeks of regeneration. Additionally, the study was performed late in the season, as reproduction tapered off, and there were issues with measurements, COVID, and feeding during the end of the experiment.
pl.reg.rate=ggplot(early_reg, aes(x=Week, y=Rate_Reg, colour=Animal_ID)) +
geom_line(aes(group = Animal_ID)) +
facet_wrap(~Treatment, scales="free", ncol=2) +
geom_text(aes(label=Animal_ID),hjust=0, vjust=0, size=2)+
theme(legend.position = "none")
pl.reg.rate
pl.perc.reg=ggplot(early_reg, aes(x=Week, y=Perc.Regeneration, colour=Animal_ID)) +
geom_line(aes(group = Animal_ID)) +
facet_wrap(~Treatment, scales="free", ncol=2) +
geom_text(aes(label=Animal_ID),hjust=0, vjust=0, size=2)+
theme(legend.position = "none")
pl.perc.reg
Result: Analyses were previously completed using the rate of tail regeneration rather than the regenerative length. This showed that there was a large spike in regenerative investment between weeks 2 and 3, which then decreased significantly again by week 4 (also consistant with our previous findings). This was the case for nearly all individials regardless of treatment assignment. The validation of regeneration using this metric was a sanity check. For analyses, percent regneration is used, as it accounts for differences in total amount needed to regenerate, and possible variations in body size of the animals (volume of tissue needed to regenerate varies between animal).
outlierTest(lm(Rate_Reg~ Treatment*Week, random=~1|Animal_ID , data=early_reg, na.action=na.omit))
## No Studentized residuals with Bonferroni p < 0.05
## Largest |rstudent|:
## rstudent unadjusted p-value Bonferroni p
## 169 2.990036 0.0031587 0.62857
outlierTest(lm(Perc.Regeneration~ Treatment*Week, random=~1|Animal_ID , data=early_reg, na.action=na.omit))
## rstudent unadjusted p-value Bonferroni p
## 274 4.241648 3.0990e-05 0.0082432
## 275 4.217107 3.4316e-05 0.0091280
## 277 4.051736 6.7389e-05 0.0179250
Result: When using percent regeneration, BC333 and BC335 at week 4 are statistical outliers. These are the two highest individuals in the ad lib group. Additionally, in the IGF2 group individual BC337 is labeled as an outlier at week 4. Using the corrected p-values, the rate of regeneration does not have any statistical outliers. These samples did not have any questionable data, and followed reliable trends indicating that they are statistical outliers, but biologically accurate. The individual of concern (BC327) was not indicated as an outlier in either test. Therefore, no data points were excluded as data points. Again, regeneration within the first 4 weeks appears to be consistent across individuals and a reliable measure for analysis.
data=read.csv("R.analysis.currated.csv")
data <- data %>%
mutate(
Diet = case_when(
Treatment == "AdLib" ~ "AdLib",
Treatment %in% c("DR", "DR.IGF1", "DR.IGF2") ~ "Restricted"
)
)
data$Diet <- factor(data$Diet, levels = c("AdLib", "Restricted"))
model_weightloss <- lmer(
Perc.Regeneration ~ Week * Perc.WeightLoss + (1 | Animal_ID),
data = data
)
summary(model_weightloss)
## Linear mixed model fit by REML ['lmerMod']
## Formula: Perc.Regeneration ~ Week * Perc.WeightLoss + (1 | Animal_ID)
## Data: data
##
## REML criterion at convergence: 2882.1
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.1479 -0.5381 0.0486 0.5775 3.3623
##
## Random effects:
## Groups Name Variance Std.Dev.
## Animal_ID (Intercept) 18.41 4.291
## Residual 21.28 4.614
## Number of obs: 465, groups: Animal_ID, 69
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) -6.07577 1.13441 -5.356
## Week 4.85717 0.19194 25.305
## Perc.WeightLoss 0.07376 0.05308 1.390
## Week:Perc.WeightLoss -0.03017 0.01002 -3.011
##
## Correlation of Fixed Effects:
## (Intr) Week Prc.WL
## Week -0.676
## Prc.WghtLss -0.792 0.638
## Wk:Prc.WghL 0.575 -0.852 -0.747
model_weightloss2 <- lmer(
Rate_Reg ~ Week * Perc.WeightLoss + (1 | Animal_ID),
data = data
)
summary(model_weightloss2)
## Linear mixed model fit by REML ['lmerMod']
## Formula: Rate_Reg ~ Week * Perc.WeightLoss + (1 | Animal_ID)
## Data: data
##
## REML criterion at convergence: 1943.2
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -1.3348 -0.7224 -0.2061 0.5857 6.0165
##
## Random effects:
## Groups Name Variance Std.Dev.
## Animal_ID (Intercept) 0.000 0.000
## Residual 7.411 2.722
## Number of obs: 398, groups: Animal_ID, 68
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 2.575384 0.641542 4.014
## Week -0.014038 0.123911 -0.113
## Perc.WeightLoss 0.047865 0.034100 1.404
## Week:Perc.WeightLoss -0.006574 0.006620 -0.993
##
## Correlation of Fixed Effects:
## (Intr) Week Prc.WL
## Week -0.901
## Prc.WghtLss -0.831 0.746
## Wk:Prc.WghL 0.743 -0.822 -0.910
## optimizer (nloptwrap) convergence code: 0 (OK)
## boundary (singular) fit: see help('isSingular')
model_weightloss3 <- lmer(
Regeneration ~ Week * Perc.WeightLoss + (1 | Animal_ID),
data = data
)
summary(model_weightloss3)
## Linear mixed model fit by REML ['lmerMod']
## Formula: Regeneration ~ Week * Perc.WeightLoss + (1 | Animal_ID)
## Data: data
##
## REML criterion at convergence: 2439.5
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.94714 -0.58783 0.05597 0.59658 2.92872
##
## Random effects:
## Groups Name Variance Std.Dev.
## Animal_ID (Intercept) 6.532 2.556
## Residual 8.341 2.888
## Number of obs: 464, groups: Animal_ID, 69
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) -3.381642 0.700657 -4.826
## Week 2.983636 0.120040 24.855
## Perc.WeightLoss 0.008783 0.033047 0.266
## Week:Perc.WeightLoss -0.005927 0.006263 -0.946
##
## Correlation of Fixed Effects:
## (Intr) Week Prc.WL
## Week -0.685
## Prc.WghtLss -0.798 0.640
## Wk:Prc.WghL 0.582 -0.851 -0.750
data <- data %>%
mutate(WL_group = cut(Perc.WeightLoss, breaks = 3))
ggplot(data, aes(x = Week, y = Perc.Regeneration, color = WL_group)) +
stat_summary(fun = mean, geom = "line", linewidth = 1.2) +
stat_summary(fun = mean, geom = "point") +
theme_classic()
A negative interaction indicates that animals experiencing greater weight loss regenerate more slowly over time. Animals that lost more weight regenerated their tails more slowly. This suggests that regeneration is constrained by energetic state.
As weight loss increases, the rate of regeneration over time decreases.This is a diet dose-dependent suppression effect. A linear mixed-effects model revealed a strong effect of time on percent regeneration (β = 4.86, t = 25.3), indicating consistent increases across weeks. While percent weight loss did not affect baseline regeneration, a significant interaction between week and weight loss (β = −0.030, t = −3.01) demonstrated that increasing weight loss was associated with a reduced rate of regeneration over time. These results indicate that regeneration is sensitive to energetic state, with greater nutritional deficit leading to slower regenerative growth.
The evidence is strongest when regeneration is expressed as a normalized cumulative measure, though all regeneration measures show the same relationship. Percent regeneration controls for stating tail size, reduces week to week noise as a cumulative measure, and removes variation unrelated to treatment, in turn increasing power.
This relationship is not represented when using diet as a categorical variable. For all analyses, rather than using categorical classifications of metabolic state (diet restricted vs ad lib), diet was assessed as a continuous representation of percent weight loss.
data$IGF <- ifelse(data$Treatment %in% c("DR.IGF1", "DR.IGF2"), "IGF", "No_IGF")
data$IGF <- as.factor(data$IGF)
data$IGF=relevel(data$IGF, ref="No_IGF")
library(lme4)
library(lmerTest)
model_rescue <- lmer(
Perc.Regeneration ~
Week* Perc.WeightLoss * IGF +
(1 | Animal_ID),
data = data
)
summary(model_rescue)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: Perc.Regeneration ~ Week * Perc.WeightLoss * IGF + (1 | Animal_ID)
## Data: data
##
## REML criterion at convergence: 2851.9
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.9626 -0.5860 0.0630 0.5375 3.2539
##
## Random effects:
## Groups Name Variance Std.Dev.
## Animal_ID (Intercept) 16.92 4.113
## Residual 19.76 4.445
## Number of obs: 465, groups: Animal_ID, 69
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) -7.19510 1.31492 306.18740 -5.472 9.27e-08 ***
## Week 5.60698 0.22390 411.25372 25.043 < 2e-16 ***
## Perc.WeightLoss 0.12570 0.06168 451.85513 2.038 0.0421 *
## IGFIGF 5.21021 2.43706 366.72641 2.138 0.0332 *
## Week:Perc.WeightLoss -0.05152 0.01163 410.12337 -4.428 1.22e-05 ***
## Week:IGFIGF -2.25676 0.40974 421.11221 -5.508 6.33e-08 ***
## Perc.WeightLoss:IGFIGF -0.26870 0.11443 456.61230 -2.348 0.0193 *
## Week:Perc.WeightLoss:IGFIGF 0.08690 0.02135 426.14077 4.070 5.61e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) Week Prc.WL IGFIGF Wk:P.WL W:IGFI P.WL:I
## Week -0.638
## Prc.WghtLss -0.694 0.543
## IGFIGF -0.540 0.344 0.375
## Wk:Prc.WghL 0.507 -0.771 -0.740 -0.274
## Week:IGFIGF 0.349 -0.546 -0.297 -0.710 0.422
## P.WL:IGFIGF 0.374 -0.293 -0.539 -0.833 0.399 0.683
## W:P.WL:IGFI -0.276 0.420 0.403 0.620 -0.545 -0.877 -0.766
ggplot(data, aes(x = Perc.WeightLoss, y = Perc.Regeneration, color = IGF)) +
geom_point(alpha = 0.3) +
geom_smooth(method = "lm") +
facet_wrap(~ Week) +
theme_classic()
1. Regeneration increases over time 2. In No IGF animals: Weight loss
strongly reduces regeneration over time 3. In IGF animals: That negative
effect is much weaker (or absent) 4. Does did not measurably affect
regeneration
Weight loss harms regeneration, but IGF reduces that harm. IGF does not fully restore regeneration to control levels, but it buffers the negative effect of energetic deficit. IMPORTANT: Same pattern is seen with raw regeneration.
Percent regeneration increased significantly over time (Week: β = 3.33, t = 5.31). In the rescue model, the three-way interaction between week, percent weight loss, and IGF treatment was highly significant (Week × Percent Weight Loss × IGF: β = -0.0878, t = -4.01), indicating that the relationship between energetic deficit and regeneration differed between IGF-treated and untreated animals. Specifically, animals that did not receive IGF exhibited a stronger negative relationship between weight loss and regeneration, whereas this relationship was substantially reduced in IGF-treated animals. The interaction between week and dose was negligible (Week × Dose: β = 0.0179, t = 0.07), indicating no evidence that the magnitude of this effect depended on IGF dose. Together, these results suggest that IGF treatment partially rescues tail regeneration by buffering the negative effects of energetic stress on regenerative growth.
##RQ3: Do IGF1 and IGF2 differ in their ability to rescue regeneration? ###Compare IGF1 and IGF2 separately using a model that treats treatment as three levels: No IGF, IGF1, and IGF2.
data <- data %>%
mutate(
IGF_type = case_when(
Treatment %in% c("AdLib", "DR") ~ "No_IGF",
Treatment == "DR.IGF1" ~ "IGF1",
Treatment == "DR.IGF2" ~ "IGF2"
)
)
data$IGF_type <- factor(data$IGF_type, levels = c("No_IGF", "IGF1", "IGF2"))
str(data)
## 'data.frame': 640 obs. of 18 variables:
## $ Animal_ID : chr "BC039" "BC048" "BC099" "BC121" ...
## $ ToeClip : chr "1455" "1513" "11-Jan" "2203" ...
## $ BC_Cage : int 32 28 9 32 39 28 8 36 39 39 ...
## $ Treatment : chr "DR.IGF1" "AdLib" "AdLib" "DR.IGF1" ...
## $ SVL : int 46 48 48 48 44 44 42 47 51 46 ...
## $ Week : int 1 1 1 1 1 1 1 1 1 1 ...
## $ Mass : num 2.1 2.21 3.36 2.05 2.02 ...
## $ Dose : num 2.38 0 0 2.44 0 ...
## $ Perc.WeightLoss : num 18 18.36 8.49 21.31 23.81 ...
## $ Regeneration : num 0 0 0 0 0 0 0 0 0 0 ...
## $ Rate_Reg : num NA NA NA NA NA NA NA NA NA NA ...
## $ Rate_Perc : num NA NA NA NA NA NA NA NA NA NA ...
## $ Perc.Regeneration: num 0 0 0 0 0 0 0 0 0 0 ...
## $ Eggs : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Diet : Factor w/ 2 levels "AdLib","Restricted": 2 1 1 2 2 2 1 2 2 2 ...
## $ WL_group : Factor w/ 3 levels "(-55.2,-20.1]",..: 3 3 2 3 3 3 3 3 3 3 ...
## $ IGF : Factor w/ 2 levels "No_IGF","IGF": 2 1 1 2 1 2 1 2 1 1 ...
## $ IGF_type : Factor w/ 3 levels "No_IGF","IGF1",..: 2 1 1 2 1 3 1 2 1 1 ...
model_igf_split <- lmer(
Perc.Regeneration ~ Week * Perc.WeightLoss * IGF_type +
(1 | Animal_ID),
data = data # full dataset with all weekly measurements
)
summary(model_igf_split)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: Perc.Regeneration ~ Week * Perc.WeightLoss * IGF_type + (1 |
## Animal_ID)
## Data: data
##
## REML criterion at convergence: 2846.1
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.9957 -0.5776 0.0650 0.5223 3.2789
##
## Random effects:
## Groups Name Variance Std.Dev.
## Animal_ID (Intercept) 17.00 4.124
## Residual 19.42 4.406
## Number of obs: 465, groups: Animal_ID, 69
##
## Fixed effects:
## Estimate Std. Error df t value
## (Intercept) -7.19877 1.30832 298.53394 -5.502
## Week 5.60609 0.22198 408.07027 25.255
## Perc.WeightLoss 0.12593 0.06120 447.95475 2.058
## IGF_typeIGF1 4.71667 2.84132 334.76054 1.660
## IGF_typeIGF2 3.52438 3.86935 391.48393 0.911
## Week:Perc.WeightLoss -0.05146 0.01153 406.95558 -4.461
## Week:IGF_typeIGF1 -1.64541 0.49630 430.19518 -3.315
## Week:IGF_typeIGF2 -2.66371 0.61076 417.22804 -4.361
## Perc.WeightLoss:IGF_typeIGF1 -0.22189 0.13875 447.22307 -1.599
## Perc.WeightLoss:IGF_typeIGF2 -0.20481 0.17565 448.07867 -1.166
## Week:Perc.WeightLoss:IGF_typeIGF1 0.04116 0.02843 443.95954 1.448
## Week:Perc.WeightLoss:IGF_typeIGF2 0.11350 0.02950 411.63638 3.847
## Pr(>|t|)
## (Intercept) 8.07e-08 ***
## Week < 2e-16 ***
## Perc.WeightLoss 0.040205 *
## IGF_typeIGF1 0.097845 .
## IGF_typeIGF2 0.362938
## Week:Perc.WeightLoss 1.06e-05 ***
## Week:IGF_typeIGF1 0.000993 ***
## Week:IGF_typeIGF2 1.63e-05 ***
## Perc.WeightLoss:IGF_typeIGF1 0.110497
## Perc.WeightLoss:IGF_typeIGF2 0.244223
## Week:Perc.WeightLoss:IGF_typeIGF1 0.148457
## Week:Perc.WeightLoss:IGF_typeIGF2 0.000138 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) Week Prc.WL IGF_IGF1 IGF_IGF2 Wk:P.WL W:IGF_IGF1
## Week -0.635
## Prc.WghtLss -0.693 0.542
## IGF_typIGF1 -0.460 0.292 0.319
## IGF_typIGF2 -0.338 0.215 0.234 0.156
## Wk:Prc.WghL 0.505 -0.771 -0.739 -0.233 -0.171
## Wk:IGF_IGF1 0.284 -0.447 -0.242 -0.707 -0.096 0.345
## Wk:IGF_IGF2 0.231 -0.363 -0.197 -0.106 -0.766 0.280 0.163
## P.WL:IGF_IGF1 0.305 -0.239 -0.441 -0.821 -0.103 0.326 0.690
## P.WL:IGF_IGF2 0.241 -0.189 -0.348 -0.111 -0.903 0.258 0.084
## W:P.WL:IGF_IGF1 -0.205 0.313 0.300 0.617 0.069 -0.406 -0.879
## W:P.WL:IGF_IGF2 -0.197 0.302 0.289 0.091 0.696 -0.391 -0.135
## W:IGF_IGF2 P.WL:IGF_IGF1 P.WL:IGF_IGF2 W:P.WL:IGF_IGF1
## Week
## Prc.WghtLss
## IGF_typIGF1
## IGF_typIGF2
## Wk:Prc.WghL
## Wk:IGF_IGF1
## Wk:IGF_IGF2
## P.WL:IGF_IGF1 0.087
## P.WL:IGF_IGF2 0.758 0.154
## W:P.WL:IGF_IGF1 -0.114 -0.774 -0.105
## W:P.WL:IGF_IGF2 -0.921 -0.128 -0.794 0.159
pred <- ggpredict(
model_igf_split,
terms = c("Perc.WeightLoss", "IGF_type", "Week [2,4,6,8]")
)
pred
## # Predicted values of Perc.Regeneration
##
## IGF_type: No_IGF
## Week: 2
##
## Perc.WeightLoss | Predicted | 95% CI
## ------------------------------------------
## -60 | 2.63 | -4.47, 9.73
## -35 | 3.21 | -1.68, 8.10
## -5 | 3.90 | 1.44, 6.35
## 50 | 5.16 | 1.59, 8.74
##
## IGF_type: No_IGF
## Week: 4
##
## Perc.WeightLoss | Predicted | 95% CI
## ------------------------------------------
## -60 | 20.02 | 13.68, 26.35
## -35 | 18.02 | 13.63, 22.42
## -5 | 15.63 | 13.35, 17.90
## 50 | 11.23 | 8.09, 14.37
##
## IGF_type: No_IGF
## Week: 6
##
## Perc.WeightLoss | Predicted | 95% CI
## ------------------------------------------
## -60 | 37.41 | 30.09, 44.72
## -35 | 32.84 | 27.78, 37.89
## -5 | 27.35 | 24.79, 29.91
## 50 | 17.30 | 13.74, 20.86
##
## IGF_type: No_IGF
## Week: 8
##
## Perc.WeightLoss | Predicted | 95% CI
## ------------------------------------------
## -60 | 54.79 | 45.28, 64.30
## -35 | 47.65 | 41.12, 54.18
## -5 | 39.08 | 35.89, 42.27
## 50 | 23.36 | 18.76, 27.97
##
## IGF_type: IGF1
## Week: 2
##
## Perc.WeightLoss | Predicted | 95% CI
## ------------------------------------------
## -60 | 12.43 | -1.52, 26.39
## -35 | 9.52 | -0.10, 19.14
## -5 | 6.02 | 1.39, 10.65
## 50 | -0.39 | -6.47, 5.69
##
## IGF_type: IGF1
## Week: 4
##
## Perc.WeightLoss | Predicted | 95% CI
## ------------------------------------------
## -60 | 21.59 | 9.56, 33.62
## -35 | 18.16 | 9.86, 26.46
## -5 | 14.05 | 10.01, 18.08
## 50 | 6.50 | 1.08, 11.92
##
## IGF_type: IGF1
## Week: 6
##
## Perc.WeightLoss | Predicted | 95% CI
## ------------------------------------------
## -60 | 30.75 | 16.10, 45.40
## -35 | 26.80 | 16.84, 36.77
## -5 | 22.07 | 17.49, 26.65
## 50 | 13.39 | 6.48, 20.31
##
## IGF_type: IGF1
## Week: 8
##
## Perc.WeightLoss | Predicted | 95% CI
## ------------------------------------------
## -60 | 39.90 | 19.79, 60.02
## -35 | 35.45 | 21.88, 49.01
## -5 | 30.10 | 24.14, 36.05
## 50 | 20.29 | 10.68, 29.89
##
## IGF_type: IGF2
## Week: 2
##
## Perc.WeightLoss | Predicted | 95% CI
## -------------------------------------------
## -60 | -0.50 | -20.50, 19.49
## -35 | 0.63 | -13.27, 14.53
## -5 | 1.98 | -4.74, 8.71
## 50 | 4.47 | -3.09, 12.03
##
## IGF_type: IGF2
## Week: 4
##
## Perc.WeightLoss | Predicted | 95% CI
## -------------------------------------------
## -60 | -2.06 | -18.16, 14.03
## -35 | 2.17 | -9.03, 13.37
## -5 | 7.25 | 1.77, 12.73
## 50 | 16.56 | 10.35, 22.77
##
## IGF_type: IGF2
## Week: 6
##
## Perc.WeightLoss | Predicted | 95% CI
## -------------------------------------------
## -60 | -3.62 | -19.88, 12.64
## -35 | 3.71 | -7.57, 15.00
## -5 | 12.51 | 7.03, 17.99
## 50 | 28.65 | 22.18, 35.12
##
## IGF_type: IGF2
## Week: 8
##
## Perc.WeightLoss | Predicted | 95% CI
## -------------------------------------------
## -60 | -5.18 | -25.58, 15.21
## -35 | 5.25 | -8.85, 19.35
## -5 | 17.78 | 11.06, 24.49
## 50 | 40.74 | 32.56, 48.92
##
## Adjusted for:
## * Animal_ID = 0 (population-level)
pred2 <- ggpredict(
model_igf_split,
terms = c("Perc.WeightLoss", "IGF_type", "Week [2,4]")
)
pred2
## # Predicted values of Perc.Regeneration
##
## IGF_type: No_IGF
## Week: 2
##
## Perc.WeightLoss | Predicted | 95% CI
## ------------------------------------------
## -60 | 2.63 | -4.47, 9.73
## -35 | 3.21 | -1.68, 8.10
## -5 | 3.90 | 1.44, 6.35
## 50 | 5.16 | 1.59, 8.74
##
## IGF_type: No_IGF
## Week: 4
##
## Perc.WeightLoss | Predicted | 95% CI
## ------------------------------------------
## -60 | 20.02 | 13.68, 26.35
## -35 | 18.02 | 13.63, 22.42
## -5 | 15.63 | 13.35, 17.90
## 50 | 11.23 | 8.09, 14.37
##
## IGF_type: IGF1
## Week: 2
##
## Perc.WeightLoss | Predicted | 95% CI
## ------------------------------------------
## -60 | 12.43 | -1.52, 26.39
## -35 | 9.52 | -0.10, 19.14
## -5 | 6.02 | 1.39, 10.65
## 50 | -0.39 | -6.47, 5.69
##
## IGF_type: IGF1
## Week: 4
##
## Perc.WeightLoss | Predicted | 95% CI
## ------------------------------------------
## -60 | 21.59 | 9.56, 33.62
## -35 | 18.16 | 9.86, 26.46
## -5 | 14.05 | 10.01, 18.08
## 50 | 6.50 | 1.08, 11.92
##
## IGF_type: IGF2
## Week: 2
##
## Perc.WeightLoss | Predicted | 95% CI
## -------------------------------------------
## -60 | -0.50 | -20.50, 19.49
## -35 | 0.63 | -13.27, 14.53
## -5 | 1.98 | -4.74, 8.71
## 50 | 4.47 | -3.09, 12.03
##
## IGF_type: IGF2
## Week: 4
##
## Perc.WeightLoss | Predicted | 95% CI
## -------------------------------------------
## -60 | -2.06 | -18.16, 14.03
## -35 | 2.17 | -9.03, 13.37
## -5 | 7.25 | 1.77, 12.73
## 50 | 16.56 | 10.35, 22.77
##
## Adjusted for:
## * Animal_ID = 0 (population-level)
ggplot(pred, aes(x = x, y = predicted, color = group, fill = group)) +
geom_ribbon(aes(ymin = conf.low, ymax = conf.high), alpha = 0.15, color = NA) +
geom_line(linewidth = 1.2) +
facet_wrap(~ facet) +
theme_classic() +
scale_color_manual(values = c("grey", "thistle4", "mistyrose3")) +
scale_fill_manual(values = c("grey", "thistle4", "mistyrose3")) +
labs(
x = "Percent weight loss",
y = "Predicted percent regeneration",
color = "IGF treatment",
fill = "IGF treatment"
)
ggplot(pred2, aes(x = x, y = predicted, color = group, fill = group)) +
geom_ribbon(aes(ymin = conf.low, ymax = conf.high), alpha = 0.15, color = NA) +
geom_line(linewidth = 1.2) +
facet_wrap(~ facet) +
theme_classic() +
scale_color_manual(values = c("grey", "thistle4", "mistyrose3")) +
scale_fill_manual(values = c("grey", "thistle4", "mistyrose3")) +
labs(
x = "Percent weight loss",
y = "Predicted percent regeneration",
color = "IGF treatment",
fill = "IGF treatment"
)
library(emmeans)
em <- emtrends(
model_igf_split,
~ IGF_type | Week,
var = "Perc.WeightLoss",
at = list(Week = c(2,4, 6, 8))
)
pairs(em)
## Week = 2:
## contrast estimate SE df t.ratio p.value
## No_IGF - IGF1 0.1396 0.1020 428 1.371 0.3571
## No_IGF - IGF2 -0.0222 0.1350 409 -0.165 0.9851
## IGF1 - IGF2 -0.1618 0.1550 409 -1.043 0.5500
##
## Week = 4:
## contrast estimate SE df t.ratio p.value
## No_IGF - IGF1 0.0573 0.0886 430 0.647 0.7944
## No_IGF - IGF2 -0.2492 0.1100 358 -2.270 0.0614
## IGF1 - IGF2 -0.3065 0.1280 384 -2.389 0.0456
##
## Week = 6:
## contrast estimate SE df t.ratio p.value
## No_IGF - IGF1 -0.0251 0.1090 453 -0.231 0.9711
## No_IGF - IGF2 -0.4762 0.1140 410 -4.181 0.0001
## IGF1 - IGF2 -0.4511 0.1420 440 -3.175 0.0046
##
## Week = 8:
## contrast estimate SE df t.ratio p.value
## No_IGF - IGF1 -0.1074 0.1490 448 -0.719 0.7522
## No_IGF - IGF2 -0.7032 0.1440 453 -4.867 <0.0001
## IGF1 - IGF2 -0.5958 0.1880 451 -3.173 0.0046
##
## Degrees-of-freedom method: kenward-roger
## P value adjustment: tukey method for comparing a family of 3 estimates
em_df <- as.data.frame(em)
ggplot(em_df, aes(x = factor(Week), y = Perc.WeightLoss.trend, color = IGF_type)) +
geom_point(position = position_dodge(width = 0.4), size = 3) +
geom_errorbar(
aes(ymin = lower.CL, ymax = upper.CL),
position = position_dodge(width = 0.4),
width = 0.2
) +
geom_hline(yintercept = 0, linetype = "dashed") +
theme_classic() +
scale_color_manual(values = c("grey", "thistle4", "mistyrose3")) +
scale_fill_manual(values = c("grey", "thistle4", "mistyrose3")) +
labs(
x = "Week",
y = "Effect of weight loss on regeneration (slope)",
color = "IGF type"
)
ggplot(em_df, aes(x = Week, y = Perc.WeightLoss.trend, color = IGF_type)) +
geom_point(position = position_dodge(width = 0.4), size = 3) +
geom_errorbar(
aes(ymin = lower.CL, ymax = upper.CL),
position = position_dodge(width = 0.4),
width = 0.2
) +
geom_hline(yintercept = 0, linetype = "dashed") +
theme_classic() +
scale_color_manual(values = c("grey", "thistle4", "mistyrose3")) +
scale_fill_manual(values = c("grey", "thistle4", "mistyrose3")) +
labs(
x = "Week",
y = "Effect of weight loss on regeneration (slope)",
color = "IGF type"
)
library(car)
model_data <- model.frame(model_igf_split)
model_data$resid <- residuals(model_igf_split)
leveneTest(resid ~ IGF_type, data = model_data)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 2 3.0992 0.04602 *
## 462
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
model_data_igf1 <- model_data %>%
filter(IGF_type %in% c("No_IGF", "IGF1"))
leveneTest(resid ~ IGF_type, data = model_data_igf1)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 1 5.3242 0.02164 *
## 338
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
model_data_igf2 <- model_data %>%
filter(IGF_type %in% c("No_IGF", "IGF2"))
leveneTest(resid ~ IGF_type, data = model_data_igf2)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 1 2.4275 0.1201
## 349
Both IGF treatments reduced the negative effect of weight loss, but the effect was strongest and most consistent for IGF2.Week-specific slope estimates indicated that IGF2 most strongly attenuated the relationship between weight loss and regeneration, particularly during later weeks.
Post hoc analyses using emtrends() were conducted to estimate the relationship between percent weight loss and percent regeneration separately for each IGF treatment group at Weeks 2, 4, 6, and 8. At Week 2, slope estimates were near zero for all groups and confidence intervals broadly overlapped (No IGF: β = 0.023, 95% CI: -0.069 to 0.116; IGF1: β = -0.116, 95% CI: -0.305 to 0.073; IGF2: β = 0.073, 95% CI: -0.180 to 0.327), indicating little evidence that energetic state influenced regeneration during the earliest stage of regrowth.
By Week 4, the No IGF group exhibited a modest negative relationship between weight loss and regeneration (β = -0.080, 95% CI: -0.162 to 0.002), and this trend became substantially stronger by Week 6 (β = -0.183, 95% CI: -0.278 to -0.088) and Week 8 (β = -0.286, 95% CI: -0.410 to -0.161). Thus, in animals that did not receive IGF, increasing weight loss was associated with progressively reduced regenerative growth over time.
IGF1-treated animals showed a similar pattern. Slope estimates were negative at Week 4 (β = -0.151, 95% CI: -0.312 to 0.011), Week 6 (β = -0.186, 95% CI: -0.384 to 0.013), and Week 8 (β = -0.220, 95% CI: -0.495 to 0.054), indicating that IGF1 did not substantially alter the negative relationship between energetic deficit and regeneration.
In contrast, IGF2-treated animals showed a markedly different response. At Week 4, the slope was positive (β = 0.208, 95% CI: 0.001 to 0.414), and this positive relationship strengthened at Week 6 (β = 0.342, 95% CI: 0.131 to 0.553) and Week 8 (β = 0.477, 95% CI: 0.213 to 0.740). These results indicate that, unlike untreated animals, IGF2-treated lizards maintained or even improved regeneration despite increasing weight loss.
Together, these week-specific slope estimates demonstrate that IGF2 most strongly attenuated—and effectively reversed—the negative relationship between energetic deficit and tail regeneration, particularly during the later stages of regenerative growth. IGF1 did not produce a comparable buffering effect.
Residual variance differed modestly among groups (overall Levene’s test: F2,449 = 2.85, p = 0.059). Pairwise tests indicated that IGF1-treated animals exhibited greater residual variability than untreated controls (F1,331 = 4.76, p = 0.030), whereas residual variance did not differ significantly between IGF2-treated and untreated animals (F1,343 = 2.38, p = 0.124). This suggests that the apparent lack of a consistent IGF1 effect may reflect greater heterogeneity in individual responses, whereas the IGF2 response was both stronger and more uniform across animals.
model_rescue <- lmer(
Regeneration ~
Week * Perc.WeightLoss * IGF +
(1 | Animal_ID),
data = data
)
summary(model_rescue)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: Regeneration ~ Week * Perc.WeightLoss * IGF + (1 | Animal_ID)
## Data: data
##
## REML criterion at convergence: 2432.8
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.80689 -0.57062 0.05951 0.59497 2.89719
##
## Random effects:
## Groups Name Variance Std.Dev.
## Animal_ID (Intercept) 6.440 2.538
## Residual 8.054 2.838
## Number of obs: 464, groups: Animal_ID, 69
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) -3.973887 0.830114 313.429189 -4.787 2.61e-06
## Week 3.317663 0.142827 411.433791 23.229 < 2e-16
## Perc.WeightLoss 0.039220 0.039256 451.844849 0.999 0.31830
## IGFIGF 2.674047 1.542704 370.033556 1.733 0.08387
## Week:Perc.WeightLoss -0.016485 0.007422 410.293482 -2.221 0.02688
## Week:IGFIGF -1.031304 0.261346 420.923986 -3.946 9.31e-05
## Perc.WeightLoss:IGFIGF -0.141091 0.072727 455.341926 -1.940 0.05300
## Week:Perc.WeightLoss:IGFIGF 0.041854 0.013612 426.079848 3.075 0.00224
##
## (Intercept) ***
## Week ***
## Perc.WeightLoss
## IGFIGF .
## Week:Perc.WeightLoss *
## Week:IGFIGF ***
## Perc.WeightLoss:IGFIGF .
## Week:Perc.WeightLoss:IGFIGF **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) Week Prc.WL IGFIGF Wk:P.WL W:IGFI P.WL:I
## Week -0.645
## Prc.WghtLss -0.700 0.545
## IGFIGF -0.538 0.347 0.377
## Wk:Prc.WghL 0.513 -0.771 -0.743 -0.276
## Week:IGFIGF 0.353 -0.547 -0.298 -0.715 0.422
## P.WL:IGFIGF 0.378 -0.294 -0.540 -0.836 0.401 0.684
## W:P.WL:IGFI -0.280 0.421 0.405 0.623 -0.545 -0.876 -0.768
The rescue effect was robust to the choice of response variable. When regeneration was analyzed as either percent of the amputated tail or raw regenerated length, the interaction between week, percent weight loss, and IGF treatment remained significantly negative (percent regeneration: β = -0.0878, t = -4.01; raw regeneration: β = -0.0425, t = -3.05), indicating that IGF treatment reduced the negative impact of energetic deficit on regeneration over time.
library(dplyr)
final_data <- data %>%
group_by(Animal_ID) %>%
summarize(
final_regeneration = max(Regeneration, na.rm = TRUE),
weight_loss = first(Perc.WeightLoss),
Treatment = first(Treatment)
)
cor.test(final_data$weight_loss, final_data$final_regeneration)
##
## Pearson's product-moment correlation
##
## data: final_data$weight_loss and final_data$final_regeneration
## t = 0.41102, df = 65, p-value = 0.6824
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.1916378 0.2876057
## sample estimates:
## cor
## 0.05091453
lm_tradeoff_igf <- lm(final_regeneration ~ weight_loss * Treatment, data = final_data)
summary(lm_tradeoff_igf)
##
## Call:
## lm(formula = final_regeneration ~ weight_loss * Treatment, data = final_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -13.2959 -3.8851 0.0258 4.0045 13.7746
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 17.65763 3.44728 5.122 3.49e-06 ***
## weight_loss 0.03591 0.21863 0.164 0.870
## TreatmentDR -5.07518 4.34895 -1.167 0.248
## TreatmentDR.IGF1 1.28540 5.20592 0.247 0.806
## TreatmentDR.IGF2 -9.61449 6.63895 -1.448 0.153
## weight_loss:TreatmentDR 0.10406 0.24833 0.419 0.677
## weight_loss:TreatmentDR.IGF1 -0.35296 0.28919 -1.220 0.227
## weight_loss:TreatmentDR.IGF2 0.38573 0.33482 1.152 0.254
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6.407 on 59 degrees of freedom
## (13 observations deleted due to missingness)
## Multiple R-squared: 0.1881, Adjusted R-squared: 0.09182
## F-statistic: 1.953 on 7 and 59 DF, p-value: 0.07706
Result: We tested for a direct covariance between weight loss and regeneration at the individual level, but this relationship was not statistically significant. However, a mixed-effects model revealed a significant interaction between time and weight loss, indicating that individuals experiencing greater energetic deficit exhibited slower regeneration over time. These results suggest that energetic state influences regeneration dynamics, even if a simple endpoint tradeoff is not detectable.
While a simple covariance between weight loss and final regeneration was not detected, such analyses collapse dynamic processes into a single endpoint and may obscure temporal relationships. Our longitudinal analysis demonstrates that weight loss significantly alters regeneration trajectories, providing evidence that energetic state constrains regenerative processes over time.