<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.0 20120330//EN" "JATS-journalpublishing1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" article-type="editorial" dtd-version="1.0" xml:lang="en">
  <front>
    <journal-meta>
      <journal-id journal-id-type="publisher-id">IJME</journal-id>
      <journal-id journal-id-type="nlm-ta">Int J Med Educ</journal-id>
      <journal-title-group>
        <journal-title>International Journal of Medical Education</journal-title>
        <abbrev-journal-title abbrev-type="pubmed">Int J Med Educ</abbrev-journal-title>
      </journal-title-group>
      <issn pub-type="epub">2042-6372</issn>
      <publisher>
        <publisher-name>IJME</publisher-name>
      </publisher>
    </journal-meta>
    <article-meta>
      <article-id pub-id-type="publisher-id">13-171175</article-id>
      <article-id pub-id-type="doi">10.5116/ijme.629d.d88f</article-id>
      <article-categories>
        <subj-group subj-group-type="heading">
          <subject>Editorial</subject>
          <subj-group>
            <subject>Rasch Models</subject>
          </subj-group>
        </subj-group>
      </article-categories>
      <title-group>
        <article-title>R Statistics: survey and review of packages for the estimation of Rasch models</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author" corresp="yes">
          <name>
            <surname>Linacre</surname>
            <given-names>John M.</given-names>
          </name>
          <xref ref-type="aff" rid="aff1">
            <sup>1</sup>
          </xref>
        </contrib>
        <aff id="aff1"><label>1</label>Research Director, Winsteps.com, USA</aff>
      </contrib-group>
      <author-notes>
        <corresp id="cor1">Correspondence: John M. Linacre, Research Director, Winsteps.com, USA. Email: <email xlink:href="mike@winsteps.com">mike@winsteps.com</email></corresp>
      </author-notes>
      <pub-date pub-type="epub">
        <day>24</day>
        <month>06</month>
        <year>2022</year>
      </pub-date>
      <pub-date pub-type="collection">
        <year>2022</year>
      </pub-date>
      <volume>13</volume>
      <fpage>171</fpage>
      <lpage>175</lpage>
      <history>
        <date date-type="accepted">
          <day>06</day>
          <month>06</month>
          <year>2022</year>
        </date>
        <date date-type="received">
          <day>31</day>
          <month>05</month>
          <year>2022</year>
        </date>
      </history>
      <permissions>
        <copyright-statement>Copyright: &#xA9; 2022 John M. Linacre</copyright-statement>
        <copyright-year>2022</copyright-year>
        <license license-type="open-access" xlink:href="http://creativecommons.org/licenses/by/3.0">
          <license-p>This is an Open Access article distributed under the terms of the Creative Commons Attribution License which permits unrestricted use of work provided the original work is properly cited. <ext-link ext-link-type="uri" xlink:href="http://creativecommons.org/licenses/by/3.0/">http://creativecommons.org/licenses/by/3.0/</ext-link></license-p>
        </license>
      </permissions>
      <abstract>
<sec><title>Abstract</title>
<p>R Statistics is a comprehensive and widely-used suite of
packages for statistical operations. From 27 R packages indexed with the word
&#x201C;Rasch&#x201D;, 11 packages capable of Rasch estimation and analysis are identified
and critiqued. A commercial Rasch application is included for comparison. Three
R data frames are used. A larger and a smaller 0/1 data frame are analyzed with
the Dichotomous Rasch Model. A polytomous 0/1/2 data frame is analyzed with the
Partial Credit Model. The R packages can all use the same data frame. They are
easy to use and mostly fast, though their documentation is generally skimpy.
Every package has obvious shortcomings, but the unique features of each package
could make them all useful. For general Rasch estimation and fit analysis of dichotomous
data, three packages stand out: eRm, TAM and autoRasch. Two packages stand out
	for polytomous data: TAM and autoRasch.</p></sec>
	</abstract>
      <kwd-group kwd-group-type="author">
        <kwd>R Statistics</kwd>
        <kwd>R packages</kwd>
        <kwd>estimation of Rasch models</kwd>
        <kwd>large Dichotomous Data Frame</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
