Title: | Functions to Fit Cell Volume Distributions and Thereby Estimate Cell Growth Rates and Division Times |
---|---|
Description: | Implements a methodology for using cell volume distributions to estimate cell growth rates and division times that is described in the paper entitled, "Cell Volume Distributions Reveal Cell Growth Rates and Division Times", by Michael Halter, John T. Elliott, Joseph B. Hubbard, Alessandro Tona and Anne L. Plant, which is in press in the Journal of Theoretical Biology. In order to reproduce the analysis used to obtain Table 1 in the paper, execute the command "example(fitVolDist)". |
Authors: | Katharine M. Mullen, Michael Halter, John Lu and Nathan Dodder |
Maintainer: | Katharine M. Mullen <[email protected]> |
License: | GPL (>= 2) |
Version: | 1.4 |
Built: | 2024-12-15 07:33:49 UTC |
Source: | CRAN |
This package implements a methodology for using cell volume
distributions to estimate cell growth rates and division times that is
described in the paper entitled "Cell Volume Distributions Reveal Cell
Growth Rates and Division Times", by Michael Halter, John T. Elliott,
Joseph B. Hubbard, Alessandro Tona and Anne L. Plant, which is in press
in the Journal of Theoretical Biology. In order to reproduce the
analysis used to obtain Table 1 in the paper, execute the command
example(fitVolDist).
The package fits a model for cell volume distributions under least squares criteria using the function nls.lm. Estimates for cell growth rate and division time are thereby obtained.
Halter M, Elliott JT, Hubbard JB, Tona A, Plant AL (2009), "Cell Volume Distributions Reveal Cell Growth Rates and Division Times", Journal of Theoretical Biology, Vol 257, pp 124 - 130, DOI: 10.1016/j.jtbi.2008.10.031.
Volume distribution data for A10 vSMC cell cultures with the DNA polymerase inhibitor aphidicolin added at 0nM, 50nM and 100nM concentration.
data(A10_vSMC_volume_data)
data(A10_vSMC_volume_data)
The data is formated as 12 numeric vectors of length 257 representing
cell volume () distributions, namely
"Aph0\_a",
"Aph0\_b",
"Aph0\_c",
"Aph0\_d",
"Aph50\_a",
"Aph50\_b",
"Aph50\_c",
"Aph50\_d",
"Aph100\_a",
"Aph100\_b",
"Aph100\_c", and
"Aph100\_d". The name of the object indicates the concentration of
aphidicolin present in nM (e.g., "Aph0\_a" represents measurements in the
presence of 0nM of aphidicolin). Four repetitions of measurements at
each of the three concentrations are included.
The estimated cell cycle time () for each volume
distribution
dataset is indicated in the numeric objects
"tAph0\_a",
"tAph0\_b",
"tAph0\_c",
"tAph0\_d",
"tAph50\_a",
"tAph50\_b",
"tAph50\_c",
"tAph50\_d", "tAph100\_a", "tAph100\_b", "tAph100\_c", and "tAph100\_d".
The object "volumes\_A10\_vSMC" is a numeric vector representing the volumes
() associated with all of the distributions.
The measurement protocol is described in the paper in the references.
Halter M, Elliott JT, Hubbard JB, Tona A, Plant AL (2009), "Cell Volume Distributions Reveal Cell Growth Rates and Division Times", Journal of Theoretical Biology, Vol 257, pp 124 - 130, DOI: 10.1016/j.jtbi.2008.10.031.
data(A10_vSMC_volume_data) plot(volumes_A10_vSMC, Aph100_b, main=expression(paste("Distribution of cell volumes (",mu, m^3,")",sep="")), type="b", pch=20, ylab="frequency", xlab=expression(paste("volume (",mu, m^3,")", sep="")))
data(A10_vSMC_volume_data) plot(volumes_A10_vSMC, Aph100_b, main=expression(paste("Distribution of cell volumes (",mu, m^3,")",sep="")), type="b", pch=20, ylab="frequency", xlab=expression(paste("volume (",mu, m^3,")", sep="")))
This is an implementation of a model for the distribution
of cell volumes that constitutes Equation 7 in the paper listed in the
references. It evaluates volEq7
at a vector of volume
() values.
fitFun(par, t = 29, sigma_t = .3*t, V = 1:100)
fitFun(par, t = 29, sigma_t = .3*t, V = 1:100)
par |
a list of parameter starting values, with elements |
t |
a numeric value representing the average cell cycle time ( |
sigma_t |
a numeric value representing the variability in the
average cell cycle time |
V |
a numeric value representing the (vector of) volumes ( |
A numeric vector representing a cell volume () distribution.
Halter M, Elliott JT, Hubbard JB, Tona A, Plant AL (2009), "Cell Volume Distributions Reveal Cell Growth Rates and Division Times", Journal of Theoretical Biology, Vol 257, pp 124 - 130, DOI: 10.1016/j.jtbi.2008.10.031.
This function fits a model for cell volume distribution
under least squares criteria; free model parameters are the cell
growth rate r
(), the variability in cell growth rate
sigma_r
() and a linear scaling factor
A
.
fitVolDist(vol, freq, r = 100, sigma_r = 44, t = 40, sigma_t = 0.3 * t, maxiter = 100, nprint = 1, alg="leastsq")
fitVolDist(vol, freq, r = 100, sigma_r = 44, t = 40, sigma_t = 0.3 * t, maxiter = 100, nprint = 1, alg="leastsq")
vol |
a vector of numeric values representing volumes ( |
freq |
a vector of numeric values with the same length as
|
r |
a numeric value that represents the starting value for the
rate ( |
sigma_r |
a numeric value that represents the starting value for
the variability in the rate of cell growth parameter |
t |
a numeric value representing the average cell cycle time ( |
sigma_t |
a numeric value representing the variability in the
average cell cycle time |
maxiter |
numeric value representing the maximum number of iterations used by nls.lm in model fitting under least squares criteria |
nprint |
optimization output is printed every |
alg |
character string indicating the algorithm to use; the
choices are now "leastsq", so that that sum square error
|
fitVolDist
returns
an object of class "fitVolDist"
.
The generic accessor functions coefficients
,
vcov
, deviance
, fitted
and residuals
extract
various useful features of the value returned by fitVolDist
.
An object of class "fitVolDist"
is a list containing the
following components:
t |
the value for |
sigma_t |
the value for |
fitted |
the model fit. |
fit.res |
the output object returned from nls.lm. |
summary.fit.res |
the summary of the output object returned from nls.lm. |
Halter M, Elliott JT, Hubbard JB, Tona A, Plant AL (2009), "Cell Volume Distributions Reveal Cell Growth Rates and Division Times", Journal of Theoretical Biology, Vol 257, pp 124 - 130, DOI: 10.1016/j.jtbi.2008.10.031.
## Not run: ############################################################# # Fit volume distribution data for A10 vSMC cell cultures # as described in the above referenced paper ############################################################# ## load the volume distributions in the "A10_vSMC_volume_data" dataset data("A10_vSMC_volume_data") labs <- c("a","b","c","d") ## the volume distributions representing 0 nM aphidicolin concentration Aph0 <- list(Aph0_a, Aph0_b, Aph0_c, Aph0_d) ## the associated cell cycle times tAph0 <- c(tAph0_a, tAph0_b, tAph0_c, tAph0_d) ## fit each dataset Aph0res <- list() Aph0tab <- matrix(ncol=2,nrow=4) for(i in 1:length(Aph0)) { Aph0res[[i]] <- fitVolDist(vol=volumes_A10_vSMC, freq=Aph0[[i]], r=100,sigma_r=44, t=tAph0[i]) Aph0tab[i,] <- coef(Aph0res[[i]]) } Aph0tab <- rbind(Aph0tab, colMeans(Aph0tab)) colnames(Aph0tab) <- c("r", "sigma_r") rownames(Aph0tab) <- c(labs, "mean values") ## plot results par(mfrow=c(3,2)) for(i in 1:length(Aph0)) { pe <- signif(coef(Aph0res[[i]]),3) plot(volumes_A10_vSMC, Aph0[[i]], type="l", main= substitute(paste( "r: ", p1, ", ", sigma[r],": ",p2), list(p1=pe[1], p2=pe[2])), xlab = expression(paste("volume (",mu, m^3,")", sep="")), sub=paste("vol. dist. Aphidicolin 0 nM", labs[i]), ylab="frequency") lines(volumes_A10_vSMC, fitted(Aph0res[[i]]), col=2) } textplot("(Above) Volume distribution data representing A10 vSMC cells cultured with 0 nM aphidicolin concentration (black) and model fit (red). (Right) Parameter estimates and mean estimates over the four fits",fixed.width=FALSE) textplot(signif(Aph0tab,3)) ## the volume distributions representing 50 nM aphidicolin concentration Aph50 <- list(Aph50_a, Aph50_b, Aph50_c, Aph50_d) ## the associated cell cycle times tAph50 <- c(tAph50_a, tAph50_b, tAph50_c, tAph50_d) ## fit each dataset Aph50res <- list() Aph50tab <- matrix(ncol=2,nrow=4) for(i in 1:length(Aph50)) { Aph50res[[i]] <- fitVolDist(vol=volumes_A10_vSMC, freq=Aph50[[i]], r=100,sigma_r=44, t=tAph50[i]) Aph50tab[i,] <- coef(Aph50res[[i]]) } Aph50tab <- rbind(Aph50tab, colMeans(Aph50tab)) colnames(Aph50tab) <- c("r", "sigma_r") rownames(Aph50tab) <- c(labs, "mean values") ## plot results par(mfrow=c(3,2)) for(i in 1:length(Aph50)) { pe <- signif(coef(Aph50res[[i]]),3) plot(volumes_A10_vSMC, Aph50[[i]], type="l", main= substitute(paste( "r: ", p1, ", ", sigma[r],": ",p2), list(p1=pe[1], p2=pe[2])), xlab = expression(paste("volume (", mu, m^3,")", sep="")), sub=paste("vol. dist. Aphidicolin 50 nM", labs[i]), ylab="frequency") lines(volumes_A10_vSMC, fitted(Aph50res[[i]]), col=2) } textplot("(Above) Volume distribution data representing A10 vSMC cells cultured with 50 nM aphidicolin concentration (black) and model fit (red). (Right) Parameter estimates and mean estimates over the four fits",fixed.width=FALSE) textplot(signif(Aph50tab,3)) ## the volume distributions representing 100 nM aphidicolin concentration Aph100 <- list(Aph100_a, Aph100_b, Aph100_c, Aph100_d) ## the associated cell cycle times tAph100 <- c(tAph100_a, tAph100_b, tAph100_c, tAph100_d) ## fit each dataset Aph100res <- list() Aph100tab <- matrix(ncol=2,nrow=4) for(i in 1:length(Aph100)) { Aph100res[[i]] <- fitVolDist(vol=volumes_A10_vSMC, freq=Aph100[[i]], r=100,sigma_r=44, t=tAph100[i]) Aph100tab[i,] <- coef(Aph100res[[i]]) } Aph100tab <- rbind(Aph100tab, colMeans(Aph100tab)) colnames(Aph100tab) <- c("r", "sigma_r") rownames(Aph100tab) <- c(labs, "mean values") ## plot results par(mfrow=c(3,2)) for(i in 1:length(Aph100)) { pe <- signif(coef(Aph100res[[i]]),3) plot(volumes_A10_vSMC, Aph100[[i]], type="l", main= substitute(paste( "r: ", p1, ", ", sigma[r],": ",p2), list(p1=pe[1], p2=pe[2])), xlab = expression(paste("volume (",mu, m^3,")", sep="")), sub=paste("vol. dist. Aphidicolin 100 nM", labs[i]), ylab="frequency") lines(volumes_A10_vSMC, fitted(Aph100res[[i]]), col=2) } textplot("(Above) Volume distribution data representing A10 vSMC cells cultured with 100 nM aphidicolin concentration (black) and model fit (red). (Right) Parameter estimates and mean estimates over the four fits",fixed.width=FALSE) textplot(signif(Aph100tab,3)) ## End(Not run) ############################################################# # Fit volume distribution data for NIH3T3 cell cultures # as described in the above referenced paper ############################################################# ## load the volume distributions in the "NIH3T3_volume_data" dataset data("NIH3T3_volume_data") labs <- c("a","b","c","d") ## the volume distributions representing NIH3T3 cells NIH3T3 <- list(NIH3T3_a, NIH3T3_b, NIH3T3_c, NIH3T3_d) ## the associated cell cycle times tNIH3T3 <- c(tNIH3T3_a, tNIH3T3_b, tNIH3T3_c, tNIH3T3_d) ## fit each dataset NIH3T3res <- list() NIH3T3tab <- matrix(ncol=2,nrow=4) for(i in 1:length(NIH3T3)) { NIH3T3res[[i]] <- fitVolDist(vol=volumes_nih3t3, freq=NIH3T3[[i]], r=100,sigma_r=44, t=tNIH3T3[i]) NIH3T3tab[i,] <- coef(NIH3T3res[[i]]) } NIH3T3tab <- rbind(NIH3T3tab, colMeans(NIH3T3tab)) colnames(NIH3T3tab) <- c("r", "sigma_r") rownames(NIH3T3tab) <- c(labs, "mean values") ## plot results par(mfrow=c(3,2)) for(i in 1:length(NIH3T3)) { pe <- signif(coef(NIH3T3res[[i]]),3) plot(volumes_nih3t3, NIH3T3[[i]], type="l", main= substitute(paste( "r: ", p1, ", ", sigma[r],": ",p2), list(p1=pe[1], p2=pe[2])), xlab = expression(paste("volume (",mu, m^3,")", sep="")), sub=paste("vol. dist. NIH3T3", labs[i]), ylab="frequency") lines(volumes_nih3t3, fitted(NIH3T3res[[i]]), col=2) } textplot("(Above) Volume distribution data representing NIH3T3 cells cultured under normal conditions (black) and model fit (red). (Right) Parameter estimates and mean estimates over the four fits",fixed.width=FALSE) textplot(signif(NIH3T3tab,3))
## Not run: ############################################################# # Fit volume distribution data for A10 vSMC cell cultures # as described in the above referenced paper ############################################################# ## load the volume distributions in the "A10_vSMC_volume_data" dataset data("A10_vSMC_volume_data") labs <- c("a","b","c","d") ## the volume distributions representing 0 nM aphidicolin concentration Aph0 <- list(Aph0_a, Aph0_b, Aph0_c, Aph0_d) ## the associated cell cycle times tAph0 <- c(tAph0_a, tAph0_b, tAph0_c, tAph0_d) ## fit each dataset Aph0res <- list() Aph0tab <- matrix(ncol=2,nrow=4) for(i in 1:length(Aph0)) { Aph0res[[i]] <- fitVolDist(vol=volumes_A10_vSMC, freq=Aph0[[i]], r=100,sigma_r=44, t=tAph0[i]) Aph0tab[i,] <- coef(Aph0res[[i]]) } Aph0tab <- rbind(Aph0tab, colMeans(Aph0tab)) colnames(Aph0tab) <- c("r", "sigma_r") rownames(Aph0tab) <- c(labs, "mean values") ## plot results par(mfrow=c(3,2)) for(i in 1:length(Aph0)) { pe <- signif(coef(Aph0res[[i]]),3) plot(volumes_A10_vSMC, Aph0[[i]], type="l", main= substitute(paste( "r: ", p1, ", ", sigma[r],": ",p2), list(p1=pe[1], p2=pe[2])), xlab = expression(paste("volume (",mu, m^3,")", sep="")), sub=paste("vol. dist. Aphidicolin 0 nM", labs[i]), ylab="frequency") lines(volumes_A10_vSMC, fitted(Aph0res[[i]]), col=2) } textplot("(Above) Volume distribution data representing A10 vSMC cells cultured with 0 nM aphidicolin concentration (black) and model fit (red). (Right) Parameter estimates and mean estimates over the four fits",fixed.width=FALSE) textplot(signif(Aph0tab,3)) ## the volume distributions representing 50 nM aphidicolin concentration Aph50 <- list(Aph50_a, Aph50_b, Aph50_c, Aph50_d) ## the associated cell cycle times tAph50 <- c(tAph50_a, tAph50_b, tAph50_c, tAph50_d) ## fit each dataset Aph50res <- list() Aph50tab <- matrix(ncol=2,nrow=4) for(i in 1:length(Aph50)) { Aph50res[[i]] <- fitVolDist(vol=volumes_A10_vSMC, freq=Aph50[[i]], r=100,sigma_r=44, t=tAph50[i]) Aph50tab[i,] <- coef(Aph50res[[i]]) } Aph50tab <- rbind(Aph50tab, colMeans(Aph50tab)) colnames(Aph50tab) <- c("r", "sigma_r") rownames(Aph50tab) <- c(labs, "mean values") ## plot results par(mfrow=c(3,2)) for(i in 1:length(Aph50)) { pe <- signif(coef(Aph50res[[i]]),3) plot(volumes_A10_vSMC, Aph50[[i]], type="l", main= substitute(paste( "r: ", p1, ", ", sigma[r],": ",p2), list(p1=pe[1], p2=pe[2])), xlab = expression(paste("volume (", mu, m^3,")", sep="")), sub=paste("vol. dist. Aphidicolin 50 nM", labs[i]), ylab="frequency") lines(volumes_A10_vSMC, fitted(Aph50res[[i]]), col=2) } textplot("(Above) Volume distribution data representing A10 vSMC cells cultured with 50 nM aphidicolin concentration (black) and model fit (red). (Right) Parameter estimates and mean estimates over the four fits",fixed.width=FALSE) textplot(signif(Aph50tab,3)) ## the volume distributions representing 100 nM aphidicolin concentration Aph100 <- list(Aph100_a, Aph100_b, Aph100_c, Aph100_d) ## the associated cell cycle times tAph100 <- c(tAph100_a, tAph100_b, tAph100_c, tAph100_d) ## fit each dataset Aph100res <- list() Aph100tab <- matrix(ncol=2,nrow=4) for(i in 1:length(Aph100)) { Aph100res[[i]] <- fitVolDist(vol=volumes_A10_vSMC, freq=Aph100[[i]], r=100,sigma_r=44, t=tAph100[i]) Aph100tab[i,] <- coef(Aph100res[[i]]) } Aph100tab <- rbind(Aph100tab, colMeans(Aph100tab)) colnames(Aph100tab) <- c("r", "sigma_r") rownames(Aph100tab) <- c(labs, "mean values") ## plot results par(mfrow=c(3,2)) for(i in 1:length(Aph100)) { pe <- signif(coef(Aph100res[[i]]),3) plot(volumes_A10_vSMC, Aph100[[i]], type="l", main= substitute(paste( "r: ", p1, ", ", sigma[r],": ",p2), list(p1=pe[1], p2=pe[2])), xlab = expression(paste("volume (",mu, m^3,")", sep="")), sub=paste("vol. dist. Aphidicolin 100 nM", labs[i]), ylab="frequency") lines(volumes_A10_vSMC, fitted(Aph100res[[i]]), col=2) } textplot("(Above) Volume distribution data representing A10 vSMC cells cultured with 100 nM aphidicolin concentration (black) and model fit (red). (Right) Parameter estimates and mean estimates over the four fits",fixed.width=FALSE) textplot(signif(Aph100tab,3)) ## End(Not run) ############################################################# # Fit volume distribution data for NIH3T3 cell cultures # as described in the above referenced paper ############################################################# ## load the volume distributions in the "NIH3T3_volume_data" dataset data("NIH3T3_volume_data") labs <- c("a","b","c","d") ## the volume distributions representing NIH3T3 cells NIH3T3 <- list(NIH3T3_a, NIH3T3_b, NIH3T3_c, NIH3T3_d) ## the associated cell cycle times tNIH3T3 <- c(tNIH3T3_a, tNIH3T3_b, tNIH3T3_c, tNIH3T3_d) ## fit each dataset NIH3T3res <- list() NIH3T3tab <- matrix(ncol=2,nrow=4) for(i in 1:length(NIH3T3)) { NIH3T3res[[i]] <- fitVolDist(vol=volumes_nih3t3, freq=NIH3T3[[i]], r=100,sigma_r=44, t=tNIH3T3[i]) NIH3T3tab[i,] <- coef(NIH3T3res[[i]]) } NIH3T3tab <- rbind(NIH3T3tab, colMeans(NIH3T3tab)) colnames(NIH3T3tab) <- c("r", "sigma_r") rownames(NIH3T3tab) <- c(labs, "mean values") ## plot results par(mfrow=c(3,2)) for(i in 1:length(NIH3T3)) { pe <- signif(coef(NIH3T3res[[i]]),3) plot(volumes_nih3t3, NIH3T3[[i]], type="l", main= substitute(paste( "r: ", p1, ", ", sigma[r],": ",p2), list(p1=pe[1], p2=pe[2])), xlab = expression(paste("volume (",mu, m^3,")", sep="")), sub=paste("vol. dist. NIH3T3", labs[i]), ylab="frequency") lines(volumes_nih3t3, fitted(NIH3T3res[[i]]), col=2) } textplot("(Above) Volume distribution data representing NIH3T3 cells cultured under normal conditions (black) and model fit (red). (Right) Parameter estimates and mean estimates over the four fits",fixed.width=FALSE) textplot(signif(NIH3T3tab,3))
Volume distribution data for NIH3T3 cell cultures under standard culture conditions
data(NIH3T3_volume_data)
data(NIH3T3_volume_data)
The data is formated as 4 numeric vectors of length 257 representing
cell volume () distributions, namely
"NIH3T3\_a",
"NIH3T3\_b",
"NIH3T3\_c", and
"NIH3T3\_d".
The estimated cell cycle time () for each volume
distribution dataset is indicated in the numeric objects
"tNIH3T3\_a",
"tNIH3T3\_b",
"tNIH3T3\_c", and
"tNIH3T3\_d".
The object "volumes\_nih3t3" is a numeric vector representing the
volumes () associated with all of the distributions.
The measurement protocol is described in the paper in the references.
Halter M, Elliott JT, Hubbard JB, Tona A, Plant AL (2009), "Cell Volume Distributions Reveal Cell Growth Rates and Division Times", Journal of Theoretical Biology, Vol 257, pp 124 - 130, DOI: 10.1016/j.jtbi.2008.10.031.
data(NIH3T3_volume_data) plot(volumes_nih3t3, NIH3T3_d, main=expression(paste("Distribution of cell volumes (",mu,m^3,")", sep="")), type="b", pch=20, ylab="frequency", xlab=expression(paste("volume (",mu,m^3,")", sep="")))
data(NIH3T3_volume_data) plot(volumes_nih3t3, NIH3T3_d, main=expression(paste("Distribution of cell volumes (",mu,m^3,")", sep="")), type="b", pch=20, ylab="frequency", xlab=expression(paste("volume (",mu,m^3,")", sep="")))
This is an implementation of a model for the distribution
of cell volumes ()
that constitutes Equation 7 in the paper listed in the
references.
volEq7(A = 1, r = 1, sigma_r = 1, t = 29, sigma_t = .3*t, V = 1)
volEq7(A = 1, r = 1, sigma_r = 1, t = 29, sigma_t = .3*t, V = 1)
A |
a numeric value that represents the starting value for a linear scaling parameter associated with the volume distribution curve |
r |
a numeric value that represents the starting value for the
rate of cell growth parameter ( |
sigma_r |
a numeric value that represents the starting value for
the variability in the rate of cell growth parameter |
t |
a numeric value representing the average cell cycle time ( |
sigma_t |
a numeric value representing the variability in the
average cell cycle time |
V |
a numeric value representing the volume ( |
A numeric value representing the frequency of cells expected having
volume V
().
Halter M, Elliott JT, Hubbard JB, Tona A, Plant AL (2009), "Cell Volume Distributions Reveal Cell Growth Rates and Division Times", Journal of Theoretical Biology, Vol 257, pp 124 - 130, DOI: 10.1016/j.jtbi.2008.10.031.