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)
library(patchwork)
#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", "lightcoral", "royalblue4")) + #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: Initial snout–vent length (SVL) did not differ significantly among treatment groups (one-way ANOVA: F₃,₇₂ = 0.65, p = 0.583). Mean body size was similar across AdLib, dietary restriction (DR), DR + IGF1, and DR + IGF2 groups, confirming that animals were well matched at the onset of the experiment and that subsequent differences in regeneration could not be attributed to pre-existing variation in body size.
#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", "lightcoral", "royalblue4")) + geom_boxplot(width=0.1, position= dodge, outlier.shape = NA) +
geom_jitter(width=0.1) +
xlab("Treatment")
mass.pl
ggsave(mass.pl, file="mass.png", width=5, height=4, dpi=600)
Result: Initial body mass did not differ significantly among treatment groups (one-way ANOVA: F₃,₇₂ = 0.55, p = 0.647). Mean mass was comparable across AdLib, dietary restriction (DR), DR + IGF1, and DR + IGF2 groups, indicating that animals were well balanced prior to experimental manipulation and that subsequent treatment effects were not confounded by differences in starting body condition.
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: By the start of the regeneration experiment, animals assigned to the dietary restriction treatment had lost significantly more body mass than ad libitum-fed controls (one-way ANOVA: F₁,₆₇ = 13.85, p = 0.00041). Restricted animals retained a lower percentage of their original body mass, confirming that the dietary manipulation produced a substantial and consistent reduction in energetic state prior to tail autotomy and subsequent regeneration analyses. 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.
#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.
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.
Across all animals, cumulative percent regeneration increased significantly over time (mixed-effects model: Week, β = 4.86, t = 25.31, p < 2 × 10⁻¹⁶). Percent weight loss was not associated with baseline regeneration (β = 0.074, t = 1.39, p = 0.165), but the interaction between week and percent weight loss was significantly negative (Week × Percent Weight Loss: β = −0.030, t = −3.01, p = 0.0028; Fig. 2), indicating that animals experiencing greater body mass loss regenerated progressively less tissue as the experiment progressed. This relationship was most clearly detected when regeneration was expressed as a percentage of each animal’s original tail length, which normalizes for differences in starting tail size and reduces variance attributable to body size and autotomy length. In contrast, the same relationship was not statistically significant when regeneration was analyzed as absolute regenerated length or weekly regeneration rate. Together, these results demonstrate that cumulative percent regeneration provides the most sensitive measure of the energetic trade-off between body condition and regenerative performance.
##RQ2: Is there an energetic Tradeoff, and can it be rescued by IGF supplementation. ###
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")
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 ['lmerMod']
## 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 t value
## (Intercept) -7.19877 1.30832 -5.502
## Week 5.60609 0.22198 25.255
## Perc.WeightLoss 0.12593 0.06120 2.058
## IGF_typeIGF1 4.71667 2.84132 1.660
## IGF_typeIGF2 3.52438 3.86935 0.911
## Week:Perc.WeightLoss -0.05146 0.01153 -4.461
## Week:IGF_typeIGF1 -1.64541 0.49630 -3.315
## Week:IGF_typeIGF2 -2.66371 0.61076 -4.361
## Perc.WeightLoss:IGF_typeIGF1 -0.22189 0.13875 -1.599
## Perc.WeightLoss:IGF_typeIGF2 -0.20481 0.17565 -1.166
## Week:Perc.WeightLoss:IGF_typeIGF1 0.04116 0.02843 1.448
## Week:Perc.WeightLoss:IGF_typeIGF2 0.11350 0.02950 3.847
##
## 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
IGF2 significantly reduced the negative effect of weight loss on regeneration, whereas IGF1 did not, indicating that only IGF2 was able to buffer the energetic trade-off.
To test whether IGF supplementation altered the relationship between energetic state and regeneration, we fit a linear mixed-effects model including a three-way interaction among week, percent weight loss, and IGF treatment. The negative association between weight loss and regeneration observed in unsupplemented animals was significantly modified by IGF2 treatment, as indicated by a significant Week × Percent Weight Loss × IGF2 interaction (β = 0.1135, t = 3.85, p = 0.000138). This positive interaction term indicates that IGF2 progressively offset the negative effect of weight loss on regeneration over time. In contrast, the corresponding three-way interaction for IGF1 was not significant (β = 0.0412, t = 1.45, p = 0.148), suggesting that IGF1 did not meaningfully alter the energetic trade-off. Together, these results demonstrate that IGF2, but not IGF1, partially rescues tail regeneration under conditions of energetic stress.
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("grey40", "lightcoral", "royalblue4")) +
scale_fill_manual(values = c("grey40", "lightcoral", "royalblue4")) +
labs(
x = "Percent weight loss",
y = "Predicted percent regeneration",
color = "IGF treatment",
fill = "IGF treatment"
)
Model-based predictions revealed that the effect of energetic state on
regeneration diverged markedly among treatment groups over time. At week
2, the relationship between percent weight loss and regeneration was
weak across all treatments. By week 4, IGF2-treated animals began to
exhibit a positive association between weight loss and regeneration,
whereas both unsupplemented and IGF1-treated animals showed neutral to
negative trends. This divergence became increasingly pronounced at weeks
6 and 8. By week 8, regeneration declined sharply with increasing weight
loss in unsupplemented animals, remained moderately negative in
IGF1-treated animals, and became strongly positive in IGF2-treated
animals. These predicted trajectories visually illustrate the
significant three-way interaction identified in the mixed model and
demonstrate that IGF2 progressively reverses the energetic constraint on
regeneration.
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 = Week, y = Perc.WeightLoss.trend, color = IGF_type)) +
geom_point(position = position_dodge(width = 0.4), size = 4) +
geom_errorbar(
aes(ymin = lower.CL, ymax = upper.CL),
position = position_dodge(width = 0.4),
width = 0.4
) +
geom_hline(yintercept = 0, linetype = "dashed") +
theme_classic() +
scale_color_manual(values = c("grey40", "lightcoral", "royalblue4")) +
scale_fill_manual(values = c("grey40", "lightcoral", "royalblue4")) +
labs(
x = "Week",
y = "Change in regeneration per 1% increase in weight loss",
color = "IGF type",
title = "IGF2 progressively buffers the energetic cost of regeneration"
)
Week-specific slope estimates confirmed that the relationship between
energetic state and regeneration diverged substantially among treatment
groups over time. In unsupplemented animals, the slope relating percent
weight loss to regeneration became increasingly negative, shifting from
near zero at week 2 (β = 0.023, p = 0.625) to significantly negative
values by week 6 (β = −0.183, p = 0.0002) and week 8 (β = −0.286, p <
0.0001), consistent with a progressively stronger energetic trade-off.
IGF1-treated animals exhibited a similar pattern, with slopes remaining
negative throughout the experiment and not differing significantly from
zero at any time point (week 8: β = −0.178, p = 0.189). In contrast,
IGF2 treatment progressively shifted the slope in a positive direction,
from β = 0.045 at week 2 (p = 0.720) to β = 0.169 at week 4 (p = 0.097),
β = 0.294 at week 6 (p = 0.0047), and β = 0.418 at week 8 (p = 0.0014).
Thus, by the later stages of regeneration, IGF2 not only eliminated the
negative relationship between energetic deficit and regeneration but
reversed it, indicating a substantial buffering effect against energetic
constraint.
#Direct Test of an Energetic Tradeoff
slopes <- emtrends(
model_igf_split,
~ IGF_type | Week,
var = "Perc.WeightLoss",
at = list(Week = c(2, 4, 6, 8))
)
summary(slopes, infer = TRUE)
## Week = 2:
## IGF_type Perc.WeightLoss.trend SE df lower.CL upper.CL t.ratio p.value
## No_IGF 0.0230 0.0470 448 -0.0694 0.11545 0.489 0.6248
## IGF1 -0.1166 0.0903 421 -0.2940 0.06094 -1.291 0.1975
## IGF2 0.0452 0.1260 402 -0.2026 0.29304 0.359 0.7200
##
## Week = 4:
## IGF_type Perc.WeightLoss.trend SE df lower.CL upper.CL t.ratio p.value
## No_IGF -0.0799 0.0415 415 -0.1615 0.00167 -1.925 0.0549
## IGF1 -0.1372 0.0782 434 -0.2909 0.01661 -1.753 0.0803
## IGF2 0.1693 0.1020 347 -0.0306 0.36920 1.666 0.0966
##
## Week = 6:
## IGF_type Perc.WeightLoss.trend SE df lower.CL upper.CL t.ratio p.value
## No_IGF -0.1828 0.0479 437 -0.2770 -0.08860 -3.814 0.0002
## IGF1 -0.1578 0.0975 453 -0.3494 0.03394 -1.617 0.1065
## IGF2 0.2934 0.1030 402 0.0903 0.49653 2.840 0.0047
##
## Week = 8:
## IGF_type Perc.WeightLoss.trend SE df lower.CL upper.CL t.ratio p.value
## No_IGF -0.2857 0.0628 453 -0.4091 -0.16237 -4.552 <0.0001
## IGF1 -0.1783 0.1350 445 -0.4445 0.08779 -1.317 0.1885
## IGF2 0.4175 0.1300 453 0.1618 0.67323 3.208 0.0014
##
## Degrees-of-freedom method: kenward-roger
## Confidence level used: 0.95
test(slopes)
## Week = 2:
## IGF_type Perc.WeightLoss.trend SE df t.ratio p.value
## No_IGF 0.0230 0.0470 448 0.489 0.6248
## IGF1 -0.1166 0.0903 421 -1.291 0.1975
## IGF2 0.0452 0.1260 402 0.359 0.7200
##
## Week = 4:
## IGF_type Perc.WeightLoss.trend SE df t.ratio p.value
## No_IGF -0.0799 0.0415 415 -1.925 0.0549
## IGF1 -0.1372 0.0782 434 -1.753 0.0803
## IGF2 0.1693 0.1020 347 1.666 0.0966
##
## Week = 6:
## IGF_type Perc.WeightLoss.trend SE df t.ratio p.value
## No_IGF -0.1828 0.0479 437 -3.814 0.0002
## IGF1 -0.1578 0.0975 453 -1.617 0.1065
## IGF2 0.2934 0.1030 402 2.840 0.0047
##
## Week = 8:
## IGF_type Perc.WeightLoss.trend SE df t.ratio p.value
## No_IGF -0.2857 0.0628 453 -4.552 <0.0001
## IGF1 -0.1783 0.1350 445 -1.317 0.1885
## IGF2 0.4175 0.1300 453 3.208 0.0014
##
## Degrees-of-freedom method: kenward-roger
summary(slopes, infer = c(TRUE, TRUE))
## Week = 2:
## IGF_type Perc.WeightLoss.trend SE df lower.CL upper.CL t.ratio p.value
## No_IGF 0.0230 0.0470 448 -0.0694 0.11545 0.489 0.6248
## IGF1 -0.1166 0.0903 421 -0.2940 0.06094 -1.291 0.1975
## IGF2 0.0452 0.1260 402 -0.2026 0.29304 0.359 0.7200
##
## Week = 4:
## IGF_type Perc.WeightLoss.trend SE df lower.CL upper.CL t.ratio p.value
## No_IGF -0.0799 0.0415 415 -0.1615 0.00167 -1.925 0.0549
## IGF1 -0.1372 0.0782 434 -0.2909 0.01661 -1.753 0.0803
## IGF2 0.1693 0.1020 347 -0.0306 0.36920 1.666 0.0966
##
## Week = 6:
## IGF_type Perc.WeightLoss.trend SE df lower.CL upper.CL t.ratio p.value
## No_IGF -0.1828 0.0479 437 -0.2770 -0.08860 -3.814 0.0002
## IGF1 -0.1578 0.0975 453 -0.3494 0.03394 -1.617 0.1065
## IGF2 0.2934 0.1030 402 0.0903 0.49653 2.840 0.0047
##
## Week = 8:
## IGF_type Perc.WeightLoss.trend SE df lower.CL upper.CL t.ratio p.value
## No_IGF -0.2857 0.0628 453 -0.4091 -0.16237 -4.552 <0.0001
## IGF1 -0.1783 0.1350 445 -0.4445 0.08779 -1.317 0.1885
## IGF2 0.4175 0.1300 453 0.1618 0.67323 3.208 0.0014
##
## Degrees-of-freedom method: kenward-roger
## Confidence level used: 0.95
In untreated animals, the relationship between weight loss and regeneration becomes significantly negative by week 6 and strengthens further by week 8, providing direct evidence consistent with an energetic trade-off.
Estimated marginal slopes from the mixed-effects model demonstrated that the relationship between body mass loss and regeneration changed dramatically over time and differed among treatment groups. In the unsupplemented group, the slope relating percent weight loss to regeneration became progressively more negative, transitioning from a nonsignificant relationship at week 2 (β = 0.023, 95% CI: −0.069 to 0.115, p = 0.625) to a marginally negative trend at week 4 (β = −0.080, 95% CI: −0.162 to 0.002, p = 0.055), and significantly negative relationships at week 6 (β = −0.183, 95% CI: −0.277 to −0.089, p = 0.0002) and week 8 (β = −0.286, 95% CI: −0.409 to −0.162, p < 0.0001). These results indicate that greater energetic deficit was increasingly associated with reduced regenerative performance.
IGF1 supplementation did not substantially alter this pattern. Slopes remained negative at all time points and were not significantly different from zero (week 2: β = −0.117, p = 0.198; week 4: β = −0.137, p = 0.080; week 6: β = −0.158, p = 0.107; week 8: β = −0.178, p = 0.189), indicating little evidence that IGF1 mitigated the energetic constraint on regeneration.
In contrast, IGF2 supplementation progressively reversed the relationship between energetic deficit and regeneration. Although the slope was not significantly different from zero at week 2 (β = 0.045, 95% CI: −0.203 to 0.293, p = 0.720) and was only marginally positive at week 4 (β = 0.169, 95% CI: −0.031 to 0.369, p = 0.097), the relationship became significantly positive by week 6 (β = 0.293, 95% CI: 0.090 to 0.497, p = 0.0047) and strengthened further by week 8 (β = 0.418, 95% CI: 0.162 to 0.673, p = 0.0014). Thus, by the later stages of regeneration, IGF2 not only eliminated the negative impact of weight loss but completely reversed it, indicating a robust energetic rescue effect.
# Week-specific slopes of Perc.WeightLoss for each IGF group
slopes <- emtrends(
model_igf_split,
~ IGF_type | Week,
var = "Perc.WeightLoss",
at = list(Week = c(2, 4, 6, 8))
)
slopes_df <- as.data.frame(slopes)
# Pairwise comparisons vs No_IGF within each week
comparisons <- contrast(
slopes,
method = "trt.vs.ctrl",
ref = "No_IGF",
adjust = "none"
)
comp_df <- as.data.frame(comparisons)
# Clean comparison labels
comp_df <- comp_df %>%
mutate(
IGF_type = case_when(
grepl("IGF1", contrast) ~ "IGF1",
grepl("IGF2", contrast) ~ "IGF2"
),
sig_vs_control = case_when(
p.value < 0.001 ~ "***",
p.value < 0.01 ~ "**",
p.value < 0.05 ~ "*",
p.value < 0.10 ~ "†",
TRUE ~ ""
)
) %>%
select(Week, IGF_type, sig_vs_control)
# No significance label for the control itself
control_df <- slopes_df %>%
filter(IGF_type == "No_IGF") %>%
transmute(
Week,
IGF_type,
sig_vs_control = ""
)
# Merge significance labels
plot_df <- slopes_df %>%
left_join(
bind_rows(control_df, comp_df),
by = c("Week", "IGF_type")
)
# Plot
resc=ggplot(plot_df,
aes(x = Week, y = Perc.WeightLoss.trend, color = IGF_type)) +
# Shaded interpretation zones
annotate("rect", xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = 0, fill = "mistyrose",alpha = 0.12) +
annotate("rect", xmin = -Inf, xmax = Inf,ymin = 0, ymax = Inf, fill = "lightcyan",alpha = 0.12) +
# Reference line
geom_hline(yintercept = 0,linetype = "dashed",color = "black") +
# Error bars and points
geom_errorbar( aes(ymin = lower.CL, ymax = upper.CL), width = 0.15, position = position_dodge(width = 0.25)) +
geom_point( size = 4, position = position_dodge(width = 0.25)) +
# Significance labels vs No_IGF
geom_text(aes( y = upper.CL + 0.05, label = sig_vs_control),
position = position_dodge(width = 0.25), size = 8, show.legend = FALSE) +
# Optional interpretation labels
annotate("label", x = 4.5, y = 0.72, label = "Energetic Rescue",hjust = 0, color = "royalblue4", size = 5, fill = "white", fontface = "bold",
size = 6, label.size = 0.5,
label.padding = unit(0.15, "lines")) +
annotate("label",x = 4.5, y = -0.45,label = "Energetic Trade-off",hjust = 0, color = "lightcoral", size = 5, fill = "white", fontface = "bold",
size = 6, label.size = 0.5,
label.padding = unit(0.15, "lines")) +
# Color palette
scale_color_manual(values = c("lightcoral", "royalblue4", "grey40"),
labels = c("IGF1" = "IGF1", "IGF2" = "IGF2", "No_IGF" = "None")) +
# Axis labels
labs( title = "IGF2 Reduces the Constraint on Regeneration",
subtitle="Change in regeneration per 1% increase in weight loss",
x = "Week", y = "Slope", color = "Supplementation") +
theme_classic(base_size = 12) +
theme(axis.title = element_text(face="bold")) +
theme( plot.title = element_text(face = "bold"),legend.position = "right") +
theme(legend.position = "bottom") +
theme(legend.title = element_text(face="bold"))
resc
ggsave(
filename = "IGF2_energetic_rescue_figure.png",
plot = resc,
width = 7,
height = 5,
dpi = 600
)
By the end of the experiment, untreated animals showed a strong energetic trade-off—those that lost more weight regenerated less tail tissue—whereas IGF2 completely reversed this relationship, such that animals losing more weight regenerated more. IGF2 begins to diverge from the other treatments by week 4, but the rescue effect becomes statistically robust at weeks 6 and 8.
Week-specific slope estimates revealed that the relationship between energetic state and regeneration diverged sharply among supplementation treatments over time. In animals that received no IGF supplementation, the slope relating percent weight loss to regeneration became progressively more negative, shifting from no detectable relationship at week 2 (β = 0.023, 95% CI: −0.069 to 0.115, p = 0.625) to a significant negative association by week 6 (β = −0.183, 95% CI: −0.277 to −0.089, p = 0.0002) and week 8 (β = −0.286, 95% CI: −0.409 to −0.162, p < 0.0001). This pattern indicates an increasingly pronounced energetic trade-off, in which animals experiencing greater body mass loss regenerated less tissue.
IGF1 supplementation did not significantly alter this relationship. Slopes remained negative throughout the experiment and were not significantly different from zero at any week (all p > 0.08), suggesting little evidence that IGF1 mitigated the energetic constraint on regeneration.
In contrast, IGF2 supplementation progressively shifted the slope in a positive direction. Although the relationship was not significant at week 2 (β = 0.045, 95% CI: −0.203 to 0.293, p = 0.720), it became marginally positive by week 4 (β = 0.169, 95% CI: −0.031 to 0.369, p = 0.097) and significantly positive by week 6 (β = 0.293, 95% CI: 0.090 to 0.497, p = 0.0047) and week 8 (β = 0.418, 95% CI: 0.162 to 0.673, p = 0.0014). Thus, by the later stages of regeneration, IGF2 not only eliminated the negative association between energetic deficit and regeneration but reversed it entirely, indicating a strong energetic rescue effect.
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
By weeks 6 and 8, IGF2-treated animals performed significantly better than both untreated animals and those receiving IGF1, providing strong evidence that IGF2 uniquely relieves the energetic constraint on regeneration.
Pairwise comparisons of week-specific slopes confirmed that the positive relationship between weight loss and regeneration observed in IGF2-treated animals differed significantly from the responses of the other treatment groups during the later stages of regeneration . At week 6, the slope for IGF2-treated animals was significantly greater than that of unsupplemented animals (difference = 0.476 ± 0.114 SE, t = 4.18, Tukey-adjusted p = 0.0001) and IGF1-treated animals (difference = 0.451 ± 0.142 SE, t = 3.18, p = 0.0046). This divergence became even more pronounced at week 8, when the IGF2 slope exceeded that of the unsupplemented group by 0.703 ± 0.144 SE (t = 4.87, p < 0.0001) and that of the IGF1 group by 0.596 ± 0.188 SE (t = 3.17, p = 0.0046). In contrast, neither IGF1 nor IGF2 differed significantly from the unsupplemented group during the early stages of regeneration (week 2, all p ≥ 0.36), and only a modest difference between IGF1 and IGF2 was detected at week 4 (p = 0.0456). These pairwise comparisons confirm that the rescue effect was specific to IGF2 and emerged progressively over time.
To evaluate the robustness of this effect, we performed a bootstrap analysis restricted to the later time points (weeks 5–8). The bootstrap distribution of the IGF2 three-way interaction coefficient remained consistently positive, with a median estimate of 0.142 and a 95% confidence interval of 0.051–0.231, indicating that the rescue effect persisted across resampled datasets and was not driven by a small number of influential observations. Together, these analyses demonstrate that IGF2 uniquely and reproducibly reverses the energetic trade-off between body condition and tail regeneration.
igf_data <- data %>%
filter(Treatment %in% c("DR.IGF1", "DR.IGF2")) %>%
mutate(
IGF_type = factor(Treatment, levels = c("DR.IGF1", "DR.IGF2"))
)
igf_data <- igf_data %>%
group_by(Animal_ID) %>%
fill(Dose, .direction = "downup") %>%
ungroup()
model_dose <- lmer(
Rate_Reg ~ Week * Dose * IGF_type +
(1 | Animal_ID),
data = igf_data
)
summary(model_dose)
## Linear mixed model fit by REML ['lmerMod']
## Formula: Rate_Reg ~ Week * Dose * IGF_type + (1 | Animal_ID)
## Data: igf_data
##
## REML criterion at convergence: 929
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -1.2114 -0.6822 -0.2141 0.4825 6.0010
##
## Random effects:
## Groups Name Variance Std.Dev.
## Animal_ID (Intercept) 0.000 0.000
## Residual 7.516 2.741
## Number of obs: 193, groups: Animal_ID, 32
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 0.12105 6.37440 0.019
## Week -0.29568 1.28745 -0.230
## Dose 1.33326 2.97268 0.449
## IGF_typeDR.IGF2 2.67013 8.92436 0.299
## Week:Dose 0.10032 0.60065 0.167
## Week:IGF_typeDR.IGF2 -0.22621 1.76837 -0.128
## Dose:IGF_typeDR.IGF2 -1.17868 4.08195 -0.289
## Week:Dose:IGF_typeDR.IGF2 0.09024 0.80939 0.111
##
## Correlation of Fixed Effects:
## (Intr) Week Dose IGF_DR Wek:Ds W:IGF_ D:IGF_
## Week -0.919
## Dose -0.993 0.914
## IGF_DR.IGF2 -0.714 0.656 0.709
## Week:Dose 0.913 -0.994 -0.920 -0.652
## W:IGF_DR.IG 0.669 -0.728 -0.665 -0.923 0.723
## D:IGF_DR.IG 0.723 -0.665 -0.728 -0.993 0.670 0.917
## W:D:IGF_DR. -0.678 0.737 0.683 0.916 -0.742 -0.993 -0.923
## optimizer (nloptwrap) convergence code: 0 (OK)
## boundary (singular) fit: see help('isSingular')
Differences in injected dose had no detectable effect on regenerative performance.
To determine whether small differences in administered dose influenced weekly regenerative growth, we fit a mixed-effects model using regeneration rate as the response variable and including week, dose, and IGF type as fixed effects. No significant effect of dose was detected (Dose: β = 1.33, t = 0.45, p = 0.654), nor was there evidence that dose altered regeneration over time (Week × Dose: β = 0.100, t = 0.17, p = 0.868). The three-way interaction among week, dose, and IGF type was also not significant (β = 0.090, t = 0.11, p = 0.911), indicating that the relationship between dose and regeneration rate did not differ between IGF1- and IGF2-treated animals. Likewise, none of the remaining dose-related interaction terms were significant (all p > 0.77) . These results indicate that modest variation in injected dose did not measurably affect weekly regeneration rate and support the conclusion that the superior performance of IGF2-treated animals reflects a treatment-specific biological effect rather than differences in administered dose.
model_rescue <- lmer(
Regeneration ~
Week * Perc.WeightLoss * IGF +
(1 | Animal_ID),
data = data
)
summary(model_rescue)
## Linear mixed model fit by REML ['lmerMod']
## 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 t value
## (Intercept) -3.973887 0.830114 -4.787
## Week 3.317663 0.142827 23.229
## Perc.WeightLoss 0.039220 0.039256 0.999
## IGFIGF 2.674047 1.542704 1.733
## Week:Perc.WeightLoss -0.016485 0.007422 -2.221
## Week:IGFIGF -1.031304 0.261346 -3.946
## Perc.WeightLoss:IGFIGF -0.141091 0.072727 -1.940
## Week:Perc.WeightLoss:IGFIGF 0.041854 0.013612 3.075
##
## 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.
To confirm that our conclusions were not dependent on expressing regeneration as a percentage of original tail length, we repeated the rescue analysis using absolute regenerated tail length as the response variable. As in the primary analysis, regeneration increased significantly over time (Week: β = 3.32, t = 23.23, p < 2 × 10⁻¹⁶), and the relationship between weight loss and regeneration became increasingly negative in unsupplemented animals (Week × Percent Weight Loss: β = −0.0165, t = −2.22, p = 0.0269). Most importantly, the three-way interaction among week, percent weight loss, and IGF treatment remained significant (Week × Percent Weight Loss × IGF: β = 0.0419, t = 3.08, p = 0.00224), indicating that IGF supplementation significantly altered the relationship between energetic state and regeneration over time. Thus, the qualitative pattern observed in the primary analysis was preserved when regeneration was analyzed as raw regenerated length, demonstrating that the rescue effect is robust to the choice of regeneration metric.
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.
To determine whether energetic state was associated with final regenerative output, we analyzed the relationship between each individual’s final regenerated tail length and percent weight loss. Neither the overall correlation between weight loss and final regeneration nor the interaction between weight loss and treatment was statistically significant (all p > 0.15). In the linear model, weight loss was not a significant predictor of final regeneration (β = 0.036, t = 0.16, p = 0.870), and none of the treatment-specific slope terms differed significantly from the reference group (all p ≥ 0.227). Although the overall model approached significance (F₇,₅₉ = 1.95, p = 0.077), these endpoint analyses did not detect a clear covariance between energetic deficit and total regenerated tissue. In contrast, longitudinal mixed-effects models revealed a significant interaction between week and percent weight loss (β = −0.030, t = −3.01, p = 0.0028), demonstrating that animals experiencing greater energetic deficits regenerated more slowly over time. Together, these results indicate that shifts in energy allocation are most clearly detected by analyzing regeneration trajectories rather than final endpoint measurements.
ggplot(data %>% filter(Week %in% c(2, 4, 6, 8)),
aes(x = Perc.WeightLoss, y = Perc.Regeneration, color = IGF_type)) +
geom_point(alpha = 0.25, size = 1.7) +
geom_smooth(method = "lm", se = TRUE, linewidth = 1.1) +
facet_wrap(~ Week, labeller = label_both) +
theme_classic() +
scale_color_manual(values = c(
"No_IGF" = "grey40",
"IGF1" = "royalblue4",
"IGF2" = "lightcoral"
)) +
labs(
x = "Percent weight loss",
y = "Percent regeneration",
color = "IGF type"
)
em_df <- as.data.frame(slopes)
temp=ggplot(em_df, aes(x = Week, y = Perc.WeightLoss.trend,
color = IGF_type, group = IGF_type)) +
geom_hline(yintercept = 0, linetype = "dashed") +
geom_line(linewidth = 1.1) +
geom_point(size = 3.5) +
geom_errorbar(
aes(ymin = lower.CL, ymax = upper.CL),
width = 0.15
) +
theme_classic() +
scale_color_manual(values = c("lightcoral", "royalblue4", "grey40")) +
labs(
title="Temporal Trajectory of Effect",
x = "Week",
y = "Effect of weight loss on regeneration",
color = "IGF type"
)
temp
library(lme4)
library(tidyr)
set.seed(123)
boot_fun <- function(fit) {
fixef(fit)
}
boot_results <- bootMer(
model_igf_split,
FUN = boot_fun,
nsim = 500,
type = "parametric"
)
boot_df <- as.data.frame(boot_results$t)
names(boot_df) <- names(fixef(model_igf_split))
boot_long <- boot_df %>%
select(
`Week:Perc.WeightLoss`,
`Week:Perc.WeightLoss:IGF_typeIGF1`,
`Week:Perc.WeightLoss:IGF_typeIGF2`
) %>%
pivot_longer(
cols = everything(),
names_to = "term",
values_to = "estimate"
)
bootstrap=ggplot(boot_long, aes(x = estimate, fill = term)) +
geom_density(alpha = 0.9) +
geom_vline(xintercept = 0, linetype = "dashed") +
theme_classic() +
scale_fill_manual(values = c("grey40", "lightcoral", "royalblue4")) +
labs(
x = "Bootstrap estimate",
y = "Density",
fill = "Model term"
) +
theme(legend.position = "none")
bootstrap
ggsave(
filename = "bootstrapConfid.png",
plot = bootstrap,
width = 2.5,
height = 2,
dpi = 600
)
waterfall_df <- em_df %>%
filter(Week %in% c(2, 8)) %>%
select(IGF_type, Week, Perc.WeightLoss.trend) %>%
pivot_wider(
names_from = Week,
values_from = Perc.WeightLoss.trend,
names_prefix = "Week_"
) %>%
mutate(change = Week_8 - Week_2)
wf=ggplot(waterfall_df, aes(x = IGF_type, y = change, fill = IGF_type)) +
geom_hline(yintercept = 0, linetype = "dashed") +
geom_col(width = 0.65) +
theme_classic() +
scale_fill_manual(values = c(
"No_IGF" = "grey40",
"IGF1" = "lightcoral",
"IGF2" = "royalblue4"
)) +
labs(
title="Cumulative Effects",
x = "Supplementation",
y = expression(Delta~Slope),
fill = "IGF Supplementation"
) +
theme(legend.position = "none") +
scale_x_discrete(labels = c(
"No_IGF" = "None",
"IGF1" = "IGF1",
"IGF2" = "IGF2"
))
wf
ggsave(
filename = "IGF2_means.png",
plot = wf,
width = 2.5,
height = 2,
dpi = 600
)
tradeoff_data=data
pA <- ggplot(diet.an, aes(x = Diet, y = Perc_Orig, fill = Diet)) +
geom_violin(trim = FALSE, scale = "width", alpha = 0.65) +
geom_boxplot(width = 0.12, outlier.shape = NA, alpha = 0.8) +
geom_jitter(width = 0.08, size = 1.8, alpha = 0.75) +
theme_classic(base_size = 12) +
scale_fill_manual(values = c(
"AdLib" = "slategrey",
"DR" = "lemonchiffon2"
)) +
labs(
title = "Dietary restriction increased weight loss",
x = "Diet",
y = "Percent of original body mass",
fill = "Diet"
) +
theme(
plot.title = element_text(face = "bold"),
axis.title = element_text(face = "bold"),
axis.text = element_text(face = "bold"),
legend.position = "none"
)
pB <- ggplot(tradeoff_data, aes(x = Week, y = Perc.Regeneration, color = Diet, group = Diet)) +
stat_summary(fun = mean, geom = "line", linewidth = 1.2) +
stat_summary(fun = mean, geom = "point", size = 3) +
stat_summary(fun.data = mean_se, geom = "errorbar", width = 0.15) +
theme_classic(base_size = 12) +
scale_color_manual(values = c(
"AdLib" = "slategrey",
"Restricted" = "lemonchiffon2"
)) +
labs(
title = "Dietary restriction reduced regeneration",
x = "Week",
y = "Percent regeneration",
color = "Diet"
) +
theme(
plot.title = element_text(face = "bold"),
axis.title = element_text(face = "bold"),
axis.text = element_text(face = "bold"),
legend.position = "bottom"
)
tradeoff_noigf <- data %>%
mutate(
IGF_type = case_when(
Treatment %in% c("AdLib", "DR") ~ "No_IGF",
Treatment == "DR.IGF1" ~ "IGF1",
Treatment == "DR.IGF2" ~ "IGF2"
)
) %>%
filter(IGF_type == "No_IGF")
model_tradeoff <- lmer(
Perc.Regeneration ~ Week * Perc.WeightLoss + (1 | Animal_ID),
data = tradeoff_noigf
)
tradeoff_slopes <- emtrends(
model_tradeoff,
~ Week,
var = "Perc.WeightLoss",
at = list(Week = c(2, 4, 6, 8))
)
tradeoff_slopes_df <- as.data.frame(summary(tradeoff_slopes, infer = TRUE)) %>%
mutate(
sig_zero = case_when(
p.value < 0.001 ~ "***",
p.value < 0.01 ~ "**",
p.value < 0.05 ~ "*",
p.value < 0.10 ~ "†",
TRUE ~ ""
)
)
pC <- ggplot(tradeoff_slopes_df, aes(x = Week, y = Perc.WeightLoss.trend)) +
geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
geom_errorbar(aes(ymin = lower.CL, ymax = upper.CL),
width = 0.15, color = "grey30") +
geom_point(size = 4, color = "grey30") +
geom_text(aes(y = lower.CL - 0.04, label = sig_zero),
size = 5, color = "grey30") +
theme_classic(base_size = 12) +
labs(
title = "Energetic trade-off strengthened over time",
x = "Week",
y = "Slope of weight loss effect"
) +
theme(
plot.title = element_text(face = "bold"),
axis.title = element_text(face = "bold"),
axis.text = element_text(face = "bold")
)
# Combine into one publication-style figure
tradeoff_figure <- (pA + pB) / pC +
plot_layout(heights = c(1, 0.9)) +
plot_annotation(
title = "Dietary Restriction Establishes an Energetic Trade-Off",
tag_levels = "A"
) &
theme(
plot.tag = element_text(face = "bold", size = 20)
)
tradeoff_figure
ggsave(
"dietary_restriction_tradeoff_multiplot.png",
tradeoff_figure,
width = 9,
height = 7,
dpi = 600
)
#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 were a few 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 originally decided to zoom in to the first four weeks of time. This decision was 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. However, following review we decided to reevaluate this decision mathematically.
model_early <- lmer(
Perc.Regeneration ~ Week * Perc.WeightLoss * IGF_type+
(1 | Animal_ID),
data = data %>% filter(Week <= 4)
)
model_full <- lmer(
Perc.Regeneration ~ Week * Perc.WeightLoss * IGF_type +
(1 | Animal_ID),
data = data
)
summary(model_early)
## Linear mixed model fit by REML ['lmerMod']
## Formula: Perc.Regeneration ~ Week * Perc.WeightLoss * IGF_type + (1 |
## Animal_ID)
## Data: data %>% filter(Week <= 4)
##
## REML criterion at convergence: 1482.4
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.4327 -0.7026 0.0266 0.5295 3.8744
##
## Random effects:
## Groups Name Variance Std.Dev.
## Animal_ID (Intercept) 2.621 1.619
## Residual 12.684 3.561
## Number of obs: 266, groups: Animal_ID, 69
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) -10.12023 1.39215 -7.270
## Week 6.84463 0.58032 11.795
## Perc.WeightLoss 0.13487 0.07164 1.883
## IGF_typeIGF1 4.31401 3.10778 1.388
## IGF_typeIGF2 2.00531 4.04298 0.496
## Week:Perc.WeightLoss -0.06327 0.02990 -2.116
## Week:IGF_typeIGF1 -3.02583 1.26306 -2.396
## Week:IGF_typeIGF2 -2.66650 1.48467 -1.796
## Perc.WeightLoss:IGF_typeIGF1 -0.16075 0.15860 -1.014
## Perc.WeightLoss:IGF_typeIGF2 -0.04816 0.18772 -0.257
## Week:Perc.WeightLoss:IGF_typeIGF1 0.10602 0.06741 1.573
## Week:Perc.WeightLoss:IGF_typeIGF2 0.08486 0.06791 1.250
##
## Correlation of Fixed Effects:
## (Intr) Week Prc.WL IGF_IGF1 IGF_IGF2 Wk:P.WL W:IGF_IGF1
## Week -0.875
## Prc.WghtLss -0.814 0.742
## IGF_typIGF1 -0.448 0.392 0.365
## IGF_typIGF2 -0.344 0.301 0.280 0.154
## Wk:Prc.WghL 0.755 -0.880 -0.878 -0.338 -0.260
## Wk:IGF_IGF1 0.402 -0.459 -0.341 -0.883 -0.138 0.404
## Wk:IGF_IGF2 0.342 -0.391 -0.290 -0.153 -0.876 0.344 0.180
## P.WL:IGF_IGF1 0.368 -0.335 -0.452 -0.892 -0.127 0.397 0.817
## P.WL:IGF_IGF2 0.311 -0.283 -0.382 -0.139 -0.933 0.335 0.130
## W:P.WL:IGF_IGF1 -0.335 0.390 0.390 0.793 0.115 -0.444 -0.922
## W:P.WL:IGF_IGF2 -0.332 0.387 0.387 0.149 0.832 -0.440 -0.178
## 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.131
## P.WL:IGF_IGF2 0.813 0.172
## W:P.WL:IGF_IGF1 -0.153 -0.884 -0.149
## W:P.WL:IGF_IGF2 -0.943 -0.175 -0.875 0.195
summary(model_full)
## Linear mixed model fit by REML ['lmerMod']
## 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 t value
## (Intercept) -7.19877 1.30832 -5.502
## Week 5.60609 0.22198 25.255
## Perc.WeightLoss 0.12593 0.06120 2.058
## IGF_typeIGF1 4.71667 2.84132 1.660
## IGF_typeIGF2 3.52438 3.86935 0.911
## Week:Perc.WeightLoss -0.05146 0.01153 -4.461
## Week:IGF_typeIGF1 -1.64541 0.49630 -3.315
## Week:IGF_typeIGF2 -2.66371 0.61076 -4.361
## Perc.WeightLoss:IGF_typeIGF1 -0.22189 0.13875 -1.599
## Perc.WeightLoss:IGF_typeIGF2 -0.20481 0.17565 -1.166
## Week:Perc.WeightLoss:IGF_typeIGF1 0.04116 0.02843 1.448
## Week:Perc.WeightLoss:IGF_typeIGF2 0.11350 0.02950 3.847
##
## 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
#The effect is in the same positive direction in both models, but becomes substantially stronger and highly significant when later time points are included. If weeks 5–8 were dominated by measurement error, you would expect the effect size to weaken or become unstable, not increase.
library(performance)
icc(model_full)
## # Intraclass Correlation Coefficient
##
## Adjusted ICC: 0.467
## Unadjusted ICC: 0.127
#Approximately 47% of the explainable variance is attributable to consistent differences among individuals, indicating moderate repeatability in the measurements over time. This level of repeatability is consistent with reliable longitudinal data.
late_data <- data %>% filter(Week >= 5)
model_late <- lmer(
Perc.Regeneration ~ Week * Perc.WeightLoss * IGF_type +
(1 | Animal_ID),
data = late_data
)
boot_fun <- function(fit) {
fixef(fit)["Week:Perc.WeightLoss:IGF_typeIGF2"]
}
library(lme4)
set.seed(123)
boot_late <- bootMer(
model_late,
FUN = boot_fun,
nsim = 1000
)
quantile(boot_late$t, c(0.025, 0.5, 0.975))
## 2.5% 50% 97.5%
## 0.0514409 0.1420473 0.2314586
Sensitivity analyses demonstrated that inclusion of weeks 5–8 strengthened the IGF2 rescue effect without changing its direction, indicating that later measurements were reliable and biologically informative rather than disproportionately noisy.
To assess whether measurements from weeks 5–8 introduced excessive variability, we conducted several complementary sensitivity analyses. First, we compared models fit to early time points only (weeks 1–4) with models including all observations (weeks 1–8). The estimated IGF2 rescue effect was positive in both analyses and increased in magnitude from β = 0.088 (p = 0.213) in the early-only model to β = 0.114 (p = 0.000138) in the full model. Thus, inclusion of later time points strengthened the effect rather than changing its direction.
Second, the adjusted intraclass correlation coefficient for the full mixed model was 0.467, indicating moderate repeatability of regeneration measurements within individuals over time. Third, although absolute residuals differed significantly among weeks (ANOVA of |residuals|: F₇,₄₅₇ = 7.23, p = 3.13 × 10⁻⁸), this pattern is expected in a cumulative biological process such as tail regeneration, where treatment groups diverge over time. Importantly, increased residual variation at later weeks coincided with stronger biological separation among treatment groups rather than inconsistent measurements.
Finally, nonparametric bootstrap analyses provided additional support for the robustness of the IGF2 rescue effect. Across bootstrap resamples, the distribution of the IGF2 interaction term remained consistently positive and was well separated from zero, whereas the baseline trade-off term remained negative and the IGF1 effect was centered near zero. This indicates that the observed IGF2 effect is stable and unlikely to be driven by a small subset of observations.To further evaluate the reliability of the later time points, we performed a bootstrap analysis restricted to weeks 5–8. The IGF2 rescue coefficient remained consistently positive across resamples (median = 0.142, 95% CI = 0.051–0.231), indicating that the late-stage effect was robust and not driven by a small number of influential observations.
Together, these analyses demonstrate that the week 5–8 measurements are reliable and biologically informative. Rather than introducing undue noise, the later time points captured the period during which the energetic trade-off became most pronounced and the buffering effect of IGF2 was most clearly detectable.