# install.packages("remotes")
remotes::install_github("fwijayanto/autoRasch", build_manual = TRUE, build_vignettes = TRUE)
library(autoRasch)
In this autoRasch package four models are implemented, i.e., the PCM, the GPCM, the PCM-DIF, and the GPCM-DIF. For binary responses, the PCM and GPCM will transform to the Rasch model and the 2-PL model, respectively.
The Partial Credit Model (PCM) is the model multi-categorical responses, which generalizes the Rasch model.
<- pcm(shortDIF)
pcm_res #> [1] "Estimation starts..."
#> [1] "...done!"
Similar with the PCM the PCM-DIF generalize the Rasch model even more by parameterizing the DIF effect in the items. However, in the PCM-DIF, we need to define the groups of the subjects. In this simulated dataset, the groups are pre-designed as the first half and the rest.
<- matrix(c(rep(0,50),rep(1,50)),ncol = 1, dimnames = list(c(1:100),c("cov")))
grMap <- pcm_dif(shortDIF, groups_map = grMap)
pcmdif_res #> [1] "Estimation starts..."
#> [1] "...done!"
Some of the S3 generic functions are implemented to this model, i.e., summary() and print(). However, to filter which model’s parameter to plot, I add par
argument. It could be filled in using theta
, beta
, gamma
, alpha
, and delta
, depends on the models applied. Ignoring this argument shows all estimated parameters of the model. Item Loc.
represents the item location which is obtained by averaging the threshold values. *
indicates the occurence of a disordered threshold.
summary(pcm_res, par="beta")
#>
#>
#> The estimated difficulty scores:
#> Th_1 Th_2 Item Loc.
#> Item1 -4.12 -1.46 -2.79
#> Item2 0.80 -0.57 0.12 *
#> Item3 1.92 3.00 2.46
#> Item4 0.16 0.19 0.17
#>
#> The most difficult item: Item3
#> The easiest item: Item1
#> There are 1 items which have disordered thresholds.
#> '*' Item has disordered thresholds.
summary(pcmdif_res, par="delta")
#>
#>
#> The estimated DIF effects (gap of difficulties) (delta):
#> cov
#> Item4 2.18
For PCM and PCM-DIF, the estimated parameters could be plotted as a Person-Item map. However, as for PCM-DIF the items with DIF will be resolved by splitting the items based on the given groups. As the results, we may obtain more than one item with the same number.
plot_PImap(pcm_res, main = "Person-Item map of the PCM")
plot_PImap(pcmdif_res, main = "Person-Item map of the PCM-DIF")
Since item19 is a DIF-item, there are two item19 in the Person-Item map of the PCM-DIF, the I 19
and I 19_a
for the reference and the focal group, respectively. Red color means that there is a threshold disorder within the item.
The plot_ICC()
and plot_EVC()
could be used to plot the item characteristic curve (ICC) and the expected value curve (EVC), respectively, for each item.
plot_ICC(pcm_res, itemno = 2, main = "ICC of I 17; estimated using PCM")
To implement the standard Rasch goodness-of-fit statistics, a specific S3 function have been developed to compute the (item/person) fit statistics, i.e., fitStats()
function, for the PCM and the PCM-DIF. To summarize only item or person statistic, itemfit()
or personfit()
could be used, respectively.
<- fitStats(pcm_res)
pcm_fit #> [1] "Estimation starts..."
#> [1] "...done!"
itemfit(pcm_fit)
#>
#> Item Fit Statistics:
#>
#> OutfitMnSq InfitMnSq OutfitZSTD InfitZSTD Alpha
#> Item1 0.40 0.57 -1.86 -2.78 1.16
#> Item2 0.41 0.66 -1.61 -2.59 1.14
#> Item3 0.57 0.71 -0.66 -1.60 1.09
#> Item4 0.96 1.16 -0.02 1.14 0.93
<- fitStats(pcmdif_res)
pcmdif_fit #> [1] "Estimation starts..."
#> [1] "...done!"
itemfit(pcmdif_fit)
#>
#> Item Fit Statistics:
#>
#> OutfitMnSq InfitMnSq OutfitZSTD InfitZSTD Alpha
#> Item1 0.32 0.49 -2.12 -3.48 1.18
#> Item2 0.30 0.47 -2.08 -4.30 1.18
#> Item3 0.48 0.62 -0.81 -2.29 1.10
#> Item4 0.51 0.71 -1.36 -2.04 1.11
The Generalized Partial Credit Model (GPCM) generalizes the Partial Credit Model by modelling the predictability of the subjects’ responses (discrimination parameters).
<- gpcm(shortDIF)
gpcm_res #> [1] "Estimation starts..."
#> [1] "...done!"
For further generalization to the PCM, the Generalized Partial Credit Model with DIF (GPCM-DIF) not only models the predictability, but also the effects of the differential functioning of each items.
<- matrix(c(rep(0,50),rep(1,50)),ncol = 1, dimnames = list(c(1:100),c("cov")))
grMap <- gpcm_dif(shortDIF, groups_map = grMap)
gpcmdif_res #> [1] "Estimation starts..."
#> [1] "...done!"
Similar to the PCM and PCM-DIF, some of the S3 generic functions such as summary()
and print()
also applied to these models.
summary(gpcm_res, par="alpha")
#>
#>
#> The estimated discrimination parameters:
#> alpha
#> Item1 1.1603282
#> Item2 1.1403392
#> Item3 1.0904078
#> Item4 0.9339005
summary(gpcmdif_res, par="delta")
#>
#>
#> The estimated DIF effects (gap of difficulties):
#> cov
#> Item4 2.23808
Unlike plot_PImap()
which only implemented to the PCM and PCM-DIF, plot_EVC()
and plot_ICC()
are also implemented to the GPCM and the GPCM-DIF.