Extreme Limiting Dilution Analysis
Fit single-hit model to a dilution series using complementary log-log binomial regression.
elda(response, dose, tested=rep(1,length(response)), group=rep(1,length(response)), observed=FALSE, confidence=0.95, test.unit.slope=FALSE) limdil(response, dose, tested=rep(1,length(response)), group=rep(1,length(response)), observed=FALSE, confidence=0.95, test.unit.slope=FALSE)
- numeric of integer counts of positive cases, out of
- numeric vector of expected number of cells in assay
- numeric vector giving number of trials at each dose
- vector or factor giving group to which the response belongs
- logical, is the actual number of cells observed?
- numeric level for confidence interval
- logical, should the adequacy of the single-hit model be tested?
limdil are alternative names for the same function.
limdil was the older name before the publication Hu and Smyth (2009).
This function is an implementation of maximum likelihood analysis of limiting dilution data with added features to accommodate small sample sizes (Hu and Smyth, 2009).
In particular, the function accommodates gracefully situations where 0% or 100% of the assays give positive results, which is why we call it "extreme" limiting dilution analysis.
The methodology has been applied to the analysis of stem cell assays (Shackleton et al, 2006).
A binomial generalized linear model is fitted for each group with cloglog link and offset
observed=FALSE, a classic Poisson single-hit model is assumed, and the Poisson frequency of the stem cells is the
exp of the intercept.
observed=TRUE, the values of
dose are treated as actual cell numbers rather than expected values.
This doesn't changed the generalized linear model fit but changes how the frequencies are extracted from the estimated model coefficient (Hu and Smyth, 2009).
The confidence interval is a Wald confidence interval, unless all the responses are zero or at the maximum value, in which case Clopper-Pearson intervals are computed.
group takes several values, then separate confidence intervals are computed for each group.
In this case it also possible to test for non-equality in frequency between the groups.
These functions produce objects of class
plot methods for
- An object of class
"limdil"with the following components:
CI numeric vector giving estimated frequency and lower and upper limits of Wald confidence interval of each group test.difference numeric vector giving chisquare likelihood ratio test statistic and p-value for testing the difference between groups test.slope.wald numeric vector giving wald test statistics and p-value for testing the slope of the offset equal to one test.slope.lr numeric vector giving chisquare likelihood ratio test statistics and p-value for testing the slope of the offset equal to one test.slope.scorel numeric vector giving score test statistics and p-value for testing multi-hit alternatives test.slope.score numeric vector giving score test statistics and p-value for testing heterogeneity response numeric of integer counts of positive cases, out of
tested numeric vector giving number of trials at each dose dose numeric vector of expected number of cells in assay group vector or factor giving group to which the response belongs num.group number of groups
Shackleton, M., Vaillant, F., Simpson, K. J., Stingl, J., Smyth, G. K., Asselin-Labat, M.-L., Wu, L., Lindeman, G. J., and Visvader, J. E. (2006).
Generation of a functional mammary gland from a single stem cell.
Nature 439, 84-88.
A webpage interface to this function is available at
# When there is one group Dose <- c(50,100,200,400,800) Responses <- c(2,6,9,15,21) Tested <- c(24,24,24,24,24) out <- elda(Responses,Dose,Tested,test.unit.slope=TRUE) out plot(out) # When there are four groups Dose <- c(30000,20000,4000,500,30000,20000,4000,500,30000,20000,4000,500,30000,20000,4000,500) Responses <- c(2,3,2,1,6,5,6,1,2,3,4,2,6,6,6,1) Tested <- c(6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6) Group <- c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4) elda(Responses,Dose,Tested,Group,test.unit.slope=TRUE)