Changes in Version 0.7-3

  o Fixed calculation of person parameter covariance matrix estimate (and thus
    confidence intervals) in personpar() methods for Rasch models (reported by
    Rainer W. Alexandrowicz).
    
  o Fixed bug in threshpar() method of pcmodel objects fitted to binary items
    reported by Rainer W. Alexandrowicz).

  o Fixed bug in pcmodel() which failed when the reference category was a
    null category (without observations). Now the first category with observations
    is chosen as the reference category (reported by Rainer W. Alexandrowicz).

  o Improved raschmodel(), rsmodel(), and pcmodel() so that an NA variance-covariance
    matrix is returned (with a warning) if the Hessian cannot be inverted instead
    of stopping with a technical error message (suggested by Rainer W. Alexandrowicz).

  o Fixed names of "mscale" attribute in itemresp variable in MathExam14W data,
    now consistent with column names.


Changes in Version 0.7-2

  o Bug fix in discrpar() method for nplmodel(..., type = "1PL") so that the
    variance covariance matrix is computed correctly.

  o Documentation enhancements in the mathematical notation (suggested by Kurt
    Hornik) and in the description of the 1PL/Rasch model in nplmodel()
    (suggested by Feng Lin).


Changes in Version 0.7-1

  o The function (and resulting class) for fitting n-PL type
    parametric logistic IRT models has been renamed from plmodel() to
    nplmodel(). For now, a copy called plmodel() is also preserved (but
    this also returns an object of class "nplmodel").

  o Fix logicals of length > 1 in some if() constructs.
  
  o Accept .replicates for user-provided model specifications in mptmodel().
  

Changes in Version 0.7-0

  o Changed default constant anchor selection method in anchor() and anchortest()
    from MPT to Gini based on Strobl et al. (2021, Applied Psychological
    Measurement). The Gini-based anchor selection is simpler because it is based
    on single anchors while at the same time performing very well under DIF.

  o The print() method for anchortest() now just displays the anchor item(s) and
    the final DIF tests while the summary() method displays the full information
    including anchored item parameters etc. (rather than vice versa).
    
  o The print() and summary() methods for anchor() and anchortest() now display
    item labels (rather than indexes) for the selected anchor item(s) and for the
    full vector of criterion values.

  o Added the "proCNI" multinomial processing tree specification in mptspec() for
    mptmodel(). This provides the CNI model of moral dilemma judgment for
    proscriptive norms.


Changes in Version 0.6-1

  o New vignette("toolbox-simulation", package = "psychotools") on how to conduct
    simulation studies investigating the performance of score-based tests of
    measurement invariance of IRT models. Accompanies the PsyArXiv preprint mentioned
    below.


Changes in Version 0.6-0

  o New anchor() selection strategy using inequality-based alignment, either
    based on the Gini index or the component loss function (CLF). Thus, also directly
    available in anchortest(). Improved print() and plot() methods.

  o Changed method to invert hessian for raschmodel(), rsmodel(), and pcmodel()
    from qr.solve() to chol2inv(chol()).

  o Added two demos on how to conduct simulation studies for score-based test
    of measurement invariance.

  o All IRT models now have a function to simulate IRT data, see rrm(), rrsm(),
    rpcm(), rpl(), and rgpcm().

  o An accompanying new PsyArXiv Preprint "An R Toolbox for Score-Based
    Measurement Invariance Tests in IRT Models" by Lennart Schneider, Carolin
    Strobl, Achim Zeileis, and Rudolf Debelak is available at
    https://doi.org/10.31234/osf.io/r9w34


Changes in Version 0.5-1

  o Added "IGNORE_RDIFF" flags in some examples in order to avoid showing
    diffs due to small numeric deviations in some checks (especially on CRAN).


Changes in Version 0.5-0

  o Infrastructure for IRT modeling in the unified "psychotools" framework is
    extended by marginal maximum likelihood (MML) estimation of generalized partial
    credit models and parametric logistic models, respectively. The corresponding
    fitting functions (see below for details) call mirt() or multipleGroup() from
    the "mirt" package but return objects for which all standard extractor methods
    (item parameters, person parameters, etc.) and visualization methods (item
    response curves, parameter profiles, person-item maps, etc.) are available.
    
  o The new gpcmodel() function interfaces mirt (see above) and fits (generalized)
    partial credit models (GPCMs) by MML.
    
  o The new plmodel() function interfaces mirt (see above) and fits various
    parametric IRT logistic models using MML: 1PL (Rasch), 2PL, 3PL, 3PLu, and
    4PL.

  o New functions and eponymous classes guesspar(), and upperpar() to
    extract/represent so-called guessing parameters and upper asymptote parameters
    of IRT models.

  o personpar() now distinguishes between parameters of the assumed person ability
    distribution (personwise = FALSE) and the individual person parameters for
    each person/subject in the underlying data set (personwise = TRUE). In the CML
    case, the latter simply computes the raw score for each person and then extracts
    the corresponding person parameter. In the MML case, this necessitates
    (numerically) integrating out the individual person parameters (also known as
    factor scores or latent trait estimates) based on the underlying normal
    distribution.

  o Added new data set "ConspiracistBeliefs2016" from the Open Source Psychometrics
    Project (2016).

  o Added new simulated data set "Sim3PL" for fitting dichotomous IRT models,
    especially the 3PL and 3PLu.


Changes in Version 0.4-3

  o Conditionally register all estfun() and bread() S3 methods for model
    objects, provided that the "sandwich" package is attached.

  o Added native routine registration for esf.c.

  o Use R version of elementary_symmetric_functions() by default on Win/i386
    due to small numeric differences on that platform.

  o The estfun() method for "btmodel" objects always computed the scores
    with the last object for the reference category - even if a different
    ref= was specified in the model. Thanks to Heather Turner for pointing
    out the problem.

  o The itempar() method for "btmodel" objects miscomputed the variance
    covariance matrix (unless the first object was used as the ref when
    estimating the model). Thanks to Heather Turner for pointing out the
    problem.


Changes in Version 0.4-2

  o Added new data set "PairClustering" from Klauer (2006).

  o Fixed replication code in example of StereotypeThreat (reported by
    Ed Merkle).

  o Basil Abou El-Komboz changed his name to Basil Komboz.


Changes in Version 0.4-1

  o Properly imported grDevices and utils in NAMESPACE.
  
  o Added new item response data set MathExam14W with esponses of 729
    students to 13 items in a written exam of introductory mathematics
    along with several covariates. 


Changes in Version 0.4-0

  o New function mptmodel() and corresponding extractor functions for fitting
    multinomial processing tree (MPT) models. These functions are somewhat
    experimental, and their user interface might change in future releases.

  o Bug fix in itempar() method for "raschmodel" objects if alias = FALSE.
    In the previous version the methods had an erroneous trailing NA.

  o Improved item names labeling in plot() method for "itemresp" objects
    to conform with regionplot() function for IRT models.

  o mscale<-() method for "itemresp" has been improved so that categories
    can be easily collapsed (e.g., dichotomized).


Changes in Version 0.3-0

  o Infrastructure for IRT modeling in "psychotools" is greatly enhanced.
    Therefore the main modeling functions are now called raschmodel()
    for Rasch models, rsmodel() for rating scale models, pcmodel()
    for partial credit models, and btmodel() for Bradley-Terry models.
    The old *.fit() functions from previous versions of the package still
    exist but now internally call the new *model() functions. Also, the
    classes returned have the same names as the *model functions.

  o A unified visualization framework for fitted IRT models has been added:
    For all types of models (Rasch, RSM, PCM) one can visualize profiles
    of the item parameters, regions for the most likely response, item
    or category characteristic curves, item information, and person-item
    plots. All of these rely on the unified framework for extracting
    parameters and predictions (see below).

  o New functions and eponymous classes itempar(), threshpar(), and
    discrpar() to extract/represent item, threshold, and discrimination
    parameters of item response models. Methods for the IRT models (Rasch,
    RSM, PCM) are provided. In addition, several methods for standard generic
    functions (print(), coef(), vcov()) are available.

  o The worth() generic now internally calls the methods for itempar().

  o Estimation of person parameters for a given item response model is
    now available via the generic function personpar(). Specific methods for
    Rasch, rating scale and partial credit models allow the estimatation of
    person parameters via joint maximum likelihood estimation. Methods for
    standard generic functions (print(), coef(), vcov()) are
    available for the resulting objects of class "personpar".

  o predict() methods for Rasch, rating scale and partial credit models
    have been added. For a given fitted model object, these can be 
    used to predict various types of response probabilities or actual 
    reponses.

  o New functions anchor() and anchortest() provide a variety of anchor 
    methods for the detection of uniform differential item functioning 
    (DIF) between two pre-specified groups in the Rasch model. To test 
    for DIF, the itemwise Wald test is implemented.

  o itemresp() is the class constructor for responses of n subjects
    to k items which can be polytomous and have different measurement
    scales. A wide range of methods to standard generics is provided
    as well as to generics created for the "paircomp" class. Thus,
    features can be easily extracted/replaced, summaries/visualizations
    can be produced, subsetting/merging/etc. is facilitated.

  o The handling of argument 'ref' when producing a region plot (previously
    called effect plot) was changed. Whereas in the previous implementation,
    the restriction specified in this argument was applied to the cumulative
    absolute item threshold parameters, it now is applied to the absolute
    item threshold parameters.    

  o A bug occuring in pcmodel() when null categories are present and 
    nullcats = "keep" was fixed. (Thanks to Oliver Prosperi for reporting
    this.)

  o The processing of the minimal category zero in the function rsmodel() 
    was changed. Only if for all items, the minimal category is above zero,
    downcoding takes place. Otherwise, the missing minimal categories are 
    treated as not observed, i.e., with a frequency of zero.


Changes in Version 0.2-0

  o Major update with new model fitting functions (partial credit and
    rating scale model) and improved infrastructure for conditional
    maximum likelihood estimation (C implementation of elementary
    symmetric functions).
    
  o Partial credit models (PCMs) can be fitted with the function
    PCModel.fit(). The interface and return value is similar to that
    of RaschModel.fit().

  o Rating scale models (RSMs) can be fitted with the function
    RSModel.fit(). The interface and return value is similar to that
    of RaschModel.fit() and PCModel.fit().

  o The function elementary_symmetric_functions() for computing ESFs
    is extended and now part of the exported user interface. The
    R implementation for binary items up to order 2 is complemented
    by a C implementation for both binary and polytomous items
    up to order 1.

  o Due to numerical instabilities in the coefficients and standard 
    errors between different architectures, the optimization method
    for Rasch/RSModel/PCModel.fit() was changed from nlm(...) to 
    optim(..., method = "BFGS"). Consequently, the arguments "reltol"
    and "maxit" are used now instead of "gradtol" and "iterlim". For
    backward compatibility RaschModel.fit() still supports the old
    arguments but might cease to do so in future releases.


Changes in Version 0.1-4

  o Added YouthGratitude data from Froh, Fan, Emmons, Bono, Huebner, Watkins
    (2011, PA), provided by Jeff Froh and Jinyan Fan. Some approximate
    replication code is provided in the examples (the parts depending on
    lavaan are in \dontrun).


Changes in Version 0.1-3

  o Fully exported elementary_symmetric_functions(). (An extended C
    implementation is under development and will be included in
    future releases.)


Changes in Version 0.1-2

  o Support of non-integer weights in btReg.fit(). To facilitate this,
    summary.paircomp() gained a weights argument so that optionally
    the weights are aggregated instead of observations counted.  
  
  o Actually pass on nlm() arguments from RaschModel.fit(). Also
    support iterlim = 0, i.e., set up model at pre-specified parameters.
  
  o Added StereotypeThreat data from Wicherts, Conor, Hessen (2005, JPSP),
    provided by Jelte M. Wicherts. Replication code is provided in the
    examples (the parts depending on lavaan are in \dontrun).


Changes in Version 0.1-1

  o New "psychotools" package containing all 'base' infrastructure
    previously contained in "psychotree". This is in order to provide
    both methods and data that can be reused by "psychotree" and
    the new package "psychomix" (as well as potentially further packages).
    
  o Classes: "paircomp" and associated methods.
  
  o Models: btReg.fit() and RaschModel.fit() and associated methods.
  
  o Data: Firstnames, GermanParties2009, Soundquality (previoulsy in
    psychotree) and VerbalAggression (new data, contained in other
    formatting in difR/verbal and lme4/VerbAgg).
