A graphical user interface for dexter

Jesse Koops & Eva de Schipper

Dextergui provides a graphical user interface to the main functionality of dexter, a package for analysis of educational tests. You can start it from the R(studio) console in the following way:


With dextergui you can:

Below we give a brief tour of dextergui. The navigation bar at the top of the page lets you switch between the main components of dexter. We’ll start on the project tab.

Start or open a project

Dexter organizes test data in projects. Projects are miniature databases that are saved in a .Sqlite file and contain all your project data, including but not limited to e.g. items, scoring rules and response data. On the project overview page you can start a new project or open an existing project.

All projects created in dexter or dextergui can be opened with the open project button. For now we will focus on starting a new project. When you click start new project you will be asked where to save it. To fill your project with data, you have to take two more steps:

Add scoring rules

After starting a new project you have to import a scoring rules file. This is because dexter needs to know the scores for every permissible response for each item.

The scoring rules file is an excel or csv file and can have on of two formats

In both cases the first row must contain the exact column names. Below you see examples of the two formats.

Standard format, suitable for polytomous and mc items
item_id response item_score
S1DoCurse 0 0
S1DoCurse 1 1
S1DoCurse 2 2
S1DoScold 0 0
S1DoScold 1 1
S1DoScold 2 2
Alternative format, only suitable for mc items
item_id nOptions key
mcItem_1 3 C
mcItem_2 4 A
mcItem_3 3 A

If you have open ended items, these can be accommodated by scoring them before importing. The column response should in that case be equal to the column item_score (i.e. response 0 gets score 0, response 3 gets score 3 and so on).

After selecting a file, dexter will show a preview of the rules. If all looks ok, you should press Import to import the scoring rules.

Import response data

Once you have imported the rules, the next step is to import response data. To import response data, select the Data import tab in the navigation bar on top of the page.

Response data is imported one booklet at a time. First provide a unique name for the booklet or testform in the field booklet id. Next use the Browse button to select a file with response data. This file can be in excel or csv format and the first row must contain column names.

The column names should be item id’s which each have an exact match to the item id’s in your scoring rules, note that capitalization matters. You can also include person properties like grade or study program. It is also good practice (but not mandatory) to include a column person_id with a unique identification of each person in your data. Each row in your data, apart from the column names, should represent a single person like in the example below.

example response data for the verbal aggression dataset (Vansteelandt, 2000)
Gender S1DoCurse S1DoScold S1DoShout S1WantCurse S1WantScold S1WantShout S2DoCurse
Male 1 0 1 0 0 0 1
Female 1 2 1 2 2 2 2
Female 0 0 0 1 0 0 0
Female 2 0 0 2 2 0 1
Female 0 0 0 0 1 0 0
Female 2 2 0 0 2 0 2
Female 0 1 0 2 2 0 0
Female 1 1 0 2 2 1 1

When you select a file, dexter shows a preview of the response data. Any column with a name that doesn’t match a known item id will be ignored by default. You can import such columns as person properties by clicking the corresponding buttons.

Response data preview
column import as values
Gender ignored Male, Female, Female, Female, Female, Female, Female, Female, Female, Female, …
S1DoCurse item 1, 1, 0, 2, 0, 2, 0, 1, 1, 1, …
S1DoScold item 0, 2, 0, 0, 0, 2, 1, 1, 0, 0, …
S1DoShout item 1, 1, 0, 0, 0, 0, 0, 0, 0, 2, …
S1WantCurse item 0, 2, 1, 2, 0, 0, 2, 2, 1, 0, …
S1WantScold item 0, 2, 0, 2, 1, 2, 2, 2, 0, 0, …

If the preview looks all right you can import the response data by pressing the import button.

Classical analysis

In the classical analysis tab you will find two further tabs, booklets and items.


The booklets tab shows a table of classical statistics per booklet and plots of the item total regressions.

booklet_id nItems alpha meanP meanRit meanRir maxTestScore N
agg 24 0.888 0.339 0.527 0.468 48 316

The plot shows regressions based on two models: the interaction model is shown with a thicker but lighter line, and the Extended Rasch model is shown with a thinner, darker line. The unsmoothed data is shown as red dots. The curtains are drawn at the 5% lowest and the 5% highest sum scores. This can all be adjusted with the input fields on top of the plot.

The Rasch model fits this item very well, so the two curves practically coincide. This need not be always the case. The interaction model is quite interesting for practice. It shares the conditioning properties of the Rasch model, which means that we can predict the expected item score at each observed total score. Hence, we have the possibility to represent the model and the observed data on the same plot, without tricks or circular reasoning. This makes the interaction model a very useful tool to evaluate the fit of the Rasch or Extended Nominal.


The items tab shows classical statistics for the items on the left, including RiT, RiR and pvalue.

booklet_id item_id meanScore sdScore maxScore pvalue rit rir n
agg S1DoCurse 1.082 0.808 2 0.541 0.582 0.519 316
agg S1DoScold 0.832 0.817 2 0.416 0.651 0.596 316
agg S1DoShout 0.468 0.710 2 0.234 0.520 0.460 316
agg S1WantCurse 1.123 0.828 2 0.562 0.537 0.468 316
agg S1WantScold 0.930 0.852 2 0.465 0.593 0.528 316
agg S1WantShout 0.712 0.778 2 0.356 0.529 0.464 316
agg S2DoCurse 1.003 0.834 2 0.502 0.590 0.527 316
agg S2DoScold 0.684 0.781 2 0.342 0.633 0.578 316
agg S2DoShout 0.326 0.616 2 0.163 0.532 0.481 316
agg S2WantCurse 1.222 0.774 2 0.611 0.529 0.465 316

The distractor plot on the right shows a non-parametric regression for each response on the test score. In this case a multiple choice item which obviously has poor distractors.

Note: if you spot a key error, the table of responses right under the distractor plot allows you to change the score for a response by clicking on the respective score and changing it.

Item Response Theory

In this tab you can fit an IRT model using Conditional Maximum Likelihood or a Gibbs sampler (Bayesian analysis). For this you need a connected design (i.e. your booklets must contain overlapping items). This is shown in the network plot below.

Clicking the button fit_enorm will fit the Extended Nominal Response Model, which is a polytomous Rasch model where the scores for each response can have any integer value.


When you have calibrated your model dexter can compute ability estimates for each person. You have a choice of using a Maximimum Likelihood Estimate (MLE) or an Expected a Priori (EAP) estimate with choice of a Jeffreys or a normal prior. There is an extremely rich selection of plots to see how ability is distributed in your population(s). Enriching your data with person properties (see the projects tab) will let you make the most of these. You can also view and download the estimated abilities per person.

Score-ability tables lets you compute a score-to-ability transformation table for each booklet. The item parameters resulting from your calibration can be found in the tab item parameters.