Target Diagrams
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

Target Diagrams

R implementation of Target Diagrams proposed in Jolliff, J.; Kindle, J. C.; Shulman, I.; Penta, B.; Friedrichs, M. A. M.; Helber, R. & Arnone, R. A. Summary diagrams for coupled hydrodynamic-ecosystem model skill assessment Journal of Marine Systems, 2009, 76, 64-82.

The Target Diagram is derived from the relation between the unbiased RMSE, MBE, and RMSE. In a Cartesian coordinate system, the x-axis represents the unbiased RMSE (variance of the error), and the y-axis represents the MBE. Therefore the distance between any point to the origin is equal to the RMSE. Because the unbiased RMSE is always positive, the left area of the coordinate system is empty with this scheme. With additional information this region may be also used: the unbiased RMSE is multiplied by the sign of the difference between the standard deviations of model and observations.

The resulting diagram provides three different measures: whether the model overestimates or underestimates (positive or negative values of the MBE on the y-axis, respectively), whether the model standard deviation is larger or smaller than the standard deviation of the measurements (positive or negative values on the x-axis, respectively), and the error performance as quantified by the RMSE represented as the distance to the coordinates origin. This tool is particularly powerful when comparing competing models.


The stable release of tdr can be found at CRAN. The development version is at GitHub.

Install the stable version with:


To install the development version you need the devtools package:

devtools::install_github('tdr', 'oscarperpinan')


There are two main functions, targetDiagram for lattice users, and target_diagram for ggplot2 users. Both of them have a data argument, a data.frame with three columns containing the error statistics between a set of models and a vector of observations. This data.frame can be produced with the applyStats function included in the package.

There is an example data set in the package.



Now in your environment you will find a data.frame named pvModels and a vector named pvObs.


z <- zoo(cbind(pvModels, pvObs),
         order =  as.Date(rownames(pvModels)))
plot(z, plot.type  = 'single',
     col = c(rep('gray', 22), 'red'),
     ylab = '', xlab = '')


The applyStats function computes the error statistics between models and observations required by the target diagram:

errModel <- applyStats(pvModels, pvObs)

We are ready to display the result, using lattice:

targetDiagram(errModel, groups = model)


or ggplot2:

target_diagram(errModel, fill = 'model')