2. Data Import and Curation
2.1 Pre-experimental body-mass dataset
diet <- read.csv(
"WL.analysis.csv",
stringsAsFactors = FALSE,
check.names = FALSE
)
# The source file contains a trailing space in the Week column name.
names(diet)[trimws(names(diet)) == "Week"] <- "Week"
# Standardize factor order for consistent output.
diet <- diet %>%
mutate(
Treatment = factor(
Treatment,
levels = c("AdLib", "DR", "DR.IGF1", "DR.IGF2")
)
)
str(diet)
## 'data.frame': 228 obs. of 14 variables:
## $ Animal_ID : chr "BC039" "BC048" "BC099" "BC158" ...
## $ ToeClip : chr "1455" "1513" "11-Jan" "2330" ...
## $ BC_Cage : int 32 28 9 28 8 36 39 39 28 15 ...
## $ Treatment : Factor w/ 4 levels "AdLib","DR","DR.IGF1",..: 3 1 1 4 1 3 2 2 3 4 ...
## $ Diet : chr "DR" "Adlib" "Adlib" "DR" ...
## $ Tail : num 73 69 82 71 74 79.5 85 60 75.5 79 ...
## $ SVL : int 46 48 48 44 42 47 51 46 45 47 ...
## $ Week : int -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 ...
## $ Mass : num 2.57 2.71 3.67 2.64 2.46 ...
## $ Bcond : num 0.0558 0.0565 0.0766 0.06 0.0586 ...
## $ Perc_BC.change : num NA NA NA NA NA NA NA NA NA NA ...
## $ Delta Mass_Initial: num NA NA NA NA NA NA NA NA NA NA ...
## $ Perc_WL : num 0 0 0 0 0 0 0 0 0 0 ...
## $ Perc_Orig : num 100 100 100 100 100 100 100 100 100 100 ...
2.2 Eight-week regeneration dataset
data <- read.csv(
"R.analysis.currated.csv",
stringsAsFactors = FALSE,
check.names = FALSE
)
# Remove observations from four individuals following substantial secondary
# tail loss unrelated to the original experimental autotomy.
excluded_animals <- c("BC121", "BC144", "BC383", "BC561")
#Separate treatments out into single variables (Ex. DR.IGF2 is Restricted and IGF2 at Diet and IGF_Type Variables)
data <- data %>%
filter(!Animal_ID %in% excluded_animals) %>%
mutate(
Treatment = factor(
Treatment,
levels = c("AdLib", "DR", "DR.IGF1", "DR.IGF2")
),
Diet = case_when(
Treatment == "AdLib" ~ "AdLib",
Treatment %in% c("DR", "DR.IGF1", "DR.IGF2") ~ "Restricted",
TRUE ~ NA_character_
),
Diet = factor(Diet, levels = c("AdLib", "Restricted")),
IGF = if_else(
Treatment %in% c("DR.IGF1", "DR.IGF2"),
"IGF",
"No_IGF"
),
IGF = factor(IGF, levels = c("No_IGF", "IGF")),
IGF_type = case_when(
Treatment %in% c("AdLib", "DR") ~ "No_IGF",
Treatment == "DR.IGF1" ~ "IGF1",
Treatment == "DR.IGF2" ~ "IGF2",
TRUE ~ NA_character_
),
IGF_type = factor(IGF_type, levels = c("No_IGF", "IGF1", "IGF2"))
)
str(data)
## 'data.frame': 608 obs. of 18 variables:
## $ Animal_ID : chr "BC039" "BC039" "BC039" "BC039" ...
## $ ToeClip : chr "1455" "1455" "1455" "1455" ...
## $ BC_Cage : int 32 32 32 32 32 32 32 32 28 28 ...
## $ Treatment : Factor w/ 4 levels "AdLib","DR","DR.IGF1",..: 3 3 3 3 3 3 3 3 1 1 ...
## $ Tail : num 73 73 73 73 73 73 73 73 69 69 ...
## $ SVL : int 46 46 46 46 46 46 46 46 48 48 ...
## $ Week : int 1 2 3 4 5 6 7 8 1 2 ...
## $ Mass : num 2.1 2.07 2.1 2.1 2.24 ...
## $ Dose : num 2.38 2.38 2.38 2.38 2.38 ...
## $ Perc.WeightLoss : num 18 19.3 18.2 18.2 12.7 ...
## $ Regeneration : num 0 0.15 6 11 16 20 22 24 0 0.1 ...
## $ Rate_Reg : num NA 0.15 5.85 5 5 4 2 2 NA 0.1 ...
## $ Rate_Perc : num NA 0.217 8.478 7.246 7.246 ...
## $ Perc.Regeneration: num 0 0.217 8.696 15.942 23.188 ...
## $ Eggs : int 0 1 0 0 0 0 0 0 0 0 ...
## $ Diet : Factor w/ 2 levels "AdLib","Restricted": 2 2 2 2 2 2 2 2 1 1 ...
## $ IGF : Factor w/ 2 levels "No_IGF","IGF": 2 2 2 2 2 2 2 2 1 1 ...
## $ IGF_type : Factor w/ 3 levels "No_IGF","IGF1",..: 2 2 2 2 2 2 2 2 1 1 ...
table(data$Treatment, useNA = "ifany")
##
## AdLib DR DR.IGF1 DR.IGF2
## 160 136 160 152
length(unique(data$Animal_ID))
## [1] 76
3. Verification of Randomization
Animals should not differ systematically in body size or original
tail length before treatment implementation.
3.1 Baseline subset
#Week -4 is the beginning of the study, prior to diet implementation. Week 0 is the time of tail autotomy.
pre_diet <- diet %>%
filter(Week == -4)
3.2 Initial snout–vent length
model_svl <- lm(SVL ~ Treatment, data = pre_diet)
anova(model_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
summary(model_svl)
##
## Call:
## lm(formula = SVL ~ Treatment, data = pre_diet)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.900 -1.200 -0.200 1.100 4.706
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 45.9000 0.4218 108.816 <2e-16 ***
## TreatmentDR 0.3941 0.6223 0.633 0.529
## TreatmentDR.IGF1 0.3000 0.5965 0.503 0.617
## TreatmentDR.IGF2 0.8368 0.6043 1.385 0.170
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.886 on 72 degrees of freedom
## Multiple R-squared: 0.02653, Adjusted R-squared: -0.01403
## F-statistic: 0.6542 on 3 and 72 DF, p-value: 0.5829
plot_svl <- ggplot(
pre_diet,
aes(x = Treatment, y = SVL, fill = Treatment)
) +
geom_violin(trim = FALSE, scale = "width") +
geom_boxplot(width = 0.10, outlier.shape = NA) +
geom_jitter(width = 0.10) +
scale_fill_manual(values = treatment_colors) +
labs(x = "Treatment", y = "Snout–vent length") +
theme_classic() +
theme(legend.position = "none")
plot_svl

ggsave(
filename = "svl.png",
plot = plot_svl,
width = 5,
height = 4,
dpi = 600
)
Manuscript result: Initial snout–vent length did not
differ among treatment groups, \(F_{3,72}=0.65\), \(p=0.58\).
3.3 Initial body mass
model_mass <- lm(Mass ~ Treatment, data = pre_diet)
anova(model_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
summary(model_mass)
##
## Call:
## lm(formula = Mass ~ Treatment, data = pre_diet)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.8368 -0.3412 -0.0487 0.3016 1.2372
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.83280 0.10631 26.647 <2e-16 ***
## TreatmentDR 0.19896 0.15684 1.269 0.209
## TreatmentDR.IGF1 0.12180 0.15034 0.810 0.421
## TreatmentDR.IGF2 0.09694 0.15231 0.636 0.527
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4754 on 72 degrees of freedom
## Multiple R-squared: 0.02259, Adjusted R-squared: -0.01814
## F-statistic: 0.5547 on 3 and 72 DF, p-value: 0.6467
plot_mass <- ggplot(
pre_diet,
aes(x = Treatment, y = Mass, fill = Treatment)
) +
geom_violin(trim = FALSE, scale = "width") +
geom_boxplot(width = 0.10, outlier.shape = NA) +
geom_jitter(width = 0.10) +
scale_fill_manual(values = treatment_colors) +
labs(x = "Treatment", y = "Initial body mass") +
theme_classic() +
theme(legend.position = "none")
plot_mass

ggsave(
filename = "mass.png",
plot = plot_mass,
width = 5,
height = 4,
dpi = 600
)
Manuscript result: Initial body mass did not differ
among treatment groups, \(F_{3,72}=0.55\), \(p=0.65\).
3.4 Original tail length
model_tail_baseline <- lm(Tail ~ Treatment, data = pre_diet)
anova(model_tail_baseline)
## Analysis of Variance Table
##
## Response: Tail
## Df Sum Sq Mean Sq F value Pr(>F)
## Treatment 3 420.0 139.994 2.3623 0.0795 .
## Residuals 64 3792.7 59.262
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(model_tail_baseline)
##
## Call:
## lm(formula = Tail ~ Treatment, data = pre_diet)
##
## Residuals:
## Min 1Q Median 3Q Max
## -19.000 -4.250 0.875 4.292 20.500
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 73.000 1.814 40.232 <2e-16 ***
## TreatmentDR 1.500 2.743 0.547 0.5864
## TreatmentDR.IGF1 5.250 2.566 2.046 0.0449 *
## TreatmentDR.IGF2 5.778 2.566 2.252 0.0278 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7.698 on 64 degrees of freedom
## (8 observations deleted due to missingness)
## Multiple R-squared: 0.09969, Adjusted R-squared: 0.05749
## F-statistic: 2.362 on 3 and 64 DF, p-value: 0.0795
Manuscript result: Original tail length did not
differ significantly among treatment groups, \(F_{3,72}=2.36\), \(p=0.08\).
4. Verification of the Dietary Manipulation
4.1 Percent body-mass loss after acclimation
#Week -1 is the measurement following three weeks of restricted feeding, and one week prior to tail autotomy at "Week 0".
diet_final_acclimation <- diet %>%
filter(Week == -1)
model_diet_loss <- lm(Perc_WL ~ Diet, data = diet_final_acclimation)
anova(model_diet_loss)
## 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
summary(model_diet_loss)
##
## Call:
## lm(formula = Perc_WL ~ Diet, data = diet_final_acclimation)
##
## Residuals:
## Min 1Q Median 3Q Max
## -18.1313 -4.6672 0.7973 4.0723 20.1000
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.104 1.562 0.707 0.482225
## DietDR 6.761 1.817 3.722 0.000407 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6.626 on 67 degrees of freedom
## (7 observations deleted due to missingness)
## Multiple R-squared: 0.1713, Adjusted R-squared: 0.159
## F-statistic: 13.85 on 1 and 67 DF, p-value: 0.0004068
diet_group_summary <- diet_final_acclimation %>%
group_by(Diet) %>%
summarise(
n = sum(!is.na(Perc_WL)),
mean_percent_loss = mean(Perc_WL, na.rm = TRUE),
sd_percent_loss = sd(Perc_WL, na.rm = TRUE),
mean_percent_original_mass = mean(Perc_Orig, na.rm = TRUE),
.groups = "drop"
)
diet_group_summary
## # A tibble: 2 × 5
## Diet n mean_percent_loss sd_percent_loss mean_percent_original_mass
## <chr> <int> <dbl> <dbl> <dbl>
## 1 Adlib 18 1.10 7.58 98.9
## 2 DR 51 7.86 6.27 92.1
Manuscript result: Diet-restricted females lost
significantly more body mass than ad libitum-fed females, \(F_{1,67}=13.85\), \(p=0.0004\). The average DR individual lost
~7.8% of their body mass, while those on the Adlib diet lost an average
of 1.1%.
5. Establishing the Energetic Trade-off
5.1 Primary cumulative-percent-regeneration model
model_weightloss <- lmerTest::lmer(
Perc.Regeneration ~ Week * Perc.WeightLoss + Tail +
(1 | Animal_ID),
data = data
)
summary(model_weightloss)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: Perc.Regeneration ~ Week * Perc.WeightLoss + Tail + (1 | Animal_ID)
## Data: data
##
## REML criterion at convergence: 2747.8
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.1896 -0.5652 0.0844 0.5744 3.1799
##
## Random effects:
## Groups Name Variance Std.Dev.
## Animal_ID (Intercept) 15.69 3.961
## Residual 21.76 4.665
## Number of obs: 443, groups: Animal_ID, 65
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 13.15695 5.28435 68.47432 2.490 0.01521 *
## Week 4.84774 0.19428 399.39842 24.953 < 2e-16 ***
## Perc.WeightLoss 0.10361 0.05420 436.49430 1.912 0.05657 .
## Tail -0.25817 0.06936 68.87769 -3.722 0.00040 ***
## Week:Perc.WeightLoss -0.03020 0.01021 403.58612 -2.958 0.00327 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) Week Prc.WL Tail
## Week -0.144
## Prc.WghtLss -0.047 0.632
## Tail -0.977 -0.003 -0.123
## Wk:Prc.WghL 0.135 -0.848 -0.742 -0.012
anova(model_weightloss)
## Type III Analysis of Variance Table with Satterthwaite's method
## Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
## Week 13550.0 13550.0 1 399.40 622.6418 < 2.2e-16 ***
## Perc.WeightLoss 79.5 79.5 1 436.49 3.6544 0.0565742 .
## Tail 301.5 301.5 1 68.88 13.8548 0.0003996 ***
## Week:Perc.WeightLoss 190.5 190.5 1 403.59 8.7518 0.0032750 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Manuscript results:
- Week: \(\beta=4.85\), \(t=24.95\), \(p<0.0001\)
- Percent body-mass loss: \(\beta=0.10\), \(t=1.91\), \(p=0.06\)
- Week × percent body-mass loss: \(\beta=-0.030\), \(t=-2.96\), \(p=0.0031\)
A negative Week × Percent Weight Loss interaction indicates that
animals experiencing greater energetic deficits regenerated
progressively less tail tissue over time.
5.2 Alternative regeneration metrics
These models retain the same fixed- and random-effect structure while
replacing the response variable.
model_weightloss_rate <- lmerTest::lmer(
Rate_Reg ~ Week * Perc.WeightLoss + Tail +
(1 | Animal_ID),
data = data
)
model_weightloss_absolute <- lmerTest::lmer(
Regeneration ~ Week * Perc.WeightLoss + Tail +
(1 | Animal_ID),
data = data
)
summary(model_weightloss_rate)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: Rate_Reg ~ Week * Perc.WeightLoss + Tail + (1 | Animal_ID)
## Data: data
##
## REML criterion at convergence: 1857.2
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -1.4619 -0.7154 -0.2113 0.5768 6.0827
##
## Random effects:
## Groups Name Variance Std.Dev.
## Animal_ID (Intercept) 0.01256 0.1121
## Residual 7.32539 2.7065
## Number of obs: 380, groups: Animal_ID, 64
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 4.621180 1.490139 64.189058 3.101 0.00286 **
## Week -0.017850 0.123697 359.320996 -0.144 0.88534
## Perc.WeightLoss 0.061746 0.035109 374.665893 1.759 0.07944 .
## Tail -0.028967 0.018671 48.287823 -1.551 0.12732
## Week:Perc.WeightLoss -0.007433 0.006688 359.705927 -1.111 0.26716
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) Week Prc.WL Tail
## Week -0.382
## Prc.WghtLss -0.248 0.732
## Tail -0.902 -0.007 -0.117
## Wk:Prc.WghL 0.337 -0.817 -0.900 -0.020
anova(model_weightloss_rate)
## Type III Analysis of Variance Table with Satterthwaite's method
## Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
## Week 0.1525 0.1525 1 359.32 0.0208 0.88534
## Perc.WeightLoss 22.6578 22.6578 1 374.67 3.0931 0.07944 .
## Tail 17.6323 17.6323 1 48.29 2.4070 0.12732
## Week:Perc.WeightLoss 9.0474 9.0474 1 359.71 1.2351 0.26716
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(model_weightloss_absolute)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: Regeneration ~ Week * Perc.WeightLoss + Tail + (1 | Animal_ID)
## Data: data
##
## REML criterion at convergence: 2330.5
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.90525 -0.61605 0.07588 0.59909 2.96424
##
## Random effects:
## Groups Name Variance Std.Dev.
## Animal_ID (Intercept) 6.839 2.615
## Residual 8.366 2.892
## Number of obs: 442, groups: Animal_ID, 65
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 0.005838 3.446978 68.149511 0.002 0.999
## Week 2.964134 0.120670 396.631276 24.564 <2e-16 ***
## Perc.WeightLoss 0.017058 0.033812 434.412764 0.505 0.614
## Tail -0.045651 0.045234 68.663813 -1.009 0.316
## Week:Perc.WeightLoss -0.005878 0.006342 400.910832 -0.927 0.355
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) Week Prc.WL Tail
## Week -0.137
## Prc.WghtLss -0.044 0.629
## Tail -0.979 -0.003 -0.120
## Wk:Prc.WghL 0.128 -0.847 -0.738 -0.011
anova(model_weightloss_absolute)
## Type III Analysis of Variance Table with Satterthwaite's method
## Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
## Week 5047.8 5047.8 1 396.63 603.3913 <2e-16 ***
## Perc.WeightLoss 2.1 2.1 1 434.41 0.2545 0.6142
## Tail 8.5 8.5 1 68.66 1.0185 0.3164
## Week:Perc.WeightLoss 7.2 7.2 1 400.91 0.8593 0.3545
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Manuscript results: As a sensitivity analysis, the
relationship between energetic state and regeneration was evaluated
using two alternative response variables: weekly regeneration rate and
cumulative regenerated tail length. Weekly regeneration rate showed no
significant effects of week, percent body mass loss, or their
interaction, although percent body mass loss exhibited a weak positive
trend (p = 0.079). Similarly, when regeneration was expressed as
cumulative regenerated tail length, regeneration increased significantly
over time (β = 2.96, p < 0.0001), but neither percent body mass loss
nor its interaction with week was significant. Together, these analyses
indicate that expressing regeneration as cumulative percent regeneration
provides the greatest sensitivity for detecting changes in the
relationship between energetic state and regenerative performance while
accounting for differences in initial tail length among individuals.
5.3 Exploratory visualization by energetic-state category
The primary analyses treat percent body-mass loss continuously. The
following three-category plot is retained only as a descriptive
visualization.
data <- data %>%
mutate(
WL_group = cut(Perc.WeightLoss, breaks = 3)
)
ggplot(
data,
aes(
x = Week,
y = Perc.Regeneration,
color = WL_group,
group = WL_group
)
) +
stat_summary(fun = mean, geom = "line", linewidth = 1.2) +
stat_summary(fun = mean, geom = "point") +
labs(
x = "Week",
y = "Cumulative percent regeneration",
color = "Weight-loss category"
) +
theme_classic()

