Skip to content

exametrika v1.15.0

Latest

Choose a tag to compare

@kosugitti kosugitti released this 15 Jul 06:22
· 64 commits to main since this release

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_itermaxiter) keeps the old name working
with a deprecation warning.

Improvements

  • dataFormat() / longdataFormat() accept column names. The id
    argument (dataFormat()) and Sid/Qid/Resp/w arguments
    (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.

  • verbose now defaults to FALSE everywhere. Previously about half
    the model functions defaulted to TRUE. Estimation results are
    unaffected; pass verbose = TRUE to restore progress messages.
  • Biclustering_IRM(): max_itermaxiter (matching the rest of
    the package). Because the IRM methods accept ..., a maxiter = passed
    under the old assumption was silently swallowed — an easy trap when
    switching between Biclustering() and Biclustering_IRM(). Old name
    still honored with a deprecation warning (removed in v2.0.0). Its ordinal
    method's mic/EM_limit defaults 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) of IRT(),
    Biclustering(), BNM(), LDLRA(), LDB(), and BINET() — a
    class-stripped, missing-recoded-to-0 matrix was passed to crr() /
    ItemTotalCorr(), which re-ran dataFormat() without the missing mask.
  • 0-indexed / non-contiguous polytomous category codes silently dropped
    by nominal and ordinal Biclustering() / Biclustering_IRM() and by
    DistractorAnalysis(). On the bundled J15S3810 data (codes 0..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 inverted inherits()
    branch).
  • BNM() / BINET() graph acyclicity checks were no-opsadj^i is
    elementwise, not matrix power, so cycles of length ≥ 2 were never caught;
    replaced with igraph::is_dag().
  • BINET() crashed on missing data, and its Beta smoothing constant was
    hardcoded; added beta1/beta2 arguments (matching the sibling models)
    and a clear degenerate-cell error.
  • LRA()'s minFreqRatio category 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 = 1 edge cases fixed; several print() / 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.