Skip to main content
Jump to: navigation, search



The Spatio-Temporal Epidemiological Modeler (STEM) is a tool designed to help scientists and public health officials create and use models of emerging infectious diseases. STEM uses mathematical models of diseases (based on differential equations) to simulate the development or evolution of a disease in space and time (e.g., avian flu or salmonella). These models could aid in understanding, and potentially preventing, the spread of such diseases.

STEM User Guides


A Global H1N1 Simulation.

What is the Spatiotemporal Epidemiological Modeler (STEM)? The Spatiotemporal Epidemiological Modeler (STEM) tool is designed to help scientists and public health officials create and use spatial and temporal models of emerging infectious diseases. These models can aid in understanding and potentially preventing the spread of such diseases.

Policymakers responsible for strategies to contain disease and prevent epidemics need an accurate understanding of disease dynamics and the likely outcomes of preventive actions. In an increasingly connected world with extremely efficient global transportation links, the vectors of infection can be quite complex. STEM facilitates the development of advanced mathematical models, the creation of flexible models involving multiple populations (species) and interactions between diseases, and a better understanding of epidemiology.

How does it work? The STEM application has built in Geographical Information System (GIS) data for almost every country in the world. It comes with data about country borders, populations, shared borders (neighbors), interstate highways, state highways, and airports. This data comes from various public sources.

STEM is designed to make it easy for developers and researchers to plug in their choice of models. It comes with spatiotemporal Susceptible/Infectious/Recovered (SIR) and Susceptible/Exposed/Infectious/Recovered (SEIR) models pre-coded with both deterministic and stochastic engines.

The parameters in any model are specified in XML configuration files. Users can easily change the weight or significance of various disease vectors (such as highways, shared borders, airports, etc). Users can also create their own unique vectors for disease. Further details are available in the user manual and design documentation.

The original version of STEM was available for downloading on IBM's Alphaworks. It contained easy to follow instructions and many examples (various diseases and maps of the world).

New developers who want to work on STEM can find useful tools, conventions, and design information in the Welcome STEM Developers article.

The STEM code repository is hosted on the Eclipse Technology code repository.

What's New

High Resolution Data

High resolution data is now available for Russia and Mexico.

Data for Mexico goes to Administrative Level 2. Work is underway to map this to zip codes.

STEM Video Tutorials (English & Spanish) on YouTube(TM)

The following url contains a full length tutorial on STEM. We are in the process of creating versions in several different languages.

And here's the Spanish Language Version too


Population Models have been implemented.


With the next STEM build, we've turned the Ordinary Differential Equation (ODE) Solvers that is at the heart of STEM into separate plugins. There are two reasons for this:

1. It makes it easy for anybody to write their own numerical ODE Solver (or any other type of solver for that matter) and plug into STEM.

2. Before, the solver being used was specified as part of the disease model. This causes problems when there are two or more diseases affecting a population since there's a risk the two diseases become "out-of-sync". For instance, the deaths caused by one of the diseases need to be fed into the model for the second disease (and vice-versa) so we can't use two different ODE solvers to generate results separately for each disease.

As a result of this, you now specify the solver (Finite Difference or Runge Kutta) when you create a new STEM scenario. IMPORTANT: Any scenario created before this change took place will default back to the simple Finite Difference ODE solver. If you want to re-enable Runge Kutta, you need to create a new scenario and drag your model etc. into it.

  • STEM has now been moved into its new status.
  • STEM will moving in the next few weeks. Eclipse has approved STEM as a top-level Eclipse Technology Project. Watch this space for updates!
  • The air travel model for every US airport is now available to drag in and use.
  • January 2009...MOVING FORWARD
  • In January, v0.4.0 of STEM became available for download, and the core team at Almaden continued to run very large scale computations using large data sets. A new Innoculator was developed for use in studying the impact of vaccination on disease spread. And, as always, work continued on eliminating bugs.
  • In November we completed a new core integration engine for STEM. Previously we only had a finite difference equation solver. At the core of the disease modeling component in STEM is a numerical differential equation solver that at each cycle determines the state of a disease at each location. Up until now, the solver was using a method based on finite difference which essentially calculates a single delta (or "change") from one cycle to the next. While this method is fast, it performs poorly when a disease is very active such as during the onset of an outbreak. STEM now has a new solver using the Runge Kutta Fehlberg method that takes advantage of an adaptive step size algorithm. Essentially the method carefully treads through periods of increased disease activity and takes great strides when there is little activity going on in the simulation. It is possible to tune the tolerance as part of the disease model, enabling very precise calculations when needed.
  • September 2008...ANALYSIS PERSPECTIVE