Depiction: For visualization purposes, animals were
divided into tertiles based on percent body mass loss, although
energetic state was analyzed as a continuous variable in all statistical
models. Regeneration trajectories were similar during the early stages
of regeneration but began to diverge after approximately Week 5. Animals
that maintained the highest percentage of their original body mass
exhibited the greatest cumulative regeneration, whereas those
experiencing greater body mass loss regenerated more slowly over time.
This pattern visually reinforces the primary mixed-model result that the
effect of energetic state on regeneration increases as regeneration
progresses. This was part of the reasoning for using percent weight loss
as a continuous variable rather than the diet treatments.
6. Testing Rescue by IGF Supplementation
6.1 Primary IGF1-versus-IGF2 rescue model
model_igf_split <- lmerTest::lmer(
Perc.Regeneration ~
Week * Perc.WeightLoss * IGF_type + Tail +
(1 | Animal_ID),
data = data
)
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 + Tail +
## (1 | Animal_ID)
## Data: data
##
## REML criterion at convergence: 2717.5
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.05240 -0.58328 0.07647 0.53288 3.14152
##
## Random effects:
## Groups Name Variance Std.Dev.
## Animal_ID (Intercept) 15.52 3.940
## Residual 19.87 4.457
## Number of obs: 443, groups: Animal_ID, 65
##
## Fixed effects:
## Estimate Std. Error df t value
## (Intercept) 8.95632 5.37444 66.82767 1.666
## Week 5.57153 0.22507 390.98913 24.755
## Perc.WeightLoss 0.16173 0.06336 418.47176 2.553
## IGF_typeIGF1 6.23221 2.90106 308.60824 2.148
## IGF_typeIGF2 4.86116 3.88987 361.49614 1.250
## Tail -0.22402 0.07251 66.89851 -3.090
## Week:Perc.WeightLoss -0.05150 0.01184 388.69919 -4.350
## Week:IGF_typeIGF1 -1.60695 0.50288 411.98772 -3.196
## Week:IGF_typeIGF2 -2.61979 0.61694 399.53649 -4.246
## Perc.WeightLoss:IGF_typeIGF1 -0.25717 0.14183 423.73347 -1.813
## Perc.WeightLoss:IGF_typeIGF2 -0.23525 0.17665 422.61347 -1.332
## Week:Perc.WeightLoss:IGF_typeIGF1 0.03935 0.02919 424.77894 1.348
## Week:Perc.WeightLoss:IGF_typeIGF2 0.11330 0.02987 393.97138 3.793
## Pr(>|t|)
## (Intercept) 0.100302
## Week < 2e-16 ***
## Perc.WeightLoss 0.011041 *
## IGF_typeIGF1 0.032472 *
## IGF_typeIGF2 0.212219
## Tail 0.002919 **
## Week:Perc.WeightLoss 1.74e-05 ***
## Week:IGF_typeIGF1 0.001503 **
## Week:IGF_typeIGF2 2.70e-05 ***
## Perc.WeightLoss:IGF_typeIGF1 0.070503 .
## Perc.WeightLoss:IGF_typeIGF2 0.183676
## Week:Perc.WeightLoss:IGF_typeIGF1 0.178340
## Week:Perc.WeightLoss:IGF_typeIGF2 0.000172 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(model_igf_split)
## Type III Analysis of Variance Table with Satterthwaite's method
## Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
## Week 5315.5 5315.5 1 405.93 267.5724 < 2.2e-16
## Perc.WeightLoss 0.0 0.0 1 419.69 0.0011 0.9735115
## IGF_type 107.4 53.7 2 336.71 2.7031 0.0684535
## Tail 189.6 189.6 1 66.90 9.5458 0.0029187
## Week:Perc.WeightLoss 0.0 0.0 1 413.66 0.0021 0.9634575
## Week:IGF_type 486.0 243.0 2 406.02 12.2327 6.939e-06
## Perc.WeightLoss:IGF_type 87.4 43.7 2 422.06 2.1996 0.1121193
## Week:Perc.WeightLoss:IGF_type 296.9 148.5 2 412.47 7.4732 0.0006484
##
## Week ***
## Perc.WeightLoss
## IGF_type .
## Tail **
## Week:Perc.WeightLoss
## Week:IGF_type ***
## Perc.WeightLoss:IGF_type
## Week:Perc.WeightLoss:IGF_type ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Manuscript interpretation: IGF2 significantly
altered the increasingly negative relationship between energetic deficit
and regeneration ( P = 0.00017), whereas IGF1 did not (p =0.178) .
6.1.2 Alternative regeneration metrics
These models retain the same fixed- and random-effect structure while
replacing the response variable.
model_weightloss_rate <- lmerTest::lmer(
Rate_Reg ~ Week * Perc.WeightLoss *IGF_type + Tail +
(1 | Animal_ID),
data = data
)
model_weightloss_absolute <- lmerTest::lmer(
Regeneration ~ Week * Perc.WeightLoss *IGF_type + Tail +
(1 | Animal_ID),
data = data
)
summary(model_weightloss_rate)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: Rate_Reg ~ Week * Perc.WeightLoss * IGF_type + Tail + (1 | Animal_ID)
## Data: data
##
## REML criterion at convergence: 1876.4
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -1.3778 -0.6999 -0.2014 0.5595 6.1085
##
## Random effects:
## Groups Name Variance Std.Dev.
## Animal_ID (Intercept) 0.02198 0.1482
## Residual 7.35988 2.7129
## Number of obs: 380, groups: Animal_ID, 64
##
## Fixed effects:
## Estimate Std. Error df t value
## (Intercept) 3.983893 1.592815 62.654178 2.501
## Week 0.022785 0.150929 344.637628 0.151
## Perc.WeightLoss 0.078408 0.043764 366.933538 1.792
## IGF_typeIGF1 0.174182 1.704939 355.773477 0.102
## IGF_typeIGF2 -1.023781 2.207736 325.606939 -0.464
## Tail -0.018409 0.020299 42.917758 -0.907
## Week:Perc.WeightLoss -0.013048 0.008160 336.923711 -1.599
## Week:IGF_typeIGF1 -0.121004 0.326578 366.982012 -0.371
## Week:IGF_typeIGF2 -0.151883 0.409571 366.830455 -0.371
## Perc.WeightLoss:IGF_typeIGF1 -0.051345 0.097548 357.354390 -0.526
## Perc.WeightLoss:IGF_typeIGF2 -0.006471 0.110176 344.373932 -0.059
## Week:Perc.WeightLoss:IGF_typeIGF1 0.011185 0.019099 360.490004 0.586
## Week:Perc.WeightLoss:IGF_typeIGF2 0.015650 0.020760 364.824718 0.754
## Pr(>|t|)
## (Intercept) 0.015 *
## Week 0.880
## Perc.WeightLoss 0.074 .
## IGF_typeIGF1 0.919
## IGF_typeIGF2 0.643
## Tail 0.370
## Week:Perc.WeightLoss 0.111
## Week:IGF_typeIGF1 0.711
## Week:IGF_typeIGF2 0.711
## Perc.WeightLoss:IGF_typeIGF1 0.599
## Perc.WeightLoss:IGF_typeIGF2 0.953
## Week:Perc.WeightLoss:IGF_typeIGF1 0.558
## Week:Perc.WeightLoss:IGF_typeIGF2 0.451
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(model_weightloss_rate)
## Type III Analysis of Variance Table with Satterthwaite's method
## Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
## Week 1.2234 1.2234 1 366.99 0.1662 0.6837
## Perc.WeightLoss 11.8232 11.8232 1 346.80 1.6064 0.2058
## IGF_type 1.8351 0.9176 2 340.62 0.1247 0.8828
## Tail 6.0531 6.0531 1 42.92 0.8224 0.3695
## Week:Perc.WeightLoss 1.5280 1.5280 1 366.17 0.2076 0.6489
## Week:IGF_type 1.7282 0.8641 2 366.60 0.1174 0.8893
## Perc.WeightLoss:IGF_type 2.0494 1.0247 2 350.20 0.1392 0.8701
## Week:Perc.WeightLoss:IGF_type 5.7791 2.8896 2 362.92 0.3926 0.6756
summary(model_weightloss_absolute)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: Regeneration ~ Week * Perc.WeightLoss * IGF_type + Tail + (1 |
## Animal_ID)
## Data: data
##
## REML criterion at convergence: 2318.5
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.63135 -0.56996 0.08751 0.58321 3.08045
##
## Random effects:
## Groups Name Variance Std.Dev.
## Animal_ID (Intercept) 6.837 2.615
## Residual 7.847 2.801
## Number of obs: 442, groups: Animal_ID, 65
##
## Fixed effects:
## Estimate Std. Error df t value
## (Intercept) -1.926997 3.529452 66.015831 -0.546
## Week 3.286170 0.141627 388.192452 23.203
## Perc.WeightLoss 0.049363 0.039961 415.191120 1.235
## IGF_typeIGF1 2.509958 1.855201 301.514022 1.353
## IGF_typeIGF2 1.628220 2.477492 361.831869 0.657
## Tail -0.028452 0.047614 66.202786 -0.598
## Week:Perc.WeightLoss -0.016560 0.007448 386.035519 -2.223
## Week:IGF_typeIGF1 -0.529278 0.317018 409.527055 -1.670
## Week:IGF_typeIGF2 -1.338341 0.388458 396.681548 -3.445
## Perc.WeightLoss:IGF_typeIGF1 -0.112795 0.089886 423.495021 -1.255
## Perc.WeightLoss:IGF_typeIGF2 -0.104107 0.111946 424.229848 -0.930
## Week:Perc.WeightLoss:IGF_typeIGF1 0.005680 0.018437 423.020369 0.308
## Week:Perc.WeightLoss:IGF_typeIGF2 0.062718 0.018801 391.245932 3.336
## Pr(>|t|)
## (Intercept) 0.586923
## Week < 2e-16 ***
## Perc.WeightLoss 0.217422
## IGF_typeIGF1 0.177091
## IGF_typeIGF2 0.511467
## Tail 0.552170
## Week:Perc.WeightLoss 0.026772 *
## Week:IGF_typeIGF1 0.095772 .
## Week:IGF_typeIGF2 0.000631 ***
## Perc.WeightLoss:IGF_typeIGF1 0.210217
## Perc.WeightLoss:IGF_typeIGF2 0.352911
## Week:Perc.WeightLoss:IGF_typeIGF1 0.758172
## Week:Perc.WeightLoss:IGF_typeIGF2 0.000932 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(model_weightloss_absolute)
## Type III Analysis of Variance Table with Satterthwaite's method
## Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
## Week 2166.04 2166.04 1 403.24 276.0261 < 2.2e-16
## Perc.WeightLoss 1.96 1.96 1 421.07 0.2495 0.617681
## IGF_type 15.79 7.90 2 333.50 1.0061 0.366741
## Tail 2.80 2.80 1 66.20 0.3571 0.552170
## Week:Perc.WeightLoss 4.31 4.31 1 411.44 0.5492 0.459063
## Week:IGF_type 103.05 51.53 2 403.37 6.5661 0.001563
## Perc.WeightLoss:IGF_type 16.65 8.33 2 422.70 1.0610 0.347023
## Week:Perc.WeightLoss:IGF_type 87.74 43.87 2 410.23 5.5902 0.004024
##
## Week ***
## Perc.WeightLoss
## IGF_type
## Tail
## Week:Perc.WeightLoss
## Week:IGF_type **
## Perc.WeightLoss:IGF_type
## Week:Perc.WeightLoss:IGF_type **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Manuscript results: As a sensitivity analysis, the
primary model was repeated using alternative measures of regeneration,
including weekly regeneration rate (mm/week) and cumulative regenerated
tail length (mm). For weekly regeneration rate, neither week, percent
body mass loss, IGF supplementation, nor any interaction terms
significantly predicted regeneration rate, although percent body mass
loss exhibited a weak positive trend (β = 0.078, p = 0.074). Similarly,
when regeneration was expressed as cumulative regenerated tail length,
regeneration increased significantly over time (β = 3.29, p <
0.0001), and the interaction between week and percent body mass loss
remained significantly negative (β = −0.0166, p = 0.027), indicating
that the energetic trade-off became stronger as regeneration progressed.
Consistent with the primary analysis, IGF2 significantly attenuated this
negative relationship over time (Week × IGF2: β = −1.34, p = 0.0006;
Week × Percent Weight Loss × IGF2: β = 0.0627, p = 0.0009), whereas IGF1
showed no significant effects. Together, these analyses demonstrate that
the primary conclusions are robust to alternative measures of
regeneration, with cumulative regeneration yielding results that closely
mirror those obtained using percent regeneration.
6.2 Model-based predictions
predicted_all_weeks <- ggpredict(
model_igf_split,
terms = c(
"Perc.WeightLoss",
"IGF_type",
"Week [2,4,6,8]"
)
)
predicted_all_weeks
## # Predicted values of Perc.Regeneration
##
## IGF_type: No_IGF
## Week: 2
##
## Perc.WeightLoss | Predicted | 95% CI
## ------------------------------------------
## -60 | -0.54 | -7.95, 6.87
## -35 | 0.93 | -4.17, 6.02
## -5 | 2.69 | 0.13, 5.25
## 50 | 5.92 | 2.18, 9.66
##
## IGF_type: No_IGF
## Week: 4
##
## Perc.WeightLoss | Predicted | 95% CI
## ------------------------------------------
## -60 | 16.78 | 10.10, 23.46
## -35 | 15.67 | 11.04, 20.30
## -5 | 14.35 | 11.96, 16.73
## 50 | 11.91 | 8.62, 15.21
##
## IGF_type: No_IGF
## Week: 6
##
## Perc.WeightLoss | Predicted | 95% CI
## ------------------------------------------
## -60 | 34.10 | 26.42, 41.78
## -35 | 30.42 | 25.11, 35.73
## -5 | 26.00 | 23.33, 28.68
## 50 | 17.91 | 14.19, 21.62
##
## IGF_type: No_IGF
## Week: 8
##
## Perc.WeightLoss | Predicted | 95% CI
## ------------------------------------------
## -60 | 51.42 | 41.52, 61.33
## -35 | 45.17 | 38.37, 51.96
## -5 | 37.66 | 34.36, 40.97
## 50 | 23.90 | 19.12, 28.68
##
## IGF_type: IGF1
## Week: 2
##
## Perc.WeightLoss | Predicted | 95% CI
## ------------------------------------------
## -60 | 13.18 | -0.91, 27.28
## -35 | 10.19 | 0.49, 19.90
## -5 | 6.60 | 1.95, 11.25
## 50 | 0.01 | -6.19, 6.21
##
## IGF_type: IGF1
## Week: 4
##
## Perc.WeightLoss | Predicted | 95% CI
## ------------------------------------------
## -60 | 22.57 | 10.39, 34.75
## -35 | 18.97 | 10.59, 27.35
## -5 | 14.65 | 10.60, 18.70
## 50 | 6.73 | 1.18, 12.28
##
## IGF_type: IGF1
## Week: 6
##
## Perc.WeightLoss | Predicted | 95% CI
## ------------------------------------------
## -60 | 31.96 | 17.01, 46.91
## -35 | 27.75 | 17.61, 37.89
## -5 | 22.70 | 18.08, 27.32
## 50 | 13.44 | 6.29, 20.59
##
## IGF_type: IGF1
## Week: 8
##
## Perc.WeightLoss | Predicted | 95% CI
## ------------------------------------------
## -60 | 41.34 | 20.75, 61.94
## -35 | 36.53 | 22.67, 50.38
## -5 | 30.75 | 24.72, 36.78
## 50 | 20.16 | 10.19, 30.13
##
## IGF_type: IGF2
## Week: 2
##
## Perc.WeightLoss | Predicted | 95% CI
## -------------------------------------------
## -60 | -0.40 | -20.36, 19.55
## -35 | 0.85 | -13.01, 14.71
## -5 | 2.35 | -4.34, 9.04
## 50 | 5.11 | -2.43, 12.65
##
## IGF_type: IGF2
## Week: 4
##
## Perc.WeightLoss | Predicted | 95% CI
## -------------------------------------------
## -60 | -1.92 | -17.92, 14.09
## -35 | 2.43 | -8.71, 13.56
## -5 | 7.64 | 2.20, 13.07
## 50 | 17.19 | 11.02, 23.36
##
## IGF_type: IGF2
## Week: 6
##
## Perc.WeightLoss | Predicted | 95% CI
## -------------------------------------------
## -60 | -3.43 | -19.66, 12.80
## -35 | 4.00 | -7.25, 15.26
## -5 | 12.92 | 7.47, 18.37
## 50 | 29.28 | 22.83, 35.72
##
## IGF_type: IGF2
## Week: 8
##
## Perc.WeightLoss | Predicted | 95% CI
## -------------------------------------------
## -60 | -4.94 | -25.43, 15.54
## -35 | 5.58 | -8.57, 19.73
## -5 | 18.21 | 11.48, 24.94
## 50 | 41.36 | 33.15, 49.56
##
## Adjusted for:
## * Tail = 76.41
## * Animal_ID = 0 (population-level)
plot_predictions <- ggplot(
predicted_all_weeks,
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) +
scale_color_manual(values = igf_colors) +
scale_fill_manual(values = igf_colors) +
labs(
x = "Percent body-mass loss",
y = "Predicted cumulative percent regeneration",
color = "IGF treatment",
fill = "IGF treatment"
) +
theme_classic()
plot_predictions

Depiction: Predicted regeneration trajectories
demonstrate that the relationship between energetic state and
regeneration strengthened over time. By Weeks 6–8, IGF2 reversed the
negative association between body mass loss and regeneration observed in
untreated and IGF1-treated animals, indicating progressive attenuation
of the energetic trade-off.
6.3 Week-specific energetic-state slopes
week_specific_slopes <- emtrends(
model_igf_split,
~ IGF_type | Week,
var = "Perc.WeightLoss",
at = list(Week = c(2, 4, 6, 8))
)
summary(week_specific_slopes, infer = TRUE)
## Week = 2:
## IGF_type Perc.WeightLoss.trend SE df lower.CL upper.CL t.ratio p.value
## No_IGF 0.0587 0.0491 430 -0.0377 0.1552 1.197 0.2321
## IGF1 -0.1197 0.0915 392 -0.2996 0.0602 -1.308 0.1915
## IGF2 0.0501 0.1260 366 -0.1976 0.2978 0.398 0.6911
##
## Week = 4:
## IGF_type Perc.WeightLoss.trend SE df lower.CL upper.CL t.ratio p.value
## No_IGF -0.0442 0.0437 414 -0.1301 0.0416 -1.013 0.3116
## IGF1 -0.1440 0.0796 408 -0.3004 0.0124 -1.810 0.0710
## IGF2 0.1737 0.1010 307 -0.0255 0.3729 1.716 0.0872
##
## Week = 6:
## IGF_type Perc.WeightLoss.trend SE df lower.CL upper.CL t.ratio p.value
## No_IGF -0.1472 0.0503 422 -0.2461 -0.0484 -2.928 0.0036
## IGF1 -0.1683 0.1000 430 -0.3650 0.0284 -1.682 0.0933
## IGF2 0.2973 0.1030 367 0.0943 0.5003 2.880 0.0042
##
## Week = 8:
## IGF_type Perc.WeightLoss.trend SE df lower.CL upper.CL t.ratio p.value
## No_IGF -0.2502 0.0654 430 -0.3787 -0.1217 -3.828 0.0001
## IGF1 -0.1926 0.1390 425 -0.4665 0.0813 -1.382 0.1677
## IGF2 0.4209 0.1310 430 0.1639 0.6780 3.218 0.0014
##
## Degrees-of-freedom method: kenward-roger
## Confidence level used: 0.95
week_specific_slopes_df <- as.data.frame(
summary(week_specific_slopes, infer = TRUE)
)
Manuscript Result: Week-specific slope estimates
demonstrated that energetic state had little influence on regeneration
during the early stages of tail regrowth (Weeks 2–4), as none of the
treatment-specific slopes differed significantly from zero. By Week 6,
untreated animals exhibited a significant negative relationship between
body mass loss and regeneration (β = −0.147, p = 0.0036), whereas
IGF2-treated animals exhibited a significant positive relationship (β =
0.297, p = 0.0042), indicating attenuation of the energetic trade-off.
This divergence became even more pronounced by Week 8, with untreated
animals showing a stronger negative relationship (β = −0.250, p =
0.0001) and IGF2-treated animals showing a stronger positive
relationship (β = 0.421, p = 0.0014). Although IGF1 exhibited a modest
positive trend at Week 4 (p = 0.071), it did not differ significantly
from zero at any time point.
6.4 Pairwise comparisons of slopes
The manuscript describes Tukey-adjusted comparisons among
supplementation groups. Both the full pairwise comparisons and
treatment-versus-control contrasts are retained.
# All pairwise comparisons within week, Tukey adjusted
pairwise_slopes_tukey <- pairs(
week_specific_slopes,
adjust = "tukey"
)
pairwise_slopes_tukey
## Week = 2:
## contrast estimate SE df t.ratio p.value
## No_IGF - IGF1 0.17847 0.1040 408 1.713 0.2014
## No_IGF - IGF2 0.00865 0.1350 379 0.064 0.9977
## IGF1 - IGF2 -0.16982 0.1560 376 -1.090 0.5206
##
## Week = 4:
## contrast estimate SE df t.ratio p.value
## No_IGF - IGF1 0.09976 0.0911 412 1.095 0.5176
## No_IGF - IGF2 -0.21795 0.1100 325 -1.980 0.1189
## IGF1 - IGF2 -0.31771 0.1290 350 -2.467 0.0375
##
## Week = 6:
## contrast estimate SE df t.ratio p.value
## No_IGF - IGF1 0.02106 0.1120 430 0.188 0.9808
## No_IGF - IGF2 -0.44454 0.1150 379 -3.876 0.0004
## IGF1 - IGF2 -0.46560 0.1440 412 -3.238 0.0037
##
## Week = 8:
## contrast estimate SE df t.ratio p.value
## No_IGF - IGF1 -0.05765 0.1540 426 -0.374 0.9258
## No_IGF - IGF2 -0.67114 0.1460 430 -4.594 <0.0001
## IGF1 - IGF2 -0.61349 0.1910 429 -3.210 0.0041
##
## Degrees-of-freedom method: kenward-roger
## P value adjustment: tukey method for comparing a family of 3 estimates
Manuscript Result: Tukey-adjusted pairwise
comparisons of week-specific slopes showed no significant differences
among treatments at Week 2. By Week 4, the slope for IGF2 differed
significantly from IGF1 (p = 0.038) but not from untreated controls (p =
0.119). Significant differences between IGF2-treated and untreated
animals emerged by Week 6 (p = 0.0004) and became even more pronounced
by Week 8 (p < 0.0001), indicating that IGF2 progressively attenuated
the energetic trade-off over time. IGF1 did not differ from untreated
controls at any time point.
6.5 Figure 2A: week-specific rescue slopes
# Prepare plotting data
rescue_plot_data <- week_specific_slopes_df %>%
mutate(
significance = case_when(
IGF_type == "IGF2" & Week == 4 ~ "\u2020",
IGF_type == "IGF2" & Week == 6 ~ "**",
IGF_type == "IGF2" & Week == 8 ~ "***",
TRUE ~ ""
)
)
plot_rescue <- ggplot(
rescue_plot_data,
aes(
x = Week,
y = Perc.WeightLoss.trend,
color = IGF_type
)
) +
# Background shading
annotate(
"rect",
xmin = -Inf,
xmax = Inf,
ymin = -Inf,
ymax = 0,
fill = "#E87722",
alpha = 0.12
) +
annotate(
"rect",
xmin = -Inf,
xmax = Inf,
ymin = 0,
ymax = Inf,
fill = "#0C2340",
alpha = 0.12
) +
# Zero line
geom_hline(
yintercept = 0,
linetype = "dashed",
color = "black"
) +
# Confidence intervals
geom_errorbar(
aes(ymin = lower.CL, ymax = upper.CL),
width = 0.15,
position = position_dodge(width = 0.25),
linewidth = 0.8
) +
# Point estimates
geom_point(
size = 4,
position = position_dodge(width = 0.25)
) +
# Significance symbols
geom_text(
aes(
y = upper.CL + 0.05,
label = significance
),
position = position_dodge(width = 0.25),
size = 8,
fontface = "bold",
show.legend = FALSE
) +
# Region labels
annotate(
"label",
x = 4.6,
y = 0.72,
label = "Energetic Rescue",
hjust = 0,
color = "#0C2340",
fill = "white",
fontface = "bold",
size = 6,
label.size = 0.5,
label.padding = grid::unit(0.15, "lines")
) +
annotate(
"label",
x = 4.6,
y = -0.46,
label = "Energetic Trade-off",
hjust = 0,
color = "#E87722",
fill = "white",
fontface = "bold",
size = 6,
label.size = 0.5,
label.padding = grid::unit(0.15, "lines")
) +
scale_color_manual(
values = c(
"IGF1" = "#E87722",
"IGF2" = "#0C2340",
"No_IGF" = "grey40"
),
labels = c(
"IGF1" = "IGF1",
"IGF2" = "IGF2",
"No_IGF" = "None"
)
) +
labs(
title = "IGF2 Progressively Reduces the Constraint on Regeneration",
subtitle = "Change in regeneration per 1% increase in weight loss",
x = "Week",
y = "Slope of Regeneration vs. Weight Loss",
color = "Supplementation"
) +
theme_classic(base_size = 12) +
theme(
axis.title = element_text(face = "bold"),
axis.text = element_text(face = "bold"),
plot.title = element_text(face = "bold"),
plot.subtitle = element_text(face = "bold"),
legend.position = "bottom",
legend.title = element_text(face = "bold")
)
plot_rescue

ggsave(
filename = "IGF2_energetic_rescue_figure.png",
plot = plot_rescue,
width = 7,
height = 5,
dpi = 600
)
8. Additional and Sensitivity Analyses
8.1 Administered hormone dose
igf_data <- data %>%
filter(Treatment %in% c("DR.IGF1", "DR.IGF2")) %>%
mutate(
IGF_type = factor(
Treatment,
levels = c("DR.IGF1", "DR.IGF2")
)
) %>%
group_by(Animal_ID) %>%
fill(Dose, .direction = "downup") %>%
ungroup()
model_dose <- lmerTest::lmer(
Rate_Reg ~ Week * Dose * IGF_type +
Tail +
(1 | Animal_ID),
data = igf_data
)
summary(model_dose)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: Rate_Reg ~ Week * Dose * IGF_type + Tail + (1 | Animal_ID)
## Data: igf_data
##
## REML criterion at convergence: 964.4
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -1.3156 -0.6620 -0.1643 0.4927 6.1166
##
## Random effects:
## Groups Name Variance Std.Dev.
## Animal_ID (Intercept) 0.000 0.000
## Residual 7.389 2.718
## Number of obs: 200, groups: Animal_ID, 33
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) -0.34343 6.62219 191.00000 -0.052 0.959
## Week 0.37140 1.17613 191.00000 0.316 0.753
## Dose 2.27038 2.74356 191.00000 0.828 0.409
## IGF_typeDR.IGF2 4.14492 7.97901 191.00000 0.519 0.604
## Tail -0.01755 0.03851 191.00000 -0.456 0.649
## Week:Dose -0.23512 0.54290 191.00000 -0.433 0.665
## Week:IGF_typeDR.IGF2 -0.78700 1.57735 191.00000 -0.499 0.618
## Dose:IGF_typeDR.IGF2 -1.96201 3.65967 191.00000 -0.536 0.593
## Week:Dose:IGF_typeDR.IGF2 0.38027 0.72186 191.00000 0.527 0.599
##
## Correlation of Fixed Effects:
## (Intr) Week Dose IGF_DR Tail Wek:Ds W:IGF_ D:IGF_
## Week -0.810
## Dose -0.884 0.911
## IGF_DR.IGF2 -0.644 0.684 0.738
## Tail -0.445 -0.029 -0.010 -0.049
## Week:Dose 0.807 -0.993 -0.920 -0.680 0.023
## W:IGF_DR.IG 0.606 -0.745 -0.679 -0.923 0.016 0.740
## D:IGF_DR.IG 0.645 -0.684 -0.750 -0.992 0.047 0.690 0.914
## W:D:IGF_DR. -0.609 0.746 0.692 0.916 -0.013 -0.752 -0.992 -0.923
## optimizer (nloptwrap) convergence code: 0 (OK)
## boundary (singular) fit: see help('isSingular')
anova(model_dose)
## Type III Analysis of Variance Table with Satterthwaite's method
## Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
## Week 0.0058 0.0058 1 191 0.0008 0.9777
## Dose 3.6730 3.6730 1 191 0.4971 0.4816
## IGF_type 1.9939 1.9939 1 191 0.2699 0.6040
## Tail 1.5350 1.5350 1 191 0.2077 0.6491
## Week:Dose 0.1147 0.1147 1 191 0.0155 0.9010
## Week:IGF_type 1.8394 1.8394 1 191 0.2489 0.6184
## Dose:IGF_type 2.1237 2.1237 1 191 0.2874 0.5925
## Week:Dose:IGF_type 2.0505 2.0505 1 191 0.2775 0.5989
Interpretation: Modest individual variation in
administered dose did not detectably influence regeneration rate or
explain the different responses to IGF1 and IGF2.
model.rescue2 <- lmer(
Perc.Regeneration ~ Week * Perc.WeightLoss * IGF_type + Tail +
(1 | Animal_ID),
data = data,
REML = FALSE
)
model.rescue.dose <- lmer(
Perc.Regeneration ~ Week * Perc.WeightLoss * IGF_type + Tail + Dose +
(1 | Animal_ID),
data = data,
REML = FALSE
)
AIC(model.rescue2, model.rescue.dose)
## df AIC
## model.rescue2 15 2715.726
## model.rescue.dose 16 2717.558
Result: Adding IGF dose as an additional covariate
did not improve model fit (ΔAIC = 1.91), indicating that variation in
administered dose did not explain additional variation in regeneration
beyond treatment identity.
8.2 Endpoint covariance between energetic state and
regeneration
final_regeneration_data <- data %>%
group_by(Animal_ID) %>%
summarise(
final_regeneration = max(Regeneration, na.rm = TRUE),
weight_loss = first(Perc.WeightLoss),
Treatment = first(Treatment),
.groups = "drop"
)
cor.test(
final_regeneration_data$weight_loss,
final_regeneration_data$final_regeneration
)
##
## Pearson's product-moment correlation
##
## data: final_regeneration_data$weight_loss and final_regeneration_data$final_regeneration
## t = 0.56258, df = 61, p-value = 0.5758
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.1791079 0.3140206
## sample estimates:
## cor
## 0.0718454
model_endpoint_tradeoff <- lm(
final_regeneration ~ weight_loss * Treatment,
data = final_regeneration_data
)
summary(model_endpoint_tradeoff)
##
## Call:
## lm(formula = final_regeneration ~ weight_loss * Treatment, data = final_regeneration_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -13.0612 -3.8851 -0.1858 3.8499 13.4936
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 17.65763 3.43266 5.144 3.7e-06 ***
## weight_loss 0.03591 0.21771 0.165 0.870
## TreatmentDR -5.52370 4.36111 -1.267 0.211
## TreatmentDR.IGF1 1.13593 5.18537 0.219 0.827
## TreatmentDR.IGF2 -9.61449 6.61079 -1.454 0.152
## weight_loss:TreatmentDR 0.14270 0.24926 0.572 0.569
## weight_loss:TreatmentDR.IGF1 -0.36936 0.28830 -1.281 0.206
## weight_loss:TreatmentDR.IGF2 0.38573 0.33340 1.157 0.252
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6.379 on 55 degrees of freedom
## (13 observations deleted due to missingness)
## Multiple R-squared: 0.2204, Adjusted R-squared: 0.1212
## F-statistic: 2.222 on 7 and 55 DF, p-value: 0.04612
anova(model_endpoint_tradeoff)
## Analysis of Variance Table
##
## Response: final_regeneration
## Df Sum Sq Mean Sq F value Pr(>F)
## weight_loss 1 14.82 14.821 0.3642 0.54868
## Treatment 3 320.43 106.809 2.6245 0.05954 .
## weight_loss:Treatment 3 297.71 99.238 2.4385 0.07418 .
## Residuals 55 2238.30 40.696
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
This endpoint analysis is retained because it demonstrates that the
longitudinal mixed-effects model is more sensitive to changes in
regenerative dynamics than a single final-time-point comparison.
8.4 Final percent body-mass loss among treatment groups
final_weight_loss <- data %>%
ungroup() %>%
group_by(Animal_ID) %>%
summarise(
final_weight_loss = max(Perc.WeightLoss, na.rm = TRUE),
Treatment = first(na.omit(Treatment)),
.groups = "drop"
) %>%
filter(
!is.na(final_weight_loss),
is.finite(final_weight_loss),
!is.na(Treatment)
) %>%
mutate(
Treatment = droplevels(as.factor(Treatment))
)
model_final_weight_loss <- lm(
final_weight_loss ~ Treatment,
data = final_weight_loss
)
anova(model_final_weight_loss)
## Analysis of Variance Table
##
## Response: final_weight_loss
## Df Sum Sq Mean Sq F value Pr(>F)
## Treatment 3 602.9 200.972 2.953 0.03951 *
## Residuals 61 4151.5 68.057
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
final_weight_loss_emmeans <- emmeans(
model_final_weight_loss,
pairwise ~ Treatment,
adjust = "tukey"
)
final_weight_loss_emmeans
## $emmeans
## Treatment emmean SE df lower.CL upper.CL
## AdLib 17.9 1.94 61 14.0 21.7
## DR 25.6 2.29 61 21.0 30.2
## DR.IGF1 23.1 2.00 61 19.1 27.1
## DR.IGF2 24.7 2.00 61 20.7 28.7
##
## Confidence level used: 0.95
##
## $contrasts
## contrast estimate SE df t.ratio p.value
## AdLib - DR -7.765 3.00 61 -2.586 0.0571
## AdLib - DR.IGF1 -5.257 2.79 61 -1.884 0.2456
## AdLib - DR.IGF2 -6.841 2.79 61 -2.452 0.0781
## DR - DR.IGF1 2.508 3.04 61 0.825 0.8423
## DR - DR.IGF2 0.924 3.04 61 0.304 0.9901
## DR.IGF1 - DR.IGF2 -1.584 2.83 61 -0.560 0.9435
##
## P value adjustment: tukey method for comparing a family of 4 estimates
Manuscript interpretation: Final percent body-mass
loss did not differ among the three diet-restricted groups (p >
0.65), supporting the conclusion that the IGF2 rescue effect was not
explained by reduced energetic deficit.
ggplot(
final_weight_loss,
aes(
x = Treatment,
y = final_weight_loss,
fill = Treatment
)
) +
geom_violin(alpha = 0.3, trim = FALSE) +
geom_jitter(width = 0.1, alpha = 0.7, size = 2) +
stat_summary(
fun = mean,
geom = "point",
size = 4,
color = "black"
) +
stat_summary(
fun.data = mean_cl_normal,
geom = "errorbar",
width = 0.15,
color = "black"
) +
scale_fill_manual(values = treatment_colors) +
labs(
x = "Treatment",
y = "Final percent body-mass loss"
) +
theme_classic() +
theme(legend.position = "none")

9. Evaluation of Weeks 5–8
9.1 Visual inspection of individual regeneration trajectories
regeneration_raw <- read.csv(
"R.analysis.currated.csv",
stringsAsFactors = FALSE
)
regeneration_after_week_2 <- regeneration_raw %>%
filter(Week > 2)
plot_length_loss_all <- ggplot(
regeneration_raw,
aes(
x = Week,
y = Regeneration,
color = Animal_ID,
group = Animal_ID
)
) +
geom_line() +
geom_text(
aes(label = Animal_ID),
hjust = 0,
vjust = 0,
size = 2
) +
facet_wrap(
~Treatment,
scales = "free",
ncol = 2
) +
theme(legend.position = "none")
plot_length_loss_late <- ggplot(
regeneration_after_week_2,
aes(
x = Week,
y = Regeneration,
color = Animal_ID,
group = Animal_ID
)
) +
geom_line() +
geom_text(
aes(label = Animal_ID),
hjust = 0,
vjust = 0,
size = 2
) +
facet_wrap(
~Treatment,
scales = "free",
ncol = 2
) +
theme(legend.position = "none")
plot_length_loss_all

plot_length_loss_late

ggsave(
filename = "length_loss.png",
plot = plot_length_loss_all,
width = 8,
height = 8,
dpi = 600
)
ggsave(
filename = "length_loss_sub.png",
plot = plot_length_loss_late,
width = 8,
height = 8,
dpi = 600
)
9.2 Early-only versus full eight-week model
model_early <- lmerTest::lmer(
Perc.Regeneration ~
Week * Perc.WeightLoss * IGF_type +
Tail +
(1 | Animal_ID),
data = data %>%
filter(Week <= 4)
)
model_full <- lmerTest::lmer(
Perc.Regeneration ~
Week * Perc.WeightLoss * IGF_type +
Tail +
(1 | Animal_ID),
data = data
)
summary(model_early)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: Perc.Regeneration ~ Week * Perc.WeightLoss * IGF_type + Tail +
## (1 | Animal_ID)
## Data: data %>% filter(Week <= 4)
##
## REML criterion at convergence: 1398.1
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.3603 -0.6766 0.0364 0.5755 3.6846
##
## Random effects:
## Groups Name Variance Std.Dev.
## Animal_ID (Intercept) 2.109 1.452
## Residual 13.084 3.617
## Number of obs: 250, groups: Animal_ID, 65
##
## Fixed effects:
## Estimate Std. Error df t value
## (Intercept) -1.03249 3.28353 88.26216 -0.314
## Week 6.51706 0.61407 214.47589 10.613
## Perc.WeightLoss 0.13154 0.07686 203.94379 1.711
## IGF_typeIGF1 5.00021 3.16573 232.96815 1.579
## IGF_typeIGF2 2.41231 4.08500 229.06414 0.591
## Tail -0.12144 0.04048 63.90994 -3.000
## Week:Perc.WeightLoss -0.04154 0.03320 216.92163 -1.251
## Week:IGF_typeIGF1 -2.72621 1.30759 221.65810 -2.085
## Week:IGF_typeIGF2 -2.28603 1.51661 194.62876 -1.507
## Perc.WeightLoss:IGF_typeIGF1 -0.17276 0.16381 230.81261 -1.055
## Perc.WeightLoss:IGF_typeIGF2 -0.04365 0.19071 228.74930 -0.229
## Week:Perc.WeightLoss:IGF_typeIGF1 0.08865 0.07167 232.22843 1.237
## Week:Perc.WeightLoss:IGF_typeIGF2 0.06108 0.07022 197.01077 0.870
## Pr(>|t|)
## (Intercept) 0.75393
## Week < 2e-16 ***
## Perc.WeightLoss 0.08852 .
## IGF_typeIGF1 0.11558
## IGF_typeIGF2 0.55542
## Tail 0.00385 **
## Week:Perc.WeightLoss 0.21227
## Week:IGF_typeIGF1 0.03822 *
## Week:IGF_typeIGF2 0.13335
## Perc.WeightLoss:IGF_typeIGF1 0.29270
## Perc.WeightLoss:IGF_typeIGF2 0.81917
## Week:Perc.WeightLoss:IGF_typeIGF1 0.21739
## Week:Perc.WeightLoss:IGF_typeIGF2 0.38547
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(model_full)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: Perc.Regeneration ~ Week * Perc.WeightLoss * IGF_type + Tail +
## (1 | Animal_ID)
## Data: data
##
## REML criterion at convergence: 2717.5
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.05240 -0.58328 0.07647 0.53288 3.14152
##
## Random effects:
## Groups Name Variance Std.Dev.
## Animal_ID (Intercept) 15.52 3.940
## Residual 19.87 4.457
## Number of obs: 443, groups: Animal_ID, 65
##
## Fixed effects:
## Estimate Std. Error df t value
## (Intercept) 8.95632 5.37444 66.82767 1.666
## Week 5.57153 0.22507 390.98913 24.755
## Perc.WeightLoss 0.16173 0.06336 418.47176 2.553
## IGF_typeIGF1 6.23221 2.90106 308.60824 2.148
## IGF_typeIGF2 4.86116 3.88987 361.49614 1.250
## Tail -0.22402 0.07251 66.89851 -3.090
## Week:Perc.WeightLoss -0.05150 0.01184 388.69919 -4.350
## Week:IGF_typeIGF1 -1.60695 0.50288 411.98772 -3.196
## Week:IGF_typeIGF2 -2.61979 0.61694 399.53649 -4.246
## Perc.WeightLoss:IGF_typeIGF1 -0.25717 0.14183 423.73347 -1.813
## Perc.WeightLoss:IGF_typeIGF2 -0.23525 0.17665 422.61347 -1.332
## Week:Perc.WeightLoss:IGF_typeIGF1 0.03935 0.02919 424.77894 1.348
## Week:Perc.WeightLoss:IGF_typeIGF2 0.11330 0.02987 393.97138 3.793
## Pr(>|t|)
## (Intercept) 0.100302
## Week < 2e-16 ***
## Perc.WeightLoss 0.011041 *
## IGF_typeIGF1 0.032472 *
## IGF_typeIGF2 0.212219
## Tail 0.002919 **
## Week:Perc.WeightLoss 1.74e-05 ***
## Week:IGF_typeIGF1 0.001503 **
## Week:IGF_typeIGF2 2.70e-05 ***
## Perc.WeightLoss:IGF_typeIGF1 0.070503 .
## Perc.WeightLoss:IGF_typeIGF2 0.183676
## Week:Perc.WeightLoss:IGF_typeIGF1 0.178340
## Week:Perc.WeightLoss:IGF_typeIGF2 0.000172 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Reported comparison:
- Weeks 1–4: IGF2 interaction \(\beta=0.088\), \(p=0.213\)
- Weeks 1–8: IGF2 interaction \(\beta=0.114\), \(p=0.000138\)
9.3 Within-individual repeatability
icc(model_full)
## # Intraclass Correlation Coefficient
##
## Adjusted ICC: 0.439
## Unadjusted ICC: 0.114
Reported result: Adjusted ICC approximately 0.47,
indicating moderate within-individual repeatability across the full
eight-week dataset.
9.4 Residual variation across weeks
full_model_residual_data <- model.frame(model_full) %>%
mutate(
residual = residuals(model_full),
absolute_residual = abs(residual)
)
model_absolute_residuals <- lm(
absolute_residual ~ factor(Week),
data = full_model_residual_data
)
anova(model_absolute_residuals)
## Analysis of Variance Table
##
## Response: absolute_residual
## Df Sum Sq Mean Sq F value Pr(>F)
## factor(Week) 7 279.36 39.909 6.1601 6.937e-07 ***
## Residuals 435 2818.18 6.479
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
9.5 Late-stage bootstrap
late_data <- data %>%
filter(Week >= 5)
model_late <- lmerTest::lmer(
Perc.Regeneration ~
Week * Perc.WeightLoss * IGF_type +
Tail +
(1 | Animal_ID),
data = late_data
)
late_boot_function <- function(fit) {
fixef(fit)["Week:Perc.WeightLoss:IGF_typeIGF2"]
}
bootstrap_late <- bootMer(
model_late,
FUN = late_boot_function,
nsim = 1000
)
late_bootstrap_interval <- quantile(
bootstrap_late$t,
c(0.025, 0.5, 0.975),
na.rm = TRUE
)
late_bootstrap_interval
## 2.5% 50% 97.5%
## 0.06210499 0.15405441 0.24375908
Reported result: Bootstrap resampling of the
late-stage regeneration data confirmed that the IGF2 rescue effect was
both positive and highly reproducible. The median estimated rescue
coefficient was 0.153 (95% bootstrap CI = 0.069–0.244), with the
confidence interval remaining entirely above zero, indicating that the
attenuation of the energetic trade-off by IGF2 was robust to repeated
resampling of the data.
10. Evaluation of Original Tail Length as a Covariate
Models are fitted with maximum likelihood for valid AIC
comparison.
model_rescue_without_tail <- lmerTest::lmer(
Perc.Regeneration ~
Week * Perc.WeightLoss * IGF_type +
(1 | Animal_ID),
data = data,
REML = FALSE
)
model_rescue_with_tail <- lmerTest::lmer(
Perc.Regeneration ~
Week * Perc.WeightLoss * IGF_type +
Tail +
(1 | Animal_ID),
data = data,
REML = FALSE
)
AIC(
model_rescue_without_tail,
model_rescue_with_tail
)
## df AIC
## model_rescue_without_tail 14 2723.345
## model_rescue_with_tail 15 2715.726
summary(model_rescue_with_tail)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
## method [lmerModLmerTest]
## Formula: Perc.Regeneration ~ Week * Perc.WeightLoss * IGF_type + Tail +
## (1 | Animal_ID)
## Data: data
##
## AIC BIC logLik -2*log(L) df.resid
## 2715.7 2777.1 -1342.9 2685.7 428
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.0681 -0.5929 0.0779 0.5390 3.1805
##
## Random effects:
## Groups Name Variance Std.Dev.
## Animal_ID (Intercept) 14.17 3.764
## Residual 19.44 4.409
## Number of obs: 443, groups: Animal_ID, 65
##
## Fixed effects:
## Estimate Std. Error df t value
## (Intercept) 8.95617 5.17142 72.03898 1.732
## Week 5.57428 0.22248 400.21150 25.056
## Perc.WeightLoss 0.16235 0.06253 429.96459 2.596
## IGF_typeIGF1 6.18235 2.84050 331.02945 2.177
## IGF_typeIGF2 4.88263 3.81574 378.73719 1.280
## Tail -0.22414 0.06977 72.01932 -3.213
## Week:Perc.WeightLoss -0.05169 0.01170 397.72469 -4.417
## Week:IGF_typeIGF1 -1.60184 0.49654 422.19869 -3.226
## Week:IGF_typeIGF2 -2.62240 0.60958 409.23308 -4.302
## Perc.WeightLoss:IGF_typeIGF1 -0.25435 0.13957 438.29668 -1.822
## Perc.WeightLoss:IGF_typeIGF2 -0.23644 0.17381 436.11440 -1.360
## Week:Perc.WeightLoss:IGF_typeIGF1 0.03902 0.02879 436.27083 1.355
## Week:Perc.WeightLoss:IGF_typeIGF2 0.11350 0.02952 403.28248 3.844
## Pr(>|t|)
## (Intercept) 0.08758 .
## Week < 2e-16 ***
## Perc.WeightLoss 0.00974 **
## IGF_typeIGF1 0.03022 *
## IGF_typeIGF2 0.20147
## Tail 0.00197 **
## Week:Perc.WeightLoss 1.29e-05 ***
## Week:IGF_typeIGF1 0.00135 **
## Week:IGF_typeIGF2 2.12e-05 ***
## Perc.WeightLoss:IGF_typeIGF1 0.06908 .
## Perc.WeightLoss:IGF_typeIGF2 0.17443
## Week:Perc.WeightLoss:IGF_typeIGF1 0.17609
## Week:Perc.WeightLoss:IGF_typeIGF2 0.00014 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(model_rescue_with_tail)
## Type III Analysis of Variance Table with Satterthwaite's method
## Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
## Week 5341.3 5341.3 1 415.87 274.7259 < 2.2e-16
## Perc.WeightLoss 0.0 0.0 1 433.80 0.0003 0.9860797
## IGF_type 108.4 54.2 2 356.60 2.7887 0.0628429
## Tail 200.7 200.7 1 72.02 10.3213 0.0019675
## Week:Perc.WeightLoss 0.1 0.1 1 424.05 0.0042 0.9484235
## Week:IGF_type 487.0 243.5 2 415.99 12.5230 5.233e-06
## Perc.WeightLoss:IGF_type 87.2 43.6 2 436.27 2.2438 0.1072814
## Week:Perc.WeightLoss:IGF_type 298.2 149.1 2 422.81 7.6681 0.0005355
##
## Week ***
## Perc.WeightLoss
## IGF_type .
## Tail **
## Week:Perc.WeightLoss
## Week:IGF_type ***
## Perc.WeightLoss:IGF_type
## Week:Perc.WeightLoss:IGF_type ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Reported result: Inclusion of original tail length
improved model fit by \(\Delta
AIC=6.9\), so Tail was retained as an additive covariate in the
primary rescue model.
11. Publication Figures
11.1 Figure 1: dietary restriction and the energetic trade-off
figure1_weight_data <- diet_final_acclimation %>%
mutate(
Diet_display = case_when(
Treatment == "AdLib" ~ "High",
Treatment %in% c("DR", "DR.IGF1", "DR.IGF2") ~ "Low",
TRUE ~ NA_character_
),
Diet_display = factor(
Diet_display,
levels = c("High", "Low")
)
)
figure1_regeneration_data <- data %>%
mutate(
Diet_display = case_when(
Treatment == "AdLib" ~ "High",
Treatment %in% c("DR", "DR.IGF1", "DR.IGF2") ~ "Low",
TRUE ~ NA_character_
),
Diet_display = factor(
Diet_display,
levels = c("High", "Low")
)
)
panel_1a <- ggplot(
figure1_weight_data,
aes(x = Diet_display, y = Perc_Orig)
) +
geom_violin(
fill = "grey75",
color = "black",
trim = FALSE,
scale = "width",
alpha = 0.8
) +
geom_boxplot(
width = 0.12,
outlier.shape = NA,
fill = "white",
color = "black"
) +
geom_jitter(
width = 0.08,
size = 1.8,
shape = 21,
fill = "white",
color = "black",
alpha = 0.8
) +
labs(
title = "Dietary restriction increased weight loss",
x = "Diet",
y = "Percent of original body mass"
) +
theme_classic(base_size = 12) +
theme(
plot.title = element_text(face = "bold"),
axis.title = element_text(face = "bold"),
axis.text = element_text(face = "bold")
)
panel_1b <- ggplot(
figure1_regeneration_data,
aes(
x = Week,
y = Perc.Regeneration,
shape = Diet_display,
linetype = Diet_display,
group = Diet_display
)
) +
stat_summary(
fun = mean,
geom = "line",
linewidth = 1.2,
color = "black"
) +
stat_summary(
fun = mean,
geom = "point",
size = 3,
color = "black"
) +
stat_summary(
fun.data = mean_se,
geom = "errorbar",
width = 0.15,
color = "black"
) +
scale_shape_manual(
values = c("High" = 16, "Low" = 17)
) +
scale_linetype_manual(
values = c("High" = "solid", "Low" = "dashed")
) +
labs(
title = "Dietary restriction reduced regeneration",
x = "Week",
y = "Percent regeneration",
shape = "Diet",
linetype = "Diet"
) +
theme_classic(base_size = 12) +
theme(
plot.title = element_text(face = "bold"),
axis.title = element_text(face = "bold"),
axis.text = element_text(face = "bold"),
legend.position = "bottom"
)
tradeoff_no_igf <- data %>%
filter(IGF_type == "No_IGF")
model_tradeoff_no_igf <- lmerTest::lmer(
Perc.Regeneration ~
Week * Perc.WeightLoss +
(1 | Animal_ID),
data = tradeoff_no_igf
)
tradeoff_slopes <- emtrends(
model_tradeoff_no_igf,
~ 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 ~ ""
)
)
panel_1c <- ggplot(
tradeoff_slopes_df,
aes(
x = Week,
y = Perc.WeightLoss.trend
)
) +
geom_hline(
yintercept = 0,
linetype = "dashed",
color = "black",
linewidth = 0.7
) +
geom_errorbar(
aes(ymin = lower.CL, ymax = upper.CL),
width = 0.18,
linewidth = 0.8,
color = "grey30"
) +
geom_point(
size = 4.5,
color = "grey30"
) +
geom_text(
aes(
y = lower.CL - 0.035,
label = sig_zero
),
size = 5,
fontface = "bold",
color = "grey30"
) +
scale_x_continuous(
breaks = c(2, 4, 6, 8)
) +
scale_y_continuous(
breaks = seq(-0.4, 0.1, by = 0.1),
limits = c(-0.43, 0.15),
labels = scales::number_format(accuracy = 0.1),
expand = expansion(mult = c(0.04, 0.05))
) +
labs(
title = "Energetic trade-off strengthened over time",
subtitle = "Change in regeneration per 1% increase in weight loss",
x = "Week",
y = "Slope of Regeneration\nvs. Weight Loss"
) +
theme_classic(base_size = 14) +
theme(
plot.title = element_text(face = "bold", size = 14),
plot.subtitle = element_text(face = "bold", size = 12),
axis.title = element_text(face = "bold", size = 13),
axis.text = element_text(face = "bold", size = 12),
axis.title.y = element_text(margin = margin(r = 10))
)
figure_1 <- (panel_1a + panel_1b) / panel_1c +
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)
)
figure_1

ggsave(
filename = "dietary_restriction_tradeoff_multiplot.png",
plot = figure_1,
width = 10,
height = 7,
dpi = 600
)