Title: | Colony Formation Assay: Taking into Account Cellular Cooperation |
---|---|
Description: | Cellular cooperation compromises the plating efficiency-based analysis of clonogenic survival data. This tool provides functions that enable a robust analysis of colony formation assay (CFA) data in presence or absence of cellular cooperation. The implemented method has been described in Brix et al. (2020). (Brix, N., Samaga, D., Hennel, R. et al. "The clonogenic assay: robustness of plating efficiency-based analysis is strongly compromised by cellular cooperation." Radiat Oncol 15, 248 (2020). <doi:10.1186/s13014-020-01697-y>) Power regression for parameter estimation, calculation of survival fractions, uncertainty analysis and plotting functions are provided. |
Authors: | Daniel Samaga [cre, aut], Nikko Brix [aut], Kirsten Lauber [aut], Horst Zitzelsberger [aut] |
Maintainer: | Daniel Samaga <[email protected]> |
License: | GPL-3 |
Version: | 1.0.0 |
Built: | 2024-11-09 03:52:58 UTC |
Source: | https://github.com/zytohmgu/cfacoop |
wrapper function for robust analysis of clonogenic survival data from the colony formation assay according to Brix et al. (2020), Radiation Oncology. Mean values are calculated and used for power regression. Resulting coefficients are used for calculation of survival fractions and corresponding uncertainty analysis.
analyze_survival(RD, name = "no name", xtreat = NULL, C = 20)
analyze_survival(RD, name = "no name", xtreat = NULL, C = 20)
RD |
data.frame or matrix containing a table of experiment data |
name |
optional: experiment name (e.g. name of cell line) |
xtreat |
optional: treatment dose of the colonies counted in the corresponding columns of RD |
C |
number of colonies counted for which the survival fraction is to be calculated (default = 20)) |
list object containing several experiments and treatments organized
for convenient plotting with plot_sf
seeded <- rep(10^(seq(1,5,0.5)),each = 3) df.1 <- data.frame( "seeded" = seeded, "counted1" = 0.4 * seeded^1.1 * rnorm(n = length(seeded),1,0.05), "counted2" = 0.2 * seeded^1.125 * rnorm(n = length(seeded),1,0.05), "counted3" = 0.05 * seeded^1.25 * rnorm(n = length(seeded),1,0.05)) df.2 <- data.frame("seeded" = seeded, "counted1" = 0.5 * seeded^1.01 * rnorm(n = length(seeded),1,0.05), "counted2" = 0.4 * seeded^1.0125 * rnorm(n = length(seeded),1,0.05), "counted3" = 0.2 * seeded^1.025 * rnorm(n = length(seeded),1,0.05)) SF <- vector("list",2) SF[[1]] <- analyze_survival(RD = df.1, name = "cell line a", xtreat = c(0,1,4), C = 20) SF[[2]] <- analyze_survival(RD = df.2, name = "cell line b", xtreat = c(0,1,4))
seeded <- rep(10^(seq(1,5,0.5)),each = 3) df.1 <- data.frame( "seeded" = seeded, "counted1" = 0.4 * seeded^1.1 * rnorm(n = length(seeded),1,0.05), "counted2" = 0.2 * seeded^1.125 * rnorm(n = length(seeded),1,0.05), "counted3" = 0.05 * seeded^1.25 * rnorm(n = length(seeded),1,0.05)) df.2 <- data.frame("seeded" = seeded, "counted1" = 0.5 * seeded^1.01 * rnorm(n = length(seeded),1,0.05), "counted2" = 0.4 * seeded^1.0125 * rnorm(n = length(seeded),1,0.05), "counted3" = 0.2 * seeded^1.025 * rnorm(n = length(seeded),1,0.05)) SF <- vector("list",2) SF[[1]] <- analyze_survival(RD = df.1, name = "cell line a", xtreat = c(0,1,4), C = 20) SF[[2]] <- analyze_survival(RD = df.2, name = "cell line b", xtreat = c(0,1,4))
calculates the survival fraction according to the procedure presented in Brix et al. (2020), which is robust against cellular cooperation.
calculate_sf(par_ref, par_treat, C = 20)
calculate_sf(par_ref, par_treat, C = 20)
par_ref |
|
par_treat |
|
C |
colony number for which the survival fraction is calculated (default = 20) |
survival fractions.
If par_ref and par_treat are summary.lm
objects,
a scalar is returned.
If par_ref and par_treat are matrices,
a vector of the same length as nrow(par_treat) is returned
seeded <- 10^(seq(1, 5, 0.5)) counted.ref <- 0.4 * 10^(seq(1, 5, 0.5) + rnorm(n = 9, 0, 0.1))^1.1 counted.treat <- 0.01 * 10^(seq(1, 5, 0.5) + rnorm(n = 9, 0, 0.1))^1.2 fit_ref <- pwr_reg(seeded = seeded, counted = counted.ref) fit_treat <- pwr_reg(seeded = seeded, counted = counted.treat) calculate_sf(par_ref = fit_ref, par_treat = fit_treat) data("CFAdata") D <- subset.data.frame( x = CFAdata, subset = cell.line == levels(CFAdata$cell.line)[1] ) fit_ref <- pwr_reg(seeded = D$`Cells seeded`, counted = D$`0 Gy`) fit_treat <- pwr_reg(seeded = D$`Cells seeded`, counted = D$`4 Gy`) calculate_sf(par_ref = fit_ref, par_treat = fit_treat)
seeded <- 10^(seq(1, 5, 0.5)) counted.ref <- 0.4 * 10^(seq(1, 5, 0.5) + rnorm(n = 9, 0, 0.1))^1.1 counted.treat <- 0.01 * 10^(seq(1, 5, 0.5) + rnorm(n = 9, 0, 0.1))^1.2 fit_ref <- pwr_reg(seeded = seeded, counted = counted.ref) fit_treat <- pwr_reg(seeded = seeded, counted = counted.treat) calculate_sf(par_ref = fit_ref, par_treat = fit_treat) data("CFAdata") D <- subset.data.frame( x = CFAdata, subset = cell.line == levels(CFAdata$cell.line)[1] ) fit_ref <- pwr_reg(seeded = D$`Cells seeded`, counted = D$`0 Gy`) fit_treat <- pwr_reg(seeded = D$`Cells seeded`, counted = D$`4 Gy`) calculate_sf(par_ref = fit_ref, par_treat = fit_treat)
Clonogenic survival data from seven cell lines T47D, MDA-MB231, A549, HCC1806, SKBR3, SKLU1 and BT20 as presented in Figure 2 in Brix et al. (2020).
data(CFAdata)
data(CFAdata)
data.frame
Brix, N., Samaga, D., Hennel, R. et al. "The clonogenic assay: robustness of plating efficiency-based analysis is strongly compromised by cellular cooperation." Radiat Oncol 15, 248 (2020). <doi:10.1186/s13014-020-01697-y>
data(CFAdata) head(CFAdata) cll <- levels(CFAdata$cell.line)
data(CFAdata) head(CFAdata) cll <- levels(CFAdata$cell.line)
export table with results of clonogenic survival analysis from the colony formation assay considering cellular cooperation
export_sf(SF)
export_sf(SF)
SF |
list build of objects returned by |
data.frame containing all estimated coefficients and effects from
all experiments contained in SF
seeded <- rep(10^(seq(1, 5, 0.5)), each = 3) df.1 <- data.frame( "seeded" = seeded, "counted1" = 0.4 * seeded^1.1 * rnorm(n = length(seeded), 1, 0.05), "counted2" = 0.2 * seeded^1.125 * rnorm(n = length(seeded), 1, 0.05), "counted3" = 0.05 * seeded^1.25 * rnorm(n = length(seeded), 1, 0.05) ) df.2 <- data.frame( "seeded" = seeded, "counted1" = 0.5 * seeded^1.01 * rnorm(n = length(seeded), 1, 0.05), "counted2" = 0.4 * seeded^1.0125 * rnorm(n = length(seeded), 1, 0.05), "counted3" = 0.2 * seeded^1.025 * rnorm(n = length(seeded), 1, 0.05) ) SF <- vector("list", 2) SF[[1]] <- analyze_survival( RD = df.1, name = "cell line a", xtreat = c(0, 1, 4) ) SF[[2]] <- analyze_survival( RD = df.2, name = "cell line b", xtreat = c(0, 1, 4) ) export_sf(SF) data("CFAdata") SF <- vector("list", 4) ll <- levels(CFAdata$cell.line)[c(1, 3, 5, 7)] for (i in seq_along(ll)) { cdat <- subset.data.frame( x = CFAdata, subset = CFAdata$cell.line == ll[i] ) SF[[i]] <- analyze_survival( RD = cdat[, -1], name = ll[i], xtreat = c(0, 1, 2, 4, 6, 8) ) } export_sf(SF)
seeded <- rep(10^(seq(1, 5, 0.5)), each = 3) df.1 <- data.frame( "seeded" = seeded, "counted1" = 0.4 * seeded^1.1 * rnorm(n = length(seeded), 1, 0.05), "counted2" = 0.2 * seeded^1.125 * rnorm(n = length(seeded), 1, 0.05), "counted3" = 0.05 * seeded^1.25 * rnorm(n = length(seeded), 1, 0.05) ) df.2 <- data.frame( "seeded" = seeded, "counted1" = 0.5 * seeded^1.01 * rnorm(n = length(seeded), 1, 0.05), "counted2" = 0.4 * seeded^1.0125 * rnorm(n = length(seeded), 1, 0.05), "counted3" = 0.2 * seeded^1.025 * rnorm(n = length(seeded), 1, 0.05) ) SF <- vector("list", 2) SF[[1]] <- analyze_survival( RD = df.1, name = "cell line a", xtreat = c(0, 1, 4) ) SF[[2]] <- analyze_survival( RD = df.2, name = "cell line b", xtreat = c(0, 1, 4) ) export_sf(SF) data("CFAdata") SF <- vector("list", 4) ll <- levels(CFAdata$cell.line)[c(1, 3, 5, 7)] for (i in seq_along(ll)) { cdat <- subset.data.frame( x = CFAdata, subset = CFAdata$cell.line == ll[i] ) SF[[i]] <- analyze_survival( RD = cdat[, -1], name = ll[i], xtreat = c(0, 1, 2, 4, 6, 8) ) } export_sf(SF)
plot cellular cooperativity and clonogenic survival for colony formation assay data
plot_sf(SF, showUncertainty = TRUE)
plot_sf(SF, showUncertainty = TRUE)
SF |
list build of objects returned by |
showUncertainty |
logical, switches on/off uncertainty bands for sf-values. |
none
seeded <- rep(10^(seq(1, 5, 0.5)), each = 3) df.1 <- data.frame( "seeded" = seeded, "counted1" = 0.4 * seeded^1.1 * rnorm(n = length(seeded), 1, 0.05), "counted2" = 0.2 * seeded^1.125 * rnorm(n = length(seeded), 1, 0.05), "counted3" = 0.05 * seeded^1.25 * rnorm(n = length(seeded), 1, 0.05) ) df.2 <- data.frame( "seeded" = seeded, "counted1" = 0.5 * seeded^1.01 * rnorm(n = length(seeded), 1, 0.05), "counted2" = 0.4 * seeded^1.0125 * rnorm(n = length(seeded), 1, 0.05), "counted3" = 0.2 * seeded^1.025 * rnorm(n = length(seeded), 1, 0.05) ) SF <- vector("list", 2) SF[[1]] <- analyze_survival( RD = df.1, name = "cell line a", xtreat = c(0, 1, 4) ) SF[[2]] <- analyze_survival( RD = df.2, name = "cell line b", xtreat = c(0, 1, 4) ) plot_sf(SF) data("CFAdata") SF <- vector("list", 4) ll <- levels(CFAdata$cell.line)[c(1, 3, 5, 7)] for (i in seq_along(ll)) { cdat <- subset.data.frame( x = CFAdata, subset = CFAdata$cell.line == ll[i] ) SF[[i]] <- analyze_survival( RD = cdat[, -1], name = ll[i], xtreat = c(0, 1, 2, 4, 6, 8) ) } plot_sf(SF)
seeded <- rep(10^(seq(1, 5, 0.5)), each = 3) df.1 <- data.frame( "seeded" = seeded, "counted1" = 0.4 * seeded^1.1 * rnorm(n = length(seeded), 1, 0.05), "counted2" = 0.2 * seeded^1.125 * rnorm(n = length(seeded), 1, 0.05), "counted3" = 0.05 * seeded^1.25 * rnorm(n = length(seeded), 1, 0.05) ) df.2 <- data.frame( "seeded" = seeded, "counted1" = 0.5 * seeded^1.01 * rnorm(n = length(seeded), 1, 0.05), "counted2" = 0.4 * seeded^1.0125 * rnorm(n = length(seeded), 1, 0.05), "counted3" = 0.2 * seeded^1.025 * rnorm(n = length(seeded), 1, 0.05) ) SF <- vector("list", 2) SF[[1]] <- analyze_survival( RD = df.1, name = "cell line a", xtreat = c(0, 1, 4) ) SF[[2]] <- analyze_survival( RD = df.2, name = "cell line b", xtreat = c(0, 1, 4) ) plot_sf(SF) data("CFAdata") SF <- vector("list", 4) ll <- levels(CFAdata$cell.line)[c(1, 3, 5, 7)] for (i in seq_along(ll)) { cdat <- subset.data.frame( x = CFAdata, subset = CFAdata$cell.line == ll[i] ) SF[[i]] <- analyze_survival( RD = cdat[, -1], name = ll[i], xtreat = c(0, 1, 2, 4, 6, 8) ) } plot_sf(SF)
pwr_reg
performs a power regression
(log(C) = log(a) + b * log(S) + e)) for clonogenic assay data of
experiments examining the cellular cooperation.
pwr_reg(seeded, counted)
pwr_reg(seeded, counted)
seeded |
numeric vector with number of cells seeded (S) |
counted |
numeric vector with number of colonies counted (C, same
length as |
summary.lm
object as returned by summary
pwr_reg( seeded = 10^(seq(1, 5, 0.5)), counted = 0.4 * (10^seq(1, 5, 0.5))^1.25 * rnorm(n = 9, 1, 0.05) ) data(CFAdata) D <- subset.data.frame( x = CFAdata, subset = cell.line == levels(CFAdata$cell.line)[1] ) pwr_reg(seeded = D$`Cells seeded`, counted = D$`0 Gy`)
pwr_reg( seeded = 10^(seq(1, 5, 0.5)), counted = 0.4 * (10^seq(1, 5, 0.5))^1.25 * rnorm(n = 9, 1, 0.05) ) data(CFAdata) D <- subset.data.frame( x = CFAdata, subset = cell.line == levels(CFAdata$cell.line)[1] ) pwr_reg(seeded = D$`Cells seeded`, counted = D$`0 Gy`)