Releases: douglasrizzo/catsim
0.17.3
This release
- updates the documentation
- fixes unit tests
- updates deprecated APIs of other packages
- adds Python 3.11 to the test matrix
Full Changelog: 0.17.2...0.17.3
Fix for stratified methods
This version provides a tentative fix for #29.
Full Changelog: 0.17.1...0.17.2
0.17.1
In this release, I have removed the hill climbing estimation method in favor of the newly implemented ones. Some edge cases were found in my implementation of the method which make the other ones not only faster, but more precise.
There is also a wallclock time comparison among estimators in the documentation.
0.17.0
Estimation overhaul
This version presents a major overhaul in the ability estimation module. I decided to revisit the theory behind finding extrema of unimodal functions without the use of derivatives (which is the case of the log-likelihood used to estimate the most likely abilities for examinees during a CAT, given their response patterns) and bumped into this amazing playlist by @osveliz.
New estimator implementations
From that playlist, I have implemented the following methods for finding the maxima of the log-likelihood function:
New estimators from SciPy
I also found out that all minimization methods implemented in scipy.optimize.minimize_scalar
work really well in catsim, so I have also made those available in the estimation module.
Better results
These changes have introduced a small but noticeable speedup in simulation times, since many of the new methods tend to evaluate the log-likelihood function fewer times than the older estimators present in catsim. In particular, all of the new methods are more theoretically sound than the HillClimbingEstimator
as well as 5 to 10 times faster than the DifferentialEvolutionEstimator
.
Breaking changes
Due to that, I have decided to retire the DifferentialEvolutionEstimator
and joined all estimators (including the HillClimbingEstimator
) into a new NumericalSearchEstimator
class.
Instantiating the new estimators
For the old hill-clibing estimation method:
estimator = NumericalSearchEstimator("hillclimbing")
For the four new estimators implemented into catsim::
estimator = NumericalSearchEstimator("ternary")
estimator = NumericalSearchEstimator("dichotomous")
estimator = NumericalSearchEstimator("fibonacci")
estimator = NumericalSearchEstimator("golden2")
For the three estimators from scipy.optimize.minimize_scalar()
:
estimator = NumericalSearchEstimator("brent")
estimator = NumericalSearchEstimator("bounded")
estimator = NumericalSearchEstimator("golden")
Closing remarks
If everything goes right with the new GitHub Actions I've implemented, the documentation will be updated shortly. The examples in the README as well as the documentation website will have all information regarding the new estimators. After the documentation update, you find a comparison among the new estimation methods here.
0.16.0
This version mainly deals with instabilities in the HillClimbingEstimator
when users feed it random response patterns. To deal with that, a small error margin was added to the location in which the estimator looks for the most probable new ability value during estimation.
Also, since it appears that most users do not want to deal with ability estimations equal to +infinity or -infinity, I have activated Dodd's estimation method by default in the HillClimbingEstimator
.
Lastly, a bug was fixed related to how the HillClimbingEstimator
chooses new bounds in its iterative algorithm.
0.15.7
Fix in HillClimbingEstimator
This fixes a rather serious issue in the HillClimbingEstimator. Discussion on the bug and the fix are on issue #13. The issue is considered fixed, but the discussion may go on.
0.9.1
Stable support for all initializers, selectors, estimators and stoppers.
Possibility to plot a variety of data, like variance, standard error of estimation, reliability, test information etc.
Fixed many bugs related to documentation, floating point numbers and function maxima estimation.
First stable release
This release of catsim
contains all the basic functionalities of a package that make it useful to others, while still maintaining its beta status (pre 1.0.0).