–metadata title=“Euglena” title: “Euglena Population Growth Lab - Part 3” author: “Jeffrey Chun” date: March 2026 output: html_document: toc: true # table of contents toc_float: true # floating TOC number_sections: true theme: bootstrap highlight: tango # Data setup 2. Generate linear models [“lm()”] for each subsetted data frames that describe how E. gracilis cell density changes linearly with time. For each of those linear models, please report in the table below what the intercept estimate, slope estimate, and r2 value was for each of the subsetted data frames.
# Load packages
install.packages("growthrates")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
library(growthrates)
## Loading required package: lattice
## Loading required package: deSolve
# --- Data Entry ---
Time.trial <- rep(c(0,7,14,21,28), each=6)
Treatment.trial <- rep(c("Caffeine","Control","Caffeine","Control","Caffeine","Control"), times=5)
cell.location.trial <- rep(c("A","B","C","D","E","F"), times=5)
Cells_per_mL.trial <- c(
8750, 7500, 8750, 7500, 11250, 122500,
135000, 77500, 31250, 67500, 70000, 40000,
25000, 20000, 26250, 145000, 45000, 20000,
88750, 15000, 27500, 46250, 62500, 155000,
102500, 135000, 72500, 73750, 48750, 35000
)
# Compile into data frame
euglena.trial <- data.frame(Time.trial, cell.location.trial, Treatment.trial, Cells_per_mL.trial)
euglena.trial$Treatment.trial <- as.factor(euglena.trial$Treatment.trial)
euglena.trial$cell.location.trial <- as.factor(euglena.trial$cell.location.trial)
# Subset by treatment
Trt1.trial <- subset(euglena.trial, Treatment.trial=="Control")
Trt2.trial <- subset(euglena.trial, Treatment.trial=="Caffeine")
# --- Linear Models ---
linear.trt1 <- lm(Cells_per_mL.trial ~ Time.trial, data=Trt1.trial)
linear.trt2 <- lm(Cells_per_mL.trial ~ Time.trial, data=Trt2.trial)
# Coefficients
summary(linear.trt1)$coefficients
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 48250.000 23533.99 2.050226 0.06107174
## Time.trial 1160.714 1372.53 0.845675 0.41302937
summary(linear.trt1)$r.squared
## [1] 0.05214419
summary(linear.trt2)$coefficients
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 28750.000 15603.5622 1.842528 0.08831541
## Time.trial 1583.333 910.0182 1.739892 0.10548142
summary(linear.trt2)$r.squared
## [1] 0.1888801
# --- Spline Fits ---
fit.trt1 <- fit_spline(Trt1.trial$Time.trial, Trt1.trial$Cells_per_mL.trial)
fit.trt2 <- fit_spline(Trt2.trial$Time.trial, Trt2.trial$Cells_per_mL.trial)
plot(fit.trt1, log="y")
plot(fit.trt2, log="y")
coef(fit.trt1) # y0 and mumax for Control
## y0 mumax
## 2.661693e+04 3.419537e-02
coef(fit.trt2) # y0 and mumax for Caffeine
## y0 mumax
## 9878.5240329 0.3595798
# --- Exponential Model Fits ---
p.exp.trt1 <- coef(fit.trt1)
fit.trt1.exp <- fit_growthmodel(grow_exponential, p=p.exp.trt1,
time=Trt1.trial$Time.trial,
y=Trt1.trial$Cells_per_mL.trial)
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
fit.trt1.exp@rsquared
## [1] 0.05168391
p.exp.trt2 <- coef(fit.trt2)
fit.trt2.exp <- fit_growthmodel(grow_exponential, p=p.exp.trt2,
time=Trt2.trial$Time.trial,
y=Trt2.trial$Cells_per_mL.trial)
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
fit.trt2.exp@rsquared
## [1] 0.1771526
# --- Logistic Model Fits ---
p.logistic.trt1 <- c(p.exp.trt1, K=max(Trt1.trial$Cells_per_mL.trial))
fit.trt1.log <- fit_growthmodel(grow_logistic, p=p.logistic.trt1,
time=Trt1.trial$Time.trial,
y=Trt1.trial$Cells_per_mL.trial,
lower=c(y0=0,mumax=-3,K=0),
upper=c(y0=max(Trt1.trial$Cells_per_mL.trial),
mumax=3,K=10*max(Trt1.trial$Cells_per_mL.trial)),
method="Marq")
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
fit.trt1.log@rsquared
## [1] 0.05203134
summary(fit.trt1.log)
##
## Parameters:
## Estimate Std. Error t value Pr(>|t|)
## y0 4.817e+04 2.915e+04 1.652 0.124
## mumax 4.038e-02 3.125e-01 0.129 0.899
## K 1.181e+05 7.191e+05 0.164 0.872
##
## Residual standard error: 54780 on 12 degrees of freedom
##
## Parameter correlation:
## y0 mumax K
## y0 1.0000 -0.6518 0.5461
## mumax -0.6518 1.0000 -0.9860
## K 0.5461 -0.9860 1.0000
p.logistic.trt2 <- c(p.exp.trt2, K=max(Trt2.trial$Cells_per_mL.trial))
fit.trt2.log <- fit_growthmodel(grow_logistic, p=p.logistic.trt2,
time=Trt2.trial$Time.trial,
y=Trt2.trial$Cells_per_mL.trial,
lower=c(y0=0,mumax=-3,K=0),
upper=c(y0=max(Trt2.trial$Cells_per_mL.trial),
mumax=3,K=10*max(Trt2.trial$Cells_per_mL.trial)),
method="Marq")
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
Table of Linear model parameters. Fill in this table with the slope estimates, y-intercept estimates, and R2 values for both of your subsetted models.
| Factor Level: | Factor Level: | |
| Intercept | ||
| Line Slope | ||
| r2 |
In two to three sentences, reflect on the relationship between the calculated values. Do the Intercept or Line Slope estimates differ a lot from each other or are they pretty similar? What does the r2 value tell us about how well each of the linear models fits our Euglena population change?
Answer Here:
Using the fit_spline() function in the library(growthrates), fit a smoothed spline to each of your subsetted dataframes, remembering to specify that you want time as your x value and cell density as your y values. In the table below please paste the plot of your fitted spline for each factor level and the coefficients (y0 and mumax) that you calculate from your spline.
fit.trt2.log@rsquared
## [1] 0.3283646
summary(fit.trt2.log)
##
## Parameters:
## Estimate Std. Error t value Pr(>|t|)
## y0 9.583e+03 1.908e+04 0.502 0.624547
## mumax 2.883e+00 5.456e+06 0.000 1.000000
## K 6.125e+04 1.102e+04 5.560 0.000124 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 33050 on 12 degrees of freedom
##
## Parameter correlation:
## y0 mumax K
## y0 1.000e+00 -6.575e-08 1.315e-07
## mumax -6.575e-08 1.000e+00 -5.000e-01
## K 1.315e-07 -5.000e-01 1.000e+00
# --- Plot All Models ---
# Control
plot(Cells_per_mL.trial ~ Time.trial, data=Trt1.trial,
pch=21, cex=2, bg="magenta", col="blue",
xlab="Days", ylab="Euglena cells/mL", main="Control")
abline(linear.trt1, col="purple", lwd=3)
lines(fit.trt1.exp, col="darkgreen", lwd=3)
lines(fit.trt1.log, col="black", lwd=3)
legend("topright", legend=c("Linear","Exponential","Logistic"),
col=c("purple","darkgreen","black"), lty=1, lwd=3)
# Caffeine
plot(Cells_per_mL.trial ~ Time.trial, data=Trt2.trial,
pch=21, cex=2, bg="magenta", col="blue",
xlab="Days", ylab="Euglena cells/mL", main="Caffeine")
abline(linear.trt2, col="purple", lwd=3)
lines(fit.trt2.exp, col="darkgreen", lwd=3)
lines(fit.trt2.log, col="black", lwd=3)
legend("topright", legend=c("Linear","Exponential","Logistic"),
col=c("purple","darkgreen","black"), lty=1, lwd=3)