<sec sec-type="intro"><title>Introduction</title>
<p>R Statistics is a comprehensive collection of software
packages for statistical analysis. These packages are developed and contributed
by volunteers, and then made available to anyone. Some packages are intended to
be long-term and authoritative. Other packages are implemented for one project,
contributed to R Statistics by their authors, and then the authors move on to
other projects. Advantages of R packages are that they are free and immediately
available, and all packages use the same data file and instruction formats. The
disadvantages are that their documentation may be incomplete. They usually have
no support from their authors, and bugs in the software may not be remedied. As
of this writing, there are over 2 million R users<xref ref-type="bibr" rid="r1"><sup>1</sup></xref>and more than
18,000 R packages.<xref ref-type="bibr" rid="r2"><sup>2</sup></xref> Many R packages perform similar functions. It can be difficult to identify which packages best meet your needs.</p>
<p>Here I evaluate R packages for estimating person ability
(thetas, rows in the data frame) and item difficulty (betas, columns in the
data frame) by means of Rasch analysis. The words &#x201C;ability&#x201D; and &#x201C;difficulty&#x201D;
are for convenience. Different words apply in different contexts, but the
underlying algebra remains the same. A search of R Statistics packages with the
word &#x201C;Rasch&#x201D; in their titles or descriptions (metadata) was conducted using
METACRAN.<xref ref-type="bibr" rid="r3"><sup>3</sup></xref>  This produced the names of 27 R packages. 13 of these
packages do not perform Rasch estimation: DIFboost, DIFlasso, pwrRasch,
RaschSampler, Rwinsteps, scaleAlign, tcl, birtr, iarm, mixRaschTools, OPDOE,
dscore, whomds. Packages psychomix and psychotree are conveniently accessed
through package psychotools. Package RM.weights is not recommended because it crashed on the 0/1 data frame described below.</p>
<p>Several of the 11 remaining packages support more than
one method of estimating Rasch measures. In general, the estimation method more
prominent in the package documentation is chosen. An exception is package sirt
which implements many estimation methods. Three of these are included. Further,
a commercial Rasch software package, Winsteps,<xref ref-type="bibr" rid="r4"><sup>4</sup></xref>is included for comparison purposes with two estimation methods.</p>
<p>For practical use, we are looking for packages than can
estimate Rasch person and item measures (parameter values) for dichotomous,
binary, 0/1 data and also for polytomous, rating scale, 0/1/2/&#x2026; data using the
Partial Credit Model. The packages also need to support quality-control fit
analysis for individual persons and items. To assist with this, three R data frames were constructed, representing the typical use of the Rasch model.</p></sec>

<sec><title>Estimation with a large Dichotomous Data Frame</title>
<p>A rectangular dataset<xref ref-type="bibr" rid="r5"><sup>5</sup></xref> of 105 items (columns) and 200 persons (rows) containing dichotomous 0/1 data was simulated to fit the Rasch model. 5 of these items deliberately have some misfit. Also, no item or person has an extreme score of all 0s or all 1s. There is no missing data. There are no person identifiers in the data frame. This dataset was loaded into an R data frame and analyzed by the Dichotomous Rasch Model (RM). In addition, the packages were checked for their robustness against extreme scores and missing data. This investigation was conducted using R version 4.1.3. <xref ref-type="table" rid="t1">Table 1</xref> lists the 15 estimation options considered here. Item difficulties (betas) were estimated by each package and adjusted so that the mean value of each set of item difficulties was zero. The 15 estimates of each item difficulty were then averaged. For all the packages, the correlation between their set of item difficulties and the set of average difficulties was 1.000. The relationship between the average estimates in logits and the percent-success (p-value) on the items is shown in <xref ref-type="fig" rid="f1">Figure 1</xref>. The curve has the expected curvilinear monotonic shape. The x-axis has the possible range of 0-100, and the y-axis is infinite in both directions.</p>
					
