diff options
Diffstat (limited to 'R')
| -rw-r--r-- | R/mkinresplot.R | 29 | ||||
| -rw-r--r-- | R/plot.mkinfit.R | 28 | 
2 files changed, 41 insertions, 16 deletions
| diff --git a/R/mkinresplot.R b/R/mkinresplot.R index 524ba788..07bd7dfa 100644 --- a/R/mkinresplot.R +++ b/R/mkinresplot.R @@ -1,7 +1,5 @@ -# $Id$
 -
 -# Copyright (C) 2008-2011 Katrin Lindenberger and Johannes Ranke
 -# Contact: mkin-devel@lists.berlios.de
 +# Copyright (C) 2008-2014 Johannes Ranke
 +# Contact: jranke@uni-bremen.de
  # This file is part of the R package mkin
 @@ -19,36 +17,37 @@  # this program. If not, see <http://www.gnu.org/licenses/>
  if(getRversion() >= '2.15.1') utils::globalVariables(c("variable", "residual"))
 -mkinresplot <- function (object, obs_vars = vector(), 
 +mkinresplot <- function (object, 
 +  obs_vars = names(object$mkinmod$map),
    xlab = "Time", ylab = "Residual",
  	maxabs = "auto", legend= TRUE, lpos = "topright", ...) 
  {
  	obs_vars_all <- as.character(unique(object$data$variable))
    if (length(obs_vars) > 0){
 -      vars <- intersect(obs_vars_all, obs_vars)	
 -  } else vars <- obs_vars_all
 +      obs_vars <- intersect(obs_vars_all, obs_vars)	
 +  } else obs_vars <- obs_vars_all
 -  residuals <- subset(object$data, variable %in% vars, residual)
 +  residuals <- subset(object$data, variable %in% obs_vars, residual)
    if (maxabs == "auto") maxabs = max(abs(residuals), na.rm = TRUE)
 -	col_obs <- pch_obs <- 1:length(vars)
 - 	names(col_obs) <- names(pch_obs) <- vars
 +	col_obs <- pch_obs <- 1:length(obs_vars)
 + 	names(col_obs) <- names(pch_obs) <- obs_vars
    plot(0,  xlab = xlab, ylab = ylab, 
         xlim = c(0, 1.1 * max(object$data$time)), 
         ylim = c(-1.2 * maxabs, 1.2 * maxabs), ...)
 -	for(var in vars){
 -		residuals_plot <- subset(object$data, variable == var, c("time", "residual"))
 -		points(residuals_plot, pch = pch_obs[var], col = col_obs[var])
 +	for(obs_var in obs_vars){
 +		residuals_plot <- subset(object$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)
    if (legend == TRUE) {
 -    legend(lpos, inset = c(0.05, 0.05), legend = vars, 
 -    col = col_obs, pch = pch_obs)
 +    legend(lpos, inset = c(0.05, 0.05), legend = obs_vars, 
 +      col = col_obs[obs_vars], pch = pch_obs[obs_vars])
    }
  }
 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) +  }  } | 
