anders.mehler at online.de
2014-Mar-13 12:27 UTC
[R] outlier detection in nonlinear regression
Dear useR's, ? I have several biological data sets from laboratory experiments where a few experiments failed completely due to bacterial contamination. Such cases can easily be seen "by eye" as "outliers". ? Fitting a Michaelis-Menten kinetics works well with robust nonlinear regression from package robustbase, but this helps me only partly because I need to remove the outliers for a subsequent analysis, so I need a reproducible automatic method. ? I tried the following two heuristic approaches by either using the robust weights directly (A) or by applying a 3-sigma rule to the residuals (B), see example below. ? My question: Is there any method available in R that is less heuristic than this? Thank you in advance ? Anders ? library(robustbase) ## create data set.seed(375) x <- rep(0:10, 3) y <- 5 * x / (2 + x) + rnorm(x, sd = 0.2) ## make outliers y[c(3, 5, 10)] <- y[c(3, 5, 10)] + c(2, -1, -2) ## robust regression m <- nlrob(y ~ a * x /(b + x), ?? data = list(x = x, y = y), ?? start = list(a = 1, b = 1)) summary(m) xnew <- list(x = seq(0, 10, 0.1)) plot(x, y) lines(xnew$x, predict(m, newdata = xnew)) ## A) use robust weights to detect outliers ##??? ?? how to select a critical value? outA <- m$rweight < 0.5 points(x[outA], y[outA], pch = 16, col = "red") ## B) use 3 sigma of residuals to detect outliers eps? <- residuals(m) outB <- abs(eps) > (3 * sd(eps)) points(x[outB], y[outB], pch = 3, col = "blue")