aboutsummaryrefslogtreecommitdiff
path: root/R/plot.mkinfit.R
diff options
context:
space:
mode:
authorJohannes Ranke <jranke@uni-bremen.de>2014-04-28 17:59:10 +0200
committerJohannes Ranke <jranke@uni-bremen.de>2014-04-28 17:59:10 +0200
commitb4739ba14c5472a23cb3e334d55989f7fbb0afe2 (patch)
treefc4faf095a4b45799b7f54f93cd8dae9263fe826 /R/plot.mkinfit.R
parentf217301d19c9297b3ae3a1b215c8d573cda4c2e5 (diff)
Option to add residual plot to plot.mkinfit
Diffstat (limited to 'R/plot.mkinfit.R')
-rw-r--r--R/plot.mkinfit.R28
1 files changed, 27 insertions, 1 deletions
diff --git a/R/plot.mkinfit.R b/R/plot.mkinfit.R
index 80cf45f4..23eb30fa 100644
--- a/R/plot.mkinfit.R
+++ b/R/plot.mkinfit.R
@@ -21,13 +21,20 @@ plot.mkinfit <- function(x, fit = x,
obs_vars = names(fit$mkinmod$map),
xlab = "Time", ylab = "Observed",
xlim = range(fit$data$time),
- ylim = c(0, max(subset(fit$data, variable %in% obs_vars)$observed, na.rm = TRUE)),
+ ylim = "default",
col_obs = 1:length(fit$mkinmod$map),
pch_obs = col_obs,
lty_obs = rep(1, length(fit$mkinmod$map)),
add = FALSE, legend = !add,
+ show_residuals = FALSE, maxabs = "auto",
lpos = "topright", inset = c(0.05, 0.05), ...)
{
+ if (add && show_residuals) stop("If adding to an existing plot we can not show residuals")
+
+ if (ylim == "default") {
+ ylim = c(0, max(subset(fit$data, variable %in% obs_vars)$observed, na.rm = TRUE))
+ }
+
solution_type = fit$solution_type
parms.all <- c(fit$bparms.optim, fit$bparms.fixed)
@@ -52,6 +59,10 @@ plot.mkinfit <- function(x, fit = x,
# Set up the plot if not to be added to an existing plot
if (add == FALSE) {
+ if (show_residuals) {
+ layout(matrix(c(1, 2), 2, 1), heights = c(2, 1.3))
+ par(mar = c(3, 4, 4, 2) + 0.1)
+ }
plot(0, type="n",
xlim = xlim, ylim = ylim,
xlab = xlab, ylab = ylab, ...)
@@ -67,4 +78,19 @@ plot.mkinfit <- function(x, fit = x,
legend(lpos, inset= inset, legend = obs_vars,
col = col_obs[obs_vars], pch = pch_obs[obs_vars], lty = lty_obs[obs_vars])
}
+ # Show residuals if requested
+ if (show_residuals) {
+ par(mar = c(5, 4, 0, 2) + 0.1)
+ residuals <- subset(fit$data, variable %in% obs_vars, residual)
+ if (maxabs == "auto") maxabs = max(abs(residuals), na.rm = TRUE)
+ plot(0, type="n",
+ xlim = xlim,
+ ylim = c(-1.2 * maxabs, 1.2 * maxabs),
+ xlab = xlab, ylab = ylab)
+ for(obs_var in obs_vars){
+ residuals_plot <- subset(fit$data, variable == obs_var, c("time", "residual"))
+ points(residuals_plot, pch = pch_obs[obs_var], col = col_obs[obs_var])
+ }
+ abline(h = 0, lty = 2)
+ }
}

Contact - Imprint