- Specified the use of
select()
to bedplyr::select()
across all functions.
- Specified the use of
separate()
to betidyr::separate()
across all functions to avoid namespace issues (hellolordif::separate()
).
- Sorry for the multitude of minor fixes... I have now implemented a way to automatically set axis limits in figures based on the data in
RIpfit()
figure outputs, similar to what was done inRItargeting()
recently. This will be implemented in more functions at some point.
- More fixes for
RIpfit()
and added an option to set cutoff values for infit ZSTD (default is +/- 1.96).
- Fixed the optional grouping variable for
RIpfit()
and added an option to output a vector of row numbers for respondents with deviant infit ZSTD.
- Added check of duplicate theta values in
RIscoreSE()
which gives a warning that you should extend the score_range option. Please also use the same range when estimating theta values withRIestThetas()
. - Added checks for
RItargeting()
and auto-adjustment of xlim range if person/item locations are outside the (default) xlim values - NOTE: these changes have not been extensively checked yet, please email me at magnus.p.johansson@ri.se if you encounter any issues.
- Added some flexibility to
RItif()
to make optional cutoff settings displayed in figure, with or without sample PSI.
- Fix for how
RItif()
retrieves max/min theta values of the chosen TIF cutoff RItif()
added PSI values in figure and hopefully improved interpretability of caption text.RItif()
now has new option for dichotomous data,dich = TRUE
, although it seems to produce the same output as the default partial credit model.
- Fix for all 4 DIF-functions using the
LRtest()
function fromeRm
to make item threshold locations correct.
RItif()
draws an orange dashed horizontal line for the cutoff (optionally) chosen.
- Fix for
RIitemparams()
to get relative_highest_tloc values for all items even when there are different number of thresholds (addedna.rm = TRUE
tomax()
function call).
- Fix for
kbl()
tables to accomodate changes in Quarto 1.3+ and get desired rendering. - Added
tbl_width
option for functions rendering tables (item fit, residual correlations, item parameters, etc)
RIitemhierarchy()
new optionnumbers = FALSE
to remove numbers from the plot.
Major updates:
- allows choice of bin size for person location histogram, default is 30 -
RItargeting(data, bins = 30)
- now uses
library(patchwork)
instead ofcowplot
to combine figures. - can now output a list object with the three parts of the targeting figure, which allows for customization of themes/colors/fonts, etc. The three parts are:
p1
- Person location histogramp2
- Item threshold histogramp3
- Individual item thresholds- If you want to use this, you should save the output to a named object,
targeting <- RItargeting(data)
, and then access the parts usingtargeting$p1
,targeting$p2
, andtargeting$p3
. You can then combine the figures, e.g.targeting$p1 / targeting$p2 / targeting$p3 + plot_layout(heights = c(1,1,1.4))
.
- now uses the viridis H color palette by default.
- has a lot more information in the plot now! Could get messy if you have a lot of thresholds. This is documented in the caption text. It makes the plot contain a lot of key information that we recommend to include in published psychometrics. This includes:
- Values for item threshold and average item locations.
- The mean of the item thresholds.
- The relative distance from the mean for each item.
- now uses the viridis H color palette by default.
- largely reworked and has new options available.
- it does not by default write a CSV file any more, you need to specify
output = "file"
- other output options include "table" (default) and "dataframe".
- you can choose level of detail in the output, using
detail = "thresholds"
oroutput = "all"
. This applies to any type of output. detail = "all"
adds information about avg/max/min values relative to the mean item location
- it does not by default write a CSV file any more, you need to specify
Minor fixes:
RIestThetas()
and the parallel processing versionRIestThetas2()
now useas.data.frame()
instead ofas_tibble()
to avoid a warning message.- The x axis of all figures showing the logit scale should now have a consistent label ("Location (logit scale)")
- Begun some work to clean up the code and make it more consistent, primarily ggplot labels using
labs()
.
RIscoreSE()
fix. Should now work with any number of item thresholds.
RItif()
added option to choose TIF cutoff value for which to generate caption textRIestTheta()
now accepts optional specification of range of theta values- simulation functions added, for polytomous data only
RIscoreSE()
will now use WL estimation (Warm, 1989), and produces a full range of values using simulated dataRIscoreSE()
can optionally output a figure showing ordinal sum score vs logit score
RIitemHierarchy)
has a new coloring scheme and widergeom_errorbar()
to make it easier to interpret when there are overlapping confidence intervals.RImissingP()
only indicates integers on x axis labels
- The previously found bug in the
psychotools
package when mixing dichotomous and polytomous items has been fixed in version 0.7-3, so make sure to upgrade that package. This means that the "old" DIF-functions should be used primarily. - The LR-based DIF-functions (described below) seem to produce inflated DIF sizes and should probably only be used with careful interpretation by those who fully understand the eRm package's
LRtest()
output.
RImissingP()
now has optionn = 10
as a default, to limit/choose how many participants to display.- Multiple new DIF functions added, based on the eRm package's
LRtest()
function. The new functions also show standard errors/95% confidence intervals.RIdifTableLR()
for average item locations table (sortable)RIdifThreshTblLR()
for item threshold locations tableRIdifFigureLR()
for average item locations figureRIdifThreshFigLR()
for item threshold locations figure
RImissingP()
for analysis of missing items per respondent added
- added grouping function for
RIpfit()
and changed default setting to binned hex heatmap to better show distribution of respondents. RIdifTable()
can now optionally output a dataframe- removed
RIrespCats()
since it was not working and wasn't going to be fixed. A new RIrespCats function is forthcoming, butRIitemCats()
, which uses eRm, works for now.
New option:
RItif(samplePSI = TRUE)
is now available if you want information about your sample added to the TIF curve.
Bug found:
RIdifThresh()
does not seem to produce stable output when items have different numbers of response categories. This seems to be related to the underlying functionthreshpar()
. Further investigations are coming.
New functions:
RImissing()
to generate a figure that shows missing data per item, arranged by amount of missing data.RIdifTable2()
enables DIF interaction analysis between two variables, using thepsychotree
package.
Fixes:
- Changes to use
dplyr
1.1.0 syntax formutate(across(), ~ function(.x))
, mostly used for rounding numbers in tables/dataframes. RItargeting(data, dich = TRUE)
- bug fix when analyzing dichotomous data - now the first item is also included in item threshold sections.
New functions:
RIestThetas()
andRIestThetas2()
for estimating person locations/scores using thecatR
package. See example use in vignette.