ETIRM: Estimation Toolkit for Item Response Models

Download | Documentation | Examples | Requirements | Configuration

Werner Wothke

Release: 080301 (March 1, 2008)

ETIRM is a set of C++ classes and functions for parameter estimation of item response theory (IRT) models. Currently, the components of ETIRM can be used to compute estimates of the three-parameter logistic model for dichotomous items (including the one-parameter and two-parameter logistic models as special cases), and the generalized partial credit model for polytomous items (including the partial credit model as a special case). Parameter estimation is supported when groups of examinees that are not randomly equivalent take different sets of items, with some items in common between the sets (multiple-group estimation). One situation in which such data would arise is in the common-item nonequivalent groups equating design. Besides estimation of item parameters, ETIRM can be used to estimate latent variable distributions for groups, and latent variable values for individual examinees. ETIRM can also be used for simulating item responses from one of the supported IRT models. ETIRM is free software distributed under the BSD License.

ETIRM is a C++ toolkit for building IRT estimation programs, it is not itself a program for computing IRT parameter estimates. A stand-alone program has been created using ETIRM for multiple group estimation of dichotomous and polytomous IRT models - IRT Command Language (ICL). In addition, the source code for several simple programs created using ETIRM are included in the ETIRM distribution. The example programs, as well as the source code for ICL, illustrate how to use ETIRM to create a program.

ETIRM was developed by Brad Hanson (2000-2002) and was originally managed through the SourceForge website as part of the Social Science Measurement project. A more recent update of the ETIRM code and documentation by Werner Wothke (2008) is now hosted on this website.

Some knowledge of C++ and a C++ compiler are necessary to create a program using ETIRM. Free C++ compilers are available for Windows NT/2000/XP/Vista including the Borland 5.5 compiler and Cygwin (including the gcc compiler). Some of these compilers also run on Windows 95/98/ME platforms. Linux includes the gcc compiler.

Programs using ETIRM have been successfully compiled with the CodeWarrior 6.2 compiler on Mac OS and Windows NT, the gcc 3.4.4 on Windows Vista, gcc 2.95.2 compiler on Linux, and the Borland 5.5 compiler on Windows. There may be some problems in using ETIRM with compilers that are less compliant with the C++ standard. For example, when using ETIRM with Visual C++ 6 it is recommended that the Boost library configuration system be used (see the configuration section below for details).

Download and Install

Download ETIRM - Zip archive containing ETIRM. The archive contains a single directory named 'etirm' holding the ETIRM source files. See the README file for information about the files included in the archive. The source files in this archive are stored with DOS line breaks (the files are DOS text files).

It is suggested to unpack the zip archive into the C:\programs\etirm folder, into the sub-folders src, lib, doc, examples, and webpage, respectively. The gcc/cygwin makefiles included in the zip-archive were prepared for this folder convention.


The documentation for ETIRM consists of this file as well as comments in the source files. The source file comments were written to be compatible with the doxygen documentation system. The on-line source code documentation contains descriptions of each file, class, and function that are part of ETIRM. This documentation is also contained in the doc directory of the ETIRM distribution.

Some documentation of the numerical algorithms used in ETIRM is provided in Woodruff and Hanson (1997) and Hanson (1998). These documents describe the algorithms used in ETIRM for single group estimation. These documents do not provide a complete description of the algorithms used in ETIRM since they do not cover multiple group estimation.

ETIRM Source Files

ETIRM consists of a number of C++ classes and functions. The goal was to make the individual components of ETIRM as independent as possible, so that the components could be used individually with minimum dependence on other components of ETIRM. C++ templates are heavily used in ETIRM to facilitate this independence.

The following are brief descriptions of the source files in ETIRM. Some source files in the list are nested within other source files. A nested source file declares or defines a class derived from the class declared or defined in the file it is nested under.

Building the ETIRM Link Library

A makefile in the LIB sudirectory can be used to build the libetirm.a link library with gcc and cygwin. The makefile is easily modified to accomodate different development environments.


Example programs using ETIRM are provided in the examples directory of the ETIRM distribution. There are four example programs provided. Each program is contained in a subdirectory within the examples directory:

Included with the programs are makefiles for compiling the programs using gcc under Windows (Makefile). The first two programs include makefiles for compiling the program with the Borland 5.5 compiler ( on Windows 95/NT, although these files are not being maintained and may need some modification to work with the current version of ETIRM. The information in these makefiles can be used to compile the program using other compilers.


External classes for minimization and classes implementing vectors and matrices are required by ETIRM. These classes are used in ETIRM as typedefs or template arguments, so any classes that meet certain interface requirements can be used. Two C++ packages that can be used with ETIRM to fulfill these requirements are:

SCPPNT, or another vector and matrix package with the same interface, must be available to compile programs that use ETIRM. Uncmin++, or another minimization package having the same interface, is required for some components of ETIRM. If a vector and matrix package other than SCPPNT is used then the files etirmtypes.h and swig_etirm.h will need to be modified. If a minimization package other than Uncmin++ is used, then the files swig_etirm.h and ExamineeThetaMLE.h will need to be modified. This version of ETIRM has been successfully used with release 0.011002 of Uncmin++ and version 0.010516 of SCPPNT.

The BootstrapSample function in BootstrapSample.h and the SimulateResponses function in SimulateResponses.h require a function object generating random numbers. Random number classes from the Boost C++ library (version 1.26.0 or later) meet the requirements for these functions. The Boost library is also used in etirm_swig.h. In addition, the example program in the simpoly directory shows how to use Boost random number objects with the SimulateResponses function.

The ExamineeThetaMLE function in ExamineeThetaMLE.h uses the Fmin function for univariate minimization. The Fmin function is contained in the file Fmin.h, which is included with Uncmin++ release 080302 or later.

When building the example programs with some older, not quite standard-compliant compilers, the STLport library may have to be linked in. With the current version of the cygwin toolchain (1.5.25-7), a separate STLport library is no longer required.


There are several symbols that can be defined that will enable or disable certain features during compilation.

ETIRM uses some symbols from the Boost library configuration system. These symbols begin with BOOST_. These symbols can be manually defined without using the Boost library (when ETIRM_USE_BOOST_CONFIG is not defined). Alternatively, if ETIRM_USE_BOOST_CONFIG is defined then the Boost library is assumed to be available and whether these symbols are defined or not is determined by the Boost configuration system for the particular compiler being used.

Other Software on this website Home Page

URL of this page:

Last updated: November 18, 2014