A new STEM Perspective was made available to support a variety of analysis, fitting, and comparison functions across multiple simulations and data sets. New Analysis and Validation Tutorials were also added.


1. Estimating Model Parameters from External Data.
2. Epidemic Analysis
3. RMS Comparison between data sets
4. Lyapunov Analysis

Model Parameter Estimation View

Given a set of data (SI, SIR, or SEIR) as a function of time, this perspective provides an estimation of the model parameters for a standard compartment model of the corresponding type. The view provides estimates for:

* beta, the disease transmission rate
* alpha, the recovery rate
* epsilon, the incubation rate
* gamma,the immunity loss rate 

Dynamical Systems View (Lyapunov Analysis)

This view displays the rate of separation in phase space (I vs. S) of the trajectories representing two different data sets or disease models. The rate of separation is then plotted vs time in a second chart. The rate of spread of any infectious disease defines a dynamical system. The Lyapunov exponent of any dynamical system describes the rate of separation of infinitesimally close trajectories in phase space.

Cross Model Comparison (RMS Compare)

Given a data set and the results of a model (or two model generated data sets), the RMS (Root Mean Square) comparison function shows the RMS difference betweent the two as a function of time.

The Epidemic View

This view displays the aggregated data (e.g., S,E,I,R, births, and deaths) as a function of time. It also creates a summary file integrating over the data from all locations in a previously run scenario. It also shows the incidence or "newly infectious count" for the aggregated data.


In July...Scenarios Caching

This new feature stores data from a scenario that was loaded recently to re-use when rerunning the scenario. For example, running a scenario for the United States the first time takes some time to read the data from the file system. Using the caching feature, consecutive runs of the same scenario won't reload the data by using the already initialized scenario from the cache. This feature can be toggled using the STEM preferences (Window->Preferences->STEM->Simulation Management->Use scenarios caching). Default is to use the caching system.

In May...A Host of New Features

Among these new features are ones that allow user to

  • Create and run multiple Experiments
    • Specify a set or sequence of parameters to run multiple experiments
    • Create a collection of modifiers for a model and link them to a scenario
    • Run a simulation from each newly created modifier in a series of simulations, i.e., to run in batch mode.
  • Import data from comma separated variable files and "play back" surveillance data in STEM as an imported disease model
  • Export the results of a simulation to comma separated variable files.

Other work was done to

  • Provide a new Mixing Model for Transportation that builds on STEM’s two transportation network models
  • Fix a major bug in running continent level scenarios
    • Allow users to account for both continuous traffic flow and (coming soon) time-delayed “packets” such as airplane or cargo shipments where the disease can spread on the transport node itself.
  • Improve the Editors allowing better drag and drop, deletion, etc. (coming soon - email a scenario!!)
  • Improve performance in graphics and other processes.
  • Revalidate population data and provide better estimates for locations in 37 countries previously missing population data.

Weekly STEM Conference Call

The STEM community has a weekly conference call. For more information, or if you wish to join, please send

How You Can Contribute to STEM

New Contributors to STEM are always welcome (please contact the developers). This includes researchers interested in disease modeling but also experts in GIS data or any other data that might be important in understanding or modeling the spread of infectious disease. We also welcome input from users and contributions to our documentation.

To contribute to STEM please use the standard eclipse process. Open a "bug" in our bugzilla ( A bug can be more than just a new defect - it can also be a new feature or other contribution. You can attach your contribution as a "patch" to the your bug ( Please also feel free to e-mail the STEM development team many of whom are Eclipse Committers and can help you join the project ( We also have a weekly phone call, newsgroup, etc.

Back to the top