(K)inetic (O)utlier (D)etection using several methods
Identifies and/or removes qPCR runs according to several published methods or own ideas. The univariate measures are based on efficiency or difference in first/second derivative maxima. Multivariate methods are implemented that describe the structure of the curves according to several fixpoints such as first/second derivative maximum, slope at first derivative maximum or plateau fluorescence. These measures are compared with a set of curves using the mahalanobis
distance with a robust covariance matrix and calculation of statistics by a χ^2 distribution. See 'Details'.
KOD(object, method = c("uni1", "uni2", "multi1", "multi2", "multi3"), par = parKOD(), remove = FALSE, verbose = TRUE, plot = TRUE, ...)
object |
an object of class 'modlist' or 'replist'. |
method |
which method to use for kinetic outlier identification. Method |
par |
parameters for the different |
remove |
logical. If |
verbose |
logical. If |
plot |
logical. If |
... |
any other parameters to be passed to |
The following methods for the detection of kinetic outliers are implementeduni1
: KOD method according to Bar et al. (2003). Outliers are defined by removing the sample efficiency from the replicate group and testing it against the remaining samples' efficiencies using a Z-test:
P = 2 \cdot ≤ft[1 - Φ≤ft(\frac{e_i - μ_{train}}{σ_{train}}\right)\right] < 0.05
uni2
: This method from the package author is more or less a test on sigmoidal structure for the individual curves. It is different in that there is no comparison against other curves from a replicate set. The test is simple: The difference between first and second derivative maxima should be less than 10 cycles:
≤ft(\frac{\partial^3 F(x;a,b,...)}{\partial x^3} = 0\right) - ≤ft(\frac{\partial^2 F(x;a,b...)}{\partial x^2} = 0\right) < 10
Sounds astonishingly simple, but works: Runs are defines as 'outliers' that really failed to amplify, i.e. have no sigmoidal structure or are very shallow. It is the default setting in modlist
.
multi1
: KOD method according to Tichopad et al. (2010). Assuming two vectors with first and second derivative maxima t_1 and t_2 from a 4-parameter sigmoidal fit within a window of points around the first derivative maximum, a linear model t_2 = t_1 \cdot b + a + τ is made. Both t_1 and the residuals from the fit τ = t_2 - \hat{t_2} are Z-transformed:
t_1(norm) = \frac{t_1 - \bar{t}_1}{{σ_t}_1}, \; {τ_1}_{norm} = \frac{τ_1 - \bar{τ}_1}{{σ_τ}_1}
Both t_1 and τ are used for making a robust covariance matrix. The outcome is plugged into a mahalanobis
distance analysis using the 'adaptive reweighted estimator' from package 'mvoutlier' and p-values for significance of being an 'outlier' are deduced from a χ^2 distribution. If more than two parameters are supplied, princomp
is used instead.
multi2
: Second KOD method according to Tichopad et al. (2010), mentioned in the paper. Uses the same pipeline as multi1
, but with the slope at the first derivative maximum and maximum fluorescence as parameters:
\frac{\partial F(x;a,b,...)}{\partial x}, F_{max}
multi3
: KOD method according to Sisti et al. (2010). Similar to multi2
, but uses maximum fluorescence, slope at first derivative maximum and y-value at first derivative maximum as fixpoints:
\frac{\partial F(x;a,b,...)}{\partial x}, F≤ft(\frac{\partial^2 F(x;a,b,...)}{\partial x^2} = 0\right), F_{max}
All essential parameters for the methods can be tweaked by parKOD
. See there and in 'Examples'.
An object of the same class as in object
that is 'tagged' in its name (**name**) if it is an outlier and also with an item $isOutlier
with outlier information (see is.outlier
). If remove = TRUE
, the outlier runs are removed (and the fitting updated in case of a 'replist').
Andrej-Nikolai Spiess
Kinetic Outlier Detection (KOD) in real-time PCR.
Bar T, Stahlberg A, Muszta A & Kubista M.
Nucl Acid Res (2003), 31: e105.
Quality control for quantitative PCR based on amplification compatibility test.
Tichopad A, Bar T, Pecen L, Kitchen RR, Kubista M &, Pfaffl MW.
Methods (2010), 50: 308-312.
Shape based kinetic outlier detection in real-time PCR.
Sisti D, Guescini M, Rocchi MBL, Tibollo P, D'Atri M & Stocchi V.
BMC Bioinformatics (2010), 11: 186.
Function is.outlier
to get an outlier summary.
## kinetic outliers: ## on a 'modlist', using efficiency from sigmoidal fit ## and alpha = 0.01. ## F7.3 detected as outlier (shallower => low efficiency) ml1 <- modlist(reps, 1, c(2:5, 28), model = l5) res1 <- KOD(ml1, method = "uni1", par = parKOD(eff = "sliwin", alpha = 0.01)) plot(res1) ## Sigmoidal outliers: ## remove runs without sigmoidal structure. ml2 <- modlist(testdat, model = l5) res2 <- KOD(ml2, method = "uni2", remove = TRUE) plot(res2, which = "single") ## Not run: ## Multivariate outliers: ## a few runs are identified. ml3 <- modlist(reps, model = l5) res3 <- KOD(ml3, method = "multi1") ## On a 'replist', several outliers identified. rl3 <- replist(ml3, group = gl(7, 4)) res4 <- KOD(rl3, method = "uni1") ## End(Not run)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.