Using R to examine a Growth Curve and calculate Doubling Time

The doubling time of cells growing exponentially in liquid culture can be a useful phenotype to quantify. A plot of the log of the OD (optical density) versus time can be used to determine growth rate. The slope of the fit line is the growth rate: k and the doubling time is given by: log(2)/k. The following is an example using the R environment to plot and fit a growth curve and find doubling time.

Pichia pastoris was grown in liquid culture. Aliquots were taken at various times post-innoculation, and measured by OD600. When the aliquots surpassed the linear range of the spectrophotometer they were diluted before reading. Thus the input data file has 5 columns: time post-innoculation, minutes, dilution factor, OD reading, derived OD.

yeast_timecourse.txt

R_growth_curve_example.pdf (this example with figures)

1.) Read the data into R

# read the data into R from a tab-delimited text file
gdata <- read.table(file="yeast_timecourse.txt", sep="\t", header=T)

# what are the column names?
colnames(gdata)

2.) plot the derived OD600 readings as a function of time

# columns of interest are:
# minutes (2nd column) and dOD600 (5th column, derived OD600)
# examine a plot of OD versus time
plot(gdata[,2], gdata[,5])

# could also use column names to specify columns:
plot(gdata[,"minutes"], gdata[,"dOD600"])

# make the plot look nicer
plot(gdata[,2], gdata[,5], main="OD versus Time", xlab="minutes", ylab="OD600")

3.) Find the portion of the curve which is linear during exponential phase growth

(hint: plot log of OD versus time)

# since this is a growth curve, we want to plot the log
# of the OD
plot(gdata[,2], log(gdata[,5]), main="OD versus Time", xlab="minutes", ylab="log(OD600)")

# pick the part of the curve that looks linear
# maybe points 3 through 6?

4.) use the linear modeling function to to perform regression

The resulting slope can be used to find the yeast doubling time.

# use lm() to fit this part of the curve
# fit y as a function of x (or OD as a function of time)
# but only use the points of interest
lm(log(gdata[3:6,"dOD600"]) ~ gdata[3:6,"minutes"])

# save the linear fit to an object called "fit"
fit <- lm(log(gdata[3:6,"dOD600"]) ~ gdata[3:6,"minutes"])

# give the fit to the abline() function to draw a line on the plot
abline(fit)

# the fit object is kind of complicated
# it's got lots of stuff in it
names(fit)

# however the slope of the line can be found by looking
# at the second coefficient
fit$coef[2]

# use the slope to calculate the doubling time of the
# cells during their exponential growth phase
# the formula is log(2)/k where k is the growth rate (slope from the curve)
log(2)/fit$coef[2]

# write the doubling time on the curve
text(800,-2,"Doubling Time = 130 minutes")


R is available from CRAN

CategoryR CategoryRTutorial

R GrowthCurve (last edited 2007-05-02 16:31:16 by ChrisSeidel)