<table-wrap id="t1" position="float"><label>Table 1</label><caption><title>R Packages for Rasch Estimation from Dichotomous Data</title></caption>
<table width="100%">
<thead>
<tr style="border-top: 1pt solid; border-bottom: 1pt solid;"><th colspan="8" align="left" style="border-top: 1pt solid; border-bottom: 1pt solid; width: 641px;"/></tr>
<tr style="border-top: 1pt solid; border-bottom: 1pt solid;">
<th rowspan="2" align="left" style="border-top: 1pt solid; border-bottom: 1pt solid; width: 71px;">Package</th>
<th rowspan="2" align="left" style="border-top: 1pt solid; border-bottom: 1pt solid; width: 48px;">Version</th>
<th rowspan="2" align="left" style="border-top: 1pt solid; border-bottom: 1pt solid; width: 80px;">Beta</th>
<th colspan="2" align="left" style="border-top: 1pt solid; border-bottom: 1pt solid; width: 95px;">Extreme</th>
<th rowspan="2" align="left" style="border-top: 1pt solid; border-bottom: 1pt solid; width: 66px;">Missing data</th>
<th rowspan="2" align="left" style="border-top: 1pt solid; border-bottom: 1pt solid; width: 161px;">Dichotomous analysis</th>
<th rowspan="2" align="left" style="border-top: 1pt solid; border-bottom: 1pt solid; width: 121px;">Theta output</th>
</tr>
<tr style="border-top: 1pt solid; border-bottom: 1pt solid;">
<th align="left" style="border-top: 1pt solid; border-bottom: 1pt solid; width: 38px;">item</th>
<th align="left" style="border-top: 1pt solid; border-bottom: 1pt solid; width: 57px;">person</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left" style="width: 71px;">autoRasch</td>
<td align="left" style="width: 48px;">0.1.5</td>
<td align="left" style="width: 80px;">JMLE</td>
<td align="left" style="width: 38px;">&#x2021;</td>
<td align="left" style="width: 57px;">&#x2714;</td>
<td align="left" style="width: 66px;">&#x2714;</td>
<td align="left" style="width: 161px;">res &lt;- pcm(data)</td>
<td align="left" style="width: 121px;">res$theta</td>
</tr>
<tr>
<td align="left" style="width: 71px;">eRm</td>
<td align="left" style="width: 48px;">1.0-2</td>
<td align="left" style="width: 80px;">CMLE</td>
<td align="left" style="width: 38px;">&#x2020;</td>
<td align="left" style="width: 57px;">&#x2020;</td>
<td align="left" style="width: 66px;">&#x2714;</td>
<td align="left" style="width: 161px;">res &lt;- RM(data)</td>
<td align="left" style="width: 121px;">summary(person.parameter(res))</td>
</tr>
<tr>
<td align="left" style="width: 71px;">ltm</td>
<td align="left" style="width: 48px;">1.2-0</td>
<td align="left" style="width: 80px;">MMLE</td>
<td align="left" style="width: 38px;">&#x2714;</td>
<td align="left" style="width: 57px;">&#x2714;</td>
<td align="left" style="width: 66px;">&#x2714;</td>
<td align="left" style="width: 161px;">res &lt;- rasch(data, constraint = cbind(ncol(data) + 1, 1))</td>
<td align="left" style="width: 121px;">&#x2718;factor.scores(res)</td>
</tr>
<tr>
<td align="left" style="width: 71px;">mixRasch</td>
<td align="left" style="width: 48px;">1.1</td>
<td align="left" style="width: 80px;">JMLE</td>
<td align="left" style="width: 38px;">&#x2020;</td>
<td align="left" style="width: 57px;">&#x2714;</td>
<td align="left" style="width: 66px;">&#x2714;</td>
<td align="left" style="width: 161px;">res &lt;- mixRasch(data,1,50, conv.crit=.0001, n.c=1)</td>
<td align="left" style="width: 121px;">res$person.par$theta</td>
</tr>
<tr>
<td align="left" style="width: 71px;">pairwise</td>
<td align="left" style="width: 48px;">0.5.0-2</td>
<td align="left" style="width: 80px;">PMLE</td>
<td align="left" style="width: 38px;">&#x2714;</td>
<td align="left" style="width: 57px;">&#x2714;</td>
<td align="left" style="width: 66px;">&#x2714;</td>
<td align="left" style="width: 161px;">&#x2718;res &lt;- pair(daten = data, m = 2)</td>
<td align="left" style="width: 121px;">&#x2718;summary(pers(res))</td>
</tr>
<tr>
<td align="left" style="width: 71px;">pcIRT</td>
<td align="left" style="width: 48px;">0.2.4</td>
<td align="left" style="width: 80px;">CMLE</td>
<td align="left" style="width: 38px;">&#x2021;</td>
<td align="left" style="width: 57px;">&#x2714;</td>
<td align="left" style="width: 66px;">&#x2718;</td>
<td align="left" style="width: 161px;">res &lt;- DRM(data)</td>
<td align="left" style="width: 121px;">&#x2718;</td>
</tr>
<tr>
<td align="left" style="width: 71px;">plRasch</td>
<td align="left" style="width: 48px;">1.0</td>
<td align="left" style="width: 80px;">LLA</td>
<td align="left" style="width: 38px;">&#x2714;</td>
<td align="left" style="width: 57px;">&#x2714;</td>
<td align="left" style="width: 66px;">&#x2718;</td>
<td align="left" style="width: 161px;">res &lt;- RaschPLE(data, rep(1, ncol(data)), 1)</td>
<td align="left" style="width: 121px;">&#x2718;</td>
</tr>
<tr>
<td align="left" style="width: 71px;">psychotools</td>
<td align="left" style="width: 48px;">0.7-1</td>
<td align="left" style="width: 80px;">CMLE</td>
<td align="left" style="width: 38px;">&#x2020;</td>
<td align="left" style="width: 57px;">&#x2020;</td>
<td align="left" style="width: 66px;">&#x2714;</td>
<td align="left" style="width: 161px;">res &lt;- raschmodel(data)</td>
<td align="left" style="width: 121px;">&#x2718;personpar(res)</td>
</tr>
<tr>
<td align="left" style="width: 71px;">sirt</td>
<td align="left" style="width: 48px;">3.11-21</td>
<td align="left" style="width: 80px;">MMLE</td>
<td align="left" style="width: 38px;">&#x2021;</td>
<td align="left" style="width: 57px;">&#x2714;</td>
<td align="left" style="width: 66px;">&#x2714;</td>
<td align="left" style="width: 161px;">res &lt;- rasch.mml2(data)</td>
<td align="left" style="width: 121px;">wle.rasch(dat=data, b=res$item$b)</td>
</tr>
<tr>
<td align="left" style="width: 71px;">sirt</td>
<td align="left" style="width: 48px;">3.11-21</td>
<td align="left" style="width: 80px;">PMLE</td>
<td align="left" style="width: 38px;">&#x2020;</td>
<td align="left" style="width: 57px;">&#x2714;</td>
<td align="left" style="width: 66px;">&#x2714;</td>
<td align="left" style="width: 161px;">&#x2718;res &lt;- rasch.pairwise(data)</td>
<td align="left" style="width: 121px;">(as above)</td>
</tr>
<tr>
<td align="left" style="width: 71px;">sirt</td>
<td align="left" style="width: 48px;">3.11-21</td>
<td align="left" style="width: 80px;">VA</td>
<td align="left" style="width: 38px;">&#x2021;</td>
<td align="left" style="width: 57px;">&#x2714;</td>
<td align="left" style="width: 66px;">&#x2718;</td>
<td align="left" style="width: 161px;">res &lt;- rasch.va(data)</td>
<td align="left" style="width: 121px;">(as above)</td>
</tr>
<tr>
<td align="left" style="width: 71px;">TAM</td>
<td valign="bottom" align="left" style="width: 48px;">3.7-16</td>
<td align="left" style="width: 80px;">MMLE</td>
<td valign="bottom" align="left" style="width: 38px;">&#x2021;</td>
<td valign="bottom" align="left" style="width: 57px;">&#x2714;</td>
<td valign="bottom" align="left" style="width: 66px;">&#x2714;</td>
<td valign="bottom" align="left" style="width: 161px;">res &lt;- tam.mml(data)</td>
<td valign="bottom" align="left" style="width: 121px;">tam.wle(res)$theta</td>
</tr>
<tr>
<td align="left" style="width: 71px;">tmt</td>
<td align="left" style="width: 48px;">0.3.0-20</td>
<td align="left" style="width: 80px;">CMLE</td>
<td align="left" style="width: 38px;">&#x2020;</td>
<td align="left" style="width: 57px;">&#x2020;</td>
<td align="left" style="width: 66px;">&#x2714;</td>
<td align="left" style="width: 161px;">res &lt;- tmt_rm(data)</td>
<td align="left" style="width: 121px;">&#x2718;</td>
</tr>
<tr>
<td align="left" style="width: 71px;">Winsteps</td>
<td valign="bottom" align="left" style="width: 48px;">5.2.2</td>
<td align="left" style="width: 80px;">CMLE</td>
<td valign="bottom" align="left" style="width: 38px;">&#x2714;</td>
<td valign="bottom" align="left" style="width: 57px;">&#x2714;</td>
<td valign="bottom" align="left" style="width: 66px;">&#x2714;</td>
<td valign="bottom" align="left" style="width: 161px;">Excel/RSSST menu</td>
<td valign="bottom" align="left" style="width: 121px;">(same)</td>
</tr>
<tr style="border-bottom: 1pt solid;">
<td align="left" style="border-bottom: 1pt solid; width: 71px;">Winsteps</td>
<td valign="bottom" align="left" style="border-bottom: 1pt solid; width: 48px;">5.2.2</td>
<td align="left" style="border-bottom: 1pt solid; width: 80px;">JMLE</td>
<td valign="bottom" align="left" style="border-bottom: 1pt solid; width: 38px;">&#x2714;</td>
<td valign="bottom" align="left" style="border-bottom: 1pt solid; width: 57px;">&#x2714;</td>
<td valign="bottom" align="left" style="border-bottom: 1pt solid; width: 66px;">&#x2714;</td>
<td valign="bottom" align="left" style="border-bottom: 1pt solid; width: 161px;">Excel/RSSST menu</td>
<td valign="bottom" align="left" style="border-bottom: 1pt solid; width: 121px;">(same)</td>
</tr>
<tr><td colspan="8" align="left" style="width: 641px;"/></tr>
</tbody>
</table>
<table-wrap-foot><p>&#x2714; = performance is satisfactory
&#x2718; = performance is not available, failed or is not satisfactory
&#x2020; = Analysis proceeds, but extreme items or persons are omitted or ignored
&#x2021; = Analysis fails. Extreme items must be removed from data frame.
CMLE = Conditional Maximum Likelihood Estimation; JMLE = Joint MLE; MMLE = Marginal MLE; PMLE = Pairwise MLE; LLA = Log-Linear Association; VA = Variational Approximation</p></table-wrap-foot></table-wrap>

<fig id="f1" position="float" fig-type="figure"><label>Figure 1</label><caption><p>Plot of the average item difficulty estimates against the item p-values for the simulated dichotomous dataset</p></caption>
<graphic xlink:href="96b76f85bb96bab037048f96f7cd5b22.jpg"/></fig>
			
		
<p>Most item estimates were less than .01 logits away from the corresponding overall average estimates. However, some of the estimates made by sirt:PMLE and pairwise were more than 0.1 logits away from the overall average, as shown in <xref ref-type="fig" rid="f2">Figure 2</xref>. Also, for each of these two estimators, some items with the same p-value (x-axis) have different logit estimates (y-axis), as shown by the same icon appearing more than once in a vertical column in <xref ref-type="fig" rid="f2">Figure 2</xref>. This is a feature of PMLE (Pairwise maximum Likelihood Estimation) but is contrary to the general Rasch principle that &#x201C;the same total score by the same persons (no missing data) produces the same item difficulty, regardless of the items' response patterns.&#x201D;</p>
<p>The next consideration is the estimation of person measures (thetas). Packages pcIRT, plRasch and tmt did not produce these. Packages ltm, pairwise and psychotools did not output thetas in a format directly suitable for fit analysis (or, at least, not that I could determine from their documentation). Each person measure is estimated using the package&#x2019;s set of logit item difficulties and the person&#x2019;s raw score. Since the item difficulties are almost the same for the 9 remaining estimation options, the differences between the estimated person measures are expected to be small. The standard deviations of the 9 sets of thetas were between 0.966 and 0.980 logits, and so essentially the same despite packages implementing different theta estimators.</p>
<p>In practical situations, datasets may have items or persons with extreme scores and may contain missing data (R Statistics code &#x201C;NA&#x201D;). Omitting or ignoring items with extreme scores from the output may be annoying but is unlikely to be misleading. Omitting or ignoring persons with extreme scores may lead to misleading summary statistics and so incorrect inferences later. The inability to analyze data frames with missing data may require a change of Rasch package at an inconvenient time. Package capabilities for these are shown in <xref ref-type="table" rid="t1">Table 1</xref>, and incapable packages are dropped from further consideration.</p>
<p>Differences between Rasch options are more pronounced with smaller datasets. Accordingly, an R data frame was constructed from the &#x201C;Knox Cube Test&#x201D; (KCT) Ref.6 0/1 data, omitting items and persons with extreme scores and with no missing data. This has 14 items and 34 persons. The item estimates for the 8 packages all correlate 1.00 with the average of all 8 estimates. <xref ref-type="table" rid="t2">Table 2</xref> shows that the item estimates for the JMLE Packages are somewhat more dispersed than the CMLE and MMLE estimates. This indicates that mixing estimates produced by different R packages is to be avoided. When they are accumulated together, they must be linearly transformed so that they are all on the same measurement scale, similarly to the same way that inches and centimeters are rescaled when they are combined.</p>


<fig id="f2" position="float" fig-type="figure"><label>Figure 2</label><caption><p>Plot of selected item difficulty estimates against the item p-values values for the simulated dichotomous dataset</p></caption>
<graphic xlink:href="c934f1aeb3c6e1fde581d665554c256f.jpg"/></fig>		
		
		
<table-wrap id="t2" position="float"><label>Table 2</label><caption><title>R Packages for Rasch Estimation from Dichotomous Data (Knox Cube Test) and PCM data (Liking for Science)</title></caption>
<table width="100%">
<thead>
<tr style="border-top: 1pt solid; border-bottom: 1pt solid;">
<th rowspan="2" align="left" style="border-top: 1pt solid; border-bottom: 1pt solid; width: 81px;">Package</th>
<th rowspan="2" align="left" style="border-top: 1pt solid; border-bottom: 1pt solid; width: 84px;">Item Estimation Method</th>
<th rowspan="2" align="left" style="border-top: 1pt solid; border-bottom: 1pt solid; width: 75px;">Item Estimate S.D. for KCT</th>
<th rowspan="2" align="left" style="border-top: 1pt solid; border-bottom: 1pt solid; width: 79px;">Item Estimate S.D. for PCM</th>
<th colspan="2" align="left" style="border-top: 1pt solid; border-bottom: 1pt solid; width: 125px;">Diagnostic Fit Statistics</th>
<th colspan="2" align="left" style="border-top: 1pt solid; border-bottom: 1pt solid; width: 189px;">Recommended R Packages</th>
</tr>
<tr style="border-top: 1pt solid; border-bottom: 1pt solid;">
<th align="left" style="border-top: 1pt solid; border-bottom: 1pt solid; width: 59px;">Items</th>
<th align="left" style="border-top: 1pt solid; border-bottom: 1pt solid; width: 66px;">Persons</th>
<th align="left" style="border-top: 1pt solid; border-bottom: 1pt solid; width: 85px;">Dichotomous</th>
<th align="left" style="border-top: 1pt solid; border-bottom: 1pt solid; width: 104px;">PCM</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left" style="width: 81px;">eRm</td>
<td align="left" style="width: 84px;">CMLE</td>
<td align="left" style="width: 75px;">3.04</td>
<td align="left" style="width: 79px;"><italic>1.71</italic></td>
<td align="left" style="width: 59px;">&#x2714;</td>
<td align="left" style="width: 66px;">&#x2714;</td>
<td align="left" style="width: 85px;">&#x2714;</td>
<td align="left" style="width: 104px;">&#xA0;</td>
</tr>
<tr>
<td align="left" style="width: 81px;">sirt</td>
<td align="left" style="width: 84px;">MMLE</td>
<td align="left" style="width: 75px;">3.09</td>
<td align="left" style="width: 79px;">1.20</td>
<td align="left" style="width: 59px;">&#x2718;</td>
<td align="left" style="width: 66px;">&#x2718;</td>
<td align="left" style="width: 85px;">&#xA0;</td>
<td align="left" style="width: 104px;">&#xA0;</td>
</tr>
<tr>
<td align="left" style="width: 81px;">TAM</td>
<td align="left" style="width: 84px;">MMLE</td>
<td align="left" style="width: 75px;">3.09</td>
<td align="left" style="width: 79px;">1.20</td>
<td align="left" style="width: 59px;">&#x2714;</td>
<td align="left" style="width: 66px;">&#x2714;</td>
<td align="left" style="width: 85px;">&#x2714;</td>
<td align="left" style="width: 104px;">&#x2714;</td>
</tr>
<tr>
<td align="left" style="width: 81px;">Winsteps</td>
<td align="left" style="width: 84px;">CMLE</td>
<td align="left" style="width: 75px;">3.13</td>
<td align="left" style="width: 79px;">1.19</td>
<td align="left" style="width: 59px;">&#x2714;</td>
<td align="left" style="width: 66px;">&#x2714;</td>
<td align="left" style="width: 85px;">&#xA0;</td>
<td align="left" style="width: 104px;">&#xA0;</td>
</tr>
<tr>
<td align="left" style="width: 81px;">mixRasch</td>
<td align="left" style="width: 84px;">JMLE</td>
<td align="left" style="width: 75px;">3.15</td>
<td align="left" style="width: 79px;">1.25</td>
<td align="left" style="width: 59px;">&#x2714;</td>
<td align="left" style="width: 66px;">&#x2718;</td>
<td align="left" style="width: 85px;">&#xA0;</td>
<td align="left" style="width: 104px;">&#xA0;</td>
</tr>
<tr>
<td align="left" style="width: 81px;">autoRasch</td>
<td align="left" style="width: 84px;">JMLE</td>
<td align="left" style="width: 75px;">3.26</td>
<td align="left" style="width: 79px;">1.23</td>
<td align="left" style="width: 59px;">&#x2714;</td>
<td align="left" style="width: 66px;">&#x2714;</td>
<td align="left" style="width: 85px;">&#x2714;</td>
<td align="left" style="width: 104px;">&#x2714;</td>

</tr>
<tr>
<td align="left" style="width: 81px;">Winsteps</td>
<td align="left" style="width: 84px;">JMLE</td>
<td align="left" style="width: 75px;">3.49</td>
<td align="left" style="width: 79px;">1.25</td>
<td align="left" style="width: 59px;">&#x2714;</td>
<td align="left" style="width: 66px;">&#x2714;</td>
<td align="left" style="width: 85px;">&#xA0;</td>
<td align="left" style="width: 104px;">&#xA0;</td>
</tr>
<tr style="border-bottom: 1pt solid;">
<td align="left" style="border-bottom: 1pt solid; width: 81px;">sirt</td>
<td align="left" style="border-bottom: 1pt solid; width: 84px;">VA</td>
<td align="left" style="border-bottom: 1pt solid; width: 75px;">3.60</td>
<td align="left" style="border-bottom: 1pt solid; width: 79px;">&#x2718;</td>
<td align="left" style="border-bottom: 1pt solid; width: 59px;">&#x2718;</td>
<td align="left" style="border-bottom: 1pt solid; width: 66px;">&#x2718;</td>
<td align="left" style="border-bottom: 1pt solid; width: 85px;">&#xA0;</td>
<td align="left" style="border-bottom: 1pt solid; width: 104px;">&#xA0;</td>
</tr>
</tbody>
</table>
<table-wrap-foot><p>&#x2714; = performance is satisfactory
&#x2718; = performance is not available, failed or is not satisfactory</p></table-wrap-foot></table-wrap>

<p>An essential step in the Rasch analysis of empirical data is investigating the fit of the responses by each person and to each item. Three R packages provide satisfactory estimation and fit analysis for a dichotomous data set: autoRasch, eRm and TAM.</p>
</sec>  
<sec><title>Polytomous data: PCM</title>
<p>A rectangular dataset of 24 items and 74 persons containing 0/1/2 data was extracted from the &#x201C;Liking for Science&#x201D;<xref ref-type="bibr" rid="r7"><sup>7</sup></xref> datasets. Again extreme scores were omitted, and also all 3 categories were observed on every item. This dataset is analyzed by the Partial Credit Model (PCM). <xref ref-type="table" rid="t2">Table 2</xref> shows 7 R packages capable of meaningful PCM analysis with a 3-category rating scale. The item estimates for 6 packages correlate 1.000 with the average of all the packages. Package eRm correlates to 0.993 and also has a noticeably larger item estimate S.D. than the other packages. Consequently, eRm is not recommended for polytomous data. Packages autoRasch and TAM are recommended for PCM analysis.</p>
</sec>
<sec sec-type="discussion"><title>Discussion</title>
<p>It is no surprise that eRm (more than 100,000 downloads from the RStudio CRAN mirror)<xref ref-type="bibr" rid="r8"><sup>8</sup></xref> and TAM (more than 250,000 downloads) are among the most capable Rasch R packages. They are widely used. AutoRasch (more than 1,000 downloads) is a new package released in 2022, designed to have special functions, but which is also very capable in standard situations. In fact, each Rasch R package has unique features. These may make a different package more suitable for your application. However, the generally skimpy documentation of the packages can make their use more challenging, and expect to have to work around any programming bugs. Advantages of these packages include that they can all analyze the same. rdata data frames. Their output can also be displayed with R plotting packages, such as WrightMap, though this may take some effort the first time. In general, using these R packages is easy and fast.</p>
<sec><title>Conflict of Interest</title>
<p>The author declares that they have no conflict of interest.</p>
</sec></sec>
  </body>
  <back>
    <ref-list><title>References</title>
<ref id="r1"><label>1</label><mixed-citation publication-type="other">R Consortium Group. [Cited 26 May 2022]; Available from: https://www.r-consortium.org/.
</mixed-citation></ref><ref id="r2"><label>2</label><mixed-citation publication-type="other">CRAN Contributed packages. [Cited 26 May 2022]; Available from: https://cran.r-project.org/web/packages/.
</mixed-citation></ref><ref id="r3"><label>3</label><mixed-citation publication-type="other">METACRAN. [Cited 26 May 2022]; Available from: https://www.r-pkg.org. 
</mixed-citation></ref><ref id="r4"><label>4</label><mixed-citation publication-type="other">Linacre JM. Winsteps&amp;#x00AE; (Version 5.2.2) [Computer Software]. Portland, Oregon: Winsteps.com. 2022. [Cited 26 May 2022]; Available from: https://www.winsteps.com/.
</mixed-citation></ref><ref id="r5"><label>5</label><mixed-citation publication-type="other">Simulated 0/1 data frame of 105 columns and 200 rows. [Cited 26 May 2022]; Available from: https://www.winsteps.com/a/rstatdata.rdata.
</mixed-citation></ref><ref id="r6"><label>6</label><mixed-citation publication-type="other">Wright BD, Stone MH.  Best test design, Chicago: MESA Press, 1979. [Cited 26 May 2022]; Available from: www.rasch.org.
</mixed-citation></ref><ref id="r7"><label>7</label><mixed-citation publication-type="other">Wright BD, Masters GN. Rating scale analysis, Chicago: MESA Press, 1982. [Cited 26 May 2022]; Available from: www.rasch.org.
</mixed-citation></ref><ref id="r8"><label>8</label><mixed-citation publication-type="other">R Package downloaded statistics. [Cited 26 May 2022]; Available from: https://cran.r-project.org/web/packages/ from R Package &amp;#x201C;dlstats&amp;#x201D;.
</mixed-citation></ref></ref-list>
  </back>
</article>
