Summary
This is a minor release built on a full-codebase audit. It fixes a
large batch of bugs — several of which silently corrupted results on data
with missing responses or 0-indexed polytomous category codes — and
unifies gratuitously inconsistent argument names, orders, and defaults
across the model functions. All deprecated names from previous releases
continue to work unchanged; the one new rename in this release
(Biclustering_IRM()'s max_iter → maxiter) keeps the old name working
with a deprecation warning.
Improvements
dataFormat()/longdataFormat()accept column names. Theid
argument (dataFormat()) andSid/Qid/Resp/warguments
(longdataFormat()) now take a column name (character) in addition to a
column number, e.g.dataFormat(data, id = "StudentID"). An unknown or
ambiguous name raises a clear error listing the available columns.
API consistency changes
These alter default behavior or (rarely) positional-argument calls —
please review if you relied on the old defaults.
verbosenow defaults toFALSEeverywhere. Previously about half
the model functions defaulted toTRUE. Estimation results are
unaffected; passverbose = TRUEto restore progress messages.Biclustering_IRM():max_iter→maxiter(matching the rest of
the package). Because the IRM methods accept..., amaxiter =passed
under the old assumption was silently swallowed — an easy trap when
switching betweenBiclustering()andBiclustering_IRM(). Old name
still honored with a deprecation warning (removed in v2.0.0). Its ordinal
method'smic/EM_limitdefaults now match the sibling methods.- Missing-data arguments unified to the order
(na, Z, w)across
BNM(),LDLRA(),LDB(),BINET(), the GA/PBIL wrappers, and binary
Biclustering_IRM(). Only positional calls are affected; named usage is
unchanged.
Bug fixes (highlights)
The audit surfaced ~40 fixes; the most consequential:
- Missing responses silently counted as incorrect in the auxiliary
outputs (item-total correlation / correct-response rate) ofIRT(),
Biclustering(),BNM(),LDLRA(),LDB(), andBINET()— a
class-stripped, missing-recoded-to-0matrix was passed tocrr()/
ItemTotalCorr(), which re-randataFormat()without the missing mask. - 0-indexed / non-contiguous polytomous category codes silently dropped
by nominal and ordinalBiclustering()/Biclustering_IRM()and by
DistractorAnalysis(). On the bundledJ15S3810data (codes0..3)
this discarded 3,854 responses with no diagnostic. CTT()/BNM()/LDLRA()/LDB()/BINET()crashed on raw
(unformatted) matrix / data.frame input, though it is documented as
supported; the response-type check read from the raw input instead of the
formatted object (CTT()additionally had an invertedinherits()
branch).BNM()/BINET()graph acyclicity checks were no-ops —adj^iis
elementwise, not matrix power, so cycles of length ≥ 2 were never caught;
replaced withigraph::is_dag().BINET()crashed on missing data, and its Beta smoothing constant was
hardcoded; addedbeta1/beta2arguments (matching the sibling models)
and a clear degenerate-cell error.LRA()'sminFreqRatiocategory collapse never fired (and would have
errored if it had); now pools rare categories correctly while never
pooling the correct answer.print(GridSearch(...))always crashed;GridSearch()tie-break and
max_ncls = 1edge cases fixed; severalprint()/plot()argument and
typo fixes.
Internal
Follow-up consolidation of logic that had drifted out of sync across
near-identical call sites (the same root cause behind several of the bugs
above): shared helpers for the Beta posterior mode, conf parsing, and
GridSearch index selection; carriage-return progress messages switched to
newlines; regression tests pinning every fix
(tests/testthat/test-regression-1150.R).
See NEWS.md
for the complete changelog (every fix documented individually). Test suite:
~4,840 tests, all passing; R CMD check 0 errors | 0 warnings | 0 notes.