After reading some papers for mathematical models in thermal biology, I tested out a few equations: gaussian function, lactin 2 function, and the logan 6 function (Krenek et al., 2011) and got some solutions AND more questions! Below are the plot and AIC results:

AIC(lactin) = 126.6063
AIC(logan) = 112.1064
AIC(gaussian) = 110.6587
As you can see, visually the best fitting curve is the one produced by the Lactin 2 model, however, it has the highest AIC values and the peak occurred slightly later (25.5°C) than where I would like it to be (24°C). The Gaussian model has the best AIC value, but I don't know if it's peaking a little too early?
Which model should I pick given the shape of fitting and the AIC values?
If I should go for the Lactin 2 model, how can I change where the peak occurs?
My data:
https://drive.google.com/file/d/1yXhHGiOkx8r2SaXIUnaWDFutlTOy80fB/view
My codes:
#### Thermo-Models ####
library(minpack.lm)
gaussian <- nlsLM(etr ~ L*exp(-0.5*((tmp-tmpo)/sigma)^2), start=list(L = 10, sigma = 2, tmpo=16.5),
data=etr, trace=TRUE, control=nls.lm.control(maxiter=200))
AIC(gaussian)
logan <- nlsLM(etr ~ a*(1/(1+k*exp(-1*p*tmp)))-exp((-tmpm+tmp)/(24-tmpm)), start=list(a=15, k=20, p=0, tmpm=30),
data=etr, trace=TRUE, control=nls.lm.control(maxiter=100))
AIC(logan)
lactin <- nlsLM(etr ~ exp(-1*p*tmp) - exp(p*tmpm-(tmpm-tmp)/(tmpm-24)) + L, start=list(p=0, tmpm=30, L=1000),
data=etr, trace=TRUE, control=nls.lm.control(maxiter=100))
AIC(lactin)
#### Plot ####
library(ggplot2)
p_etr <- ggplot(etr, aes(x=tmp, y=etr)) +
geom_point(size=2) +
geom_smooth(aes(color="red"),
data = etr,
method = "nlsLM",
formula = y ~ L*exp(-0.5*((x-tmpo)/sigma)^2),
se = FALSE,
method.args = list(start=c(L = 10, sigma = 2, tmpo=16.5))) +
theme_bw() +
theme(plot.background = element_blank(),
panel.grid.major.y = element_blank(),
panel.grid.major.x = element_blank(),
panel.grid.minor.y = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title = element_text(size=16, colour="black"),
axis.text = element_text(size=10, colour="black"),
strip.text = element_text(size = 9, colour="white"),
strip.background = element_rect(size = 50)) +
ylab("Means") +
xlab("Temperature (°C)") +
scale_x_continuous(breaks = c(16.5, 18, 19.5, 21, 22.5, 24, 25.5, 27))
p_etr <- p_etr +
geom_smooth(aes(color="green"),
data = etr,
method = "nlsLM",
formula = y ~ a*(1/(1+k*exp(-1*p*x)))-exp((-tmpm+x)/(24-tmpm)),
se = FALSE,
method.args = list(start=c(a=15, k=20, p=0, tmpm=30)))
p_etr +
geom_smooth(aes(color="blue"),
data = etr,
method = "nlsLM",
formula = y ~ exp(-1*p*x) - exp(p*tmpm-(tmpm-x)/(tmpm-24)) + L,
se = FALSE,
method.args = list(start=c(p=1, tmpm=30, L=1000))) +
scale_color_manual(name="Models",
labels=c("Lactin 2","Logan 6","Gaussian"),
values=c("red","blue","green3"))