forked from philchalmers/mirt
-
Notifications
You must be signed in to change notification settings - Fork 0
/
NEWS
495 lines (287 loc) · 18.6 KB
/
NEWS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
Changes in mirt 0.7.2
NEW FEATURES
- drop.zeros option added to extract.item and itemplot to reduce dimensionality of factor structures
that contain slopes equal to zero
- EM tolerance (TOL argument) default dropped to .0001 (originally .001), and SEM default tolerance
dropped to 1e-5 (originally 1e-4)
- type = 'score' and type = 'infoSE' added to plot() generic for expected total score and joint test
standard error/information
- custom latent mean and covariance matrix can be passed to fscores() for EAP, MAP, and EAPsum methods.
Also applies to personfit() and itemfit() diagnostics
- scores.only option to fscores() for returning just the estimated factor scores
- bfactor can include NA values in the model to omit the estimation of specific factors for the
corresponding item
BUG FIXES
- missing data gradient bug fix in MH-RM for dichotomous item models
- global df fix for multidimensional confirmatory models
- bfactor SEM information matrix fixed
- SEM information matrix computed with more accuracy (M-step was not identical to original EM)
Changes in mirt 0.7.0
NEW FEATURES
- new '#PLNRM' models to fit Suh & Bolt (2010) nested logistic models
- 'large' option added to estimation functions. Useful when the datasets being analysed are very
large and organizing the data becomes a computationally burdensome task that should be avoided when
fitting new models. Also, overall faster handling of datasets
- plot(), fitted(), and residuals() generic support added for MultipleGroup objects
- CFI and X2 model statistics added, and output now includes fit stats w.r.t. both G2 and X2
- z stats added for itemfit/personfit infit and outfit statistics
- supplemented EM ('SEM') added for calculating information matrix from EM history. By default
the TOL value is dropped to help make the EM iterations longer and more stable. Supports
parallel computing
- added return empirical reliability (returnER) option to fscores()
- plot() supports individual item information trace lines on the same graph (dichotomous items only) with
the option type = 'infotrace'
- createItem() function available for defining item types that can be passed to estimation functions.
This can be used to model items not available in the package (or anywhere for that matter) with the
EM or MHRM. Derivatives are computed numerically by default using the numDeriv package for defining
item types on the fly
- Mstep in EM moved to quasi-Newton instead of my home grown MV Newton-Raphson approach. Gives
more stability during estimation when the Hessian is ill-conditioned, and will provide an easier
front-end for defining user rolled IRT models
BUG FIXES
- small bias fix in Hessian and gradients in mirt() implementation causing the likelihood to not always be
increasing near maximum
- fix input to itemplot() when object is a list of model objects
- fixed implementation of infit and outfit Rasch statistics
- order of nominal category intercepts were sometimes backwards. Fixed now
- S_X2 collapsed cells too much and caused negative df
- response.vector input now supports NA inputs (reported by Neil Rubens)
Changes in mirt 0.6.0
NEW FEATURES
- S-X2 statistic computed automatically for unidimensional models via itemfit()
- EAP for sum-scores added to fscores() with method = 'EAPsum'. Works with full.scores option
as well
- improve speed of estimation in multipleGroup() when latent means/variances are estimated
- multipleGroup(invariance = '') can include item names to specify which items are to
be considered invariant accross groups. Useful for anchoring and DIF testing
- type = 'trace' option added to plot() to display all item trace lines on a single
graph (dichotomous items only)
- default estimation method in multipleGroup() switched to 'EM'
- boot.mirt() function added for computing bootstrapped standard errors with via the boot
package (which supports parallel computing as well), as well as a new option SE.type = ''
for choosing between Bock and Lieberman or MHRM type information matrix computations
- indexing items in itemplot, itemfit, and extract.item can be called using either a number or the
original item name
- added probtrace() function for front end users to generate probability trace functions from models
- plotting item tracelines with only two categories now omits the lowest
category (as is more common)
- parallel option passed to calcLogLik to compute Monte Carlo log-likelihood more quickly. Can also
be passed down the call stack from confmirt, multipleGroup, and mixedmirt
- Confidence envelopes option added to itemplot() for trace lines and information plots
- lbound and ubound parameter bounds are now available to the user for restricting the parameter
estimation space
- mod2values() function added to convert an estimated mirt model into the appropriate data.frame
used to determine parameter estimation characteristics (starting values, group names, etc)
- added imputeMissing() function to impute missing values given an estimated mirt model. Useful
for checking item and person fit diagnostics and obtaining overall model fit statistics
- allow for Rasch itemtype in multidimensional confirmatory models
- oblimin the new default exploratory rotation (suggested by Dave Flora)
- more flexible calculation of M2 statistic in fitIndicies(), with user prompt option if the internal
variables grow too large and cause time/RAM problems
BUG FIXES
- read.mirt() fixed when objects contain standard errors (didn't properly
line up before)
- mixedmirt() fix when COV argument supplied (reported by Aaron Kaat)
- fix for multipleGroup when independent groups don't contain all potential response options
(reported by Scot McNary)
- prevent only using 'free_means' and 'free_varcov' in multipleGroup since this would not be
identified without further constraints (reported by Ken Beath)
Changes in mirt 0.5.0
- all dichotomous, graded rating scale, (generalized) partial credit, rating scale, and nominal models
have been better optimized
- wald() will now support information matrices that contain constrained parameters
- confmirt.model() can accept a string inputs, which may be useful for knitr/sweave documents
since the scan() function tends to hang
- multipleGroup() now has the logical options bfactor = TRUE to use the dimensional reduction algorithm
for when the factor pattern is structured like a bifactor model
- new fitIndices() function added to compute additional model fit statistics such as M2
- testinfo() function added for test information
- lower bound parameters under more stringent control during estimation and are bounded to never
be higher than .6
- infit and outfit stats in itemfit() now work for Rasch partial credit and rating scale models
- Rasch rating scale models can now be estimated with potential rsm.blocks (same as grsm model).
"Generalized" rating scale models can also be estimated, though this requires manipulating the
starting values directly
- added AICc and sample size adjusted BIC (SABIC) information statistics
- new mixedmirt() function for estimating IRT models with person and item level (e.g., LLTM) covariates.
Currently only supports fixed effect predictors, but random effect predictors are being developed
- more structured output when using the anova() generic
- standard errors no longer slightly positively biased when parameter constraints are imposed
Changes in mirt 0.4.2
- item probability functions now only permit permissible values, and models may converge even when
the log-likelihood decreases during estimation. In the EM if the model does not have a strictly
increasing log-likelihood then a warning message will be printed
- infit and outfit statistics are now only applicable to Rasch models (as they should be),
and in itemfit/personfit() a 'method' argument has been added to specify which factor score
estimates should be used
- read.mirt() re-added into the package to allow for translating estimated models into a format
usable by the plink package
- test standard error added to plot() generic using type = 'SE', and expected score plot added
to itemplot() using type = 'score'
- weighted likelihood estimation (WLE) factor scores now available (without standard errors)
- removed the allpars option to coef() generics and only return a named list with the (possibly
rotated) item and group coefficients
- information functions slightly positively biased due to logistic constant adjustment,
fixed for all models. Also, information functions are now available for almost all item response models
(mcm items missing)
- constant (D) used in estimating logistic functions can now be modified (default is still 1.702)
- partcomp models recently broken, fixed now
- more than one parameter can now be passed to parprior to make specifying identical priors more
convenient
Changes in mirt 0.4.1
- relative efficiency plots added to itemplot(). Works directly for multipleGroup analysis
and for comparing different item types (e.g., 1PL vs 2PL) can be wrapped into a named list
- infit and outfit statistics added to personfit() and itemfit()
- empirical reliability printed for each dimension when fscores(..., fulldata = FALSE) called
- better system to specify fixed/free parameters and starting values using
pars = 'values'. Should allow for much better simulation based work
- graded model type rating scale added (Muraki, 1990) with optional estimation 'blocks'. Use
itemtype = 'grsm', and the grsm.block option
- for multipleGroup(), optional input added to change the current freely estimated parameters
to values of a previously computed model. This will save needless iterations in the EM and MHRM
since these parameters should be much closer to the new ML estimates
- itemplot() supports multipleGroup objects now
- analytical derivatives much more stable, although some are not yet optimized
- estimation bug fix in bfactor(), and slight bias fix in mirt() estimation (introduced in version
0.4.0 when multipleGroup() added)
- updated documentation and beamer slide show included for some background on MIRT and some
of the packages capabilities
- labels added to coef() when standard errors not computed. Also allpars = TRUE is now the default
- kernel estimation moved entirely to one method. Much easier to maintain and guarantees consistency
across methods (i.e., no more quasi-Newton algorithms used)
Changes in mirt 0.4.0
- Added itemfit() and personfit() functions for uni and multidimensional models. Within itemfit
empirical response curves can also be plotted for unidimensional models
- Wrapped itemplot() and fscores() into S3 function for better documentation. Also response curve
now are all contained in individual plots
- Added free.start list option for all estimation functions. Allows a quicker way to
specify free and fixed parameters
- Added iteminfo() and extract.item() to calculate the item information and extract
desired items
- Multiple group estimation available with the multipleGroup() function. Uses the EM and MHRM
as the estimation engines. The MHRM seems to be faster at two factors+
though and naturally should be more accurate, therefore it is set as the default
- wald() function added for testing linear constraints. Useful in situations
for testing sets of parameters rather than estimating a new model for a likelihood ratio test
- Methods that use the MHRM can now estimate the nominal, gpcm, mcm, and 4PL models
- fscores computable for multiple group objects and in general play nicer with missing data
(reported by Judith Conijn). Also, using the options full.scores = TRUE has been optimized
with Rcpp
- Oblique rotation bug fix for fscores and coef (reported by Pedro A. Barbetta)
- Added the item probability equations in the ?mirt documentation for reference
- General bug fixes as usual that were spawned from all the added features. Overall, stay frosty.
Changes in mirt 0.3.1
- Individual classes now correspond to the type of methods: ExploratoryClass,
ConfirmatoryClass, and MultipleGroupClass
- plot and itemplot now works for confmirt objects
- mirt can now make use of confmirt.model specified objects and hence be confirmatory as well
- stochastic estimation of factor scores removed entirely, now only quadrature based methods
for all objects. Also, bfactor returned objects now will estimate all the factors scores instead
of just the general dimension
- Standard errors for mirt now automatically calculated (borrowed from running a tweaked
MHRM run)
Changes in mirt 0.3.0
- radically changed the underlying mechanisms for the
estimation functions and in doing so have decided that polymirt() was
redundant and could be replaced completely by calling confmirt(data, number_of_factors). The
reason for the change was to facilitate a wider range or MIRT models and to allow for easier
extensions to future multiple group analysis and multilevel modelling
- new univariate and MV models are available, including the 1-4 parameter logistic
generalized partial credit, nominal, and multiple choice models. These are called by specifying a character
vector called 'itemtype' of length nitems with the options '2PL','3PL','4PL','graded','gpcm',
'nominal', or 'mcm'; use 'PC2PL' and 'PC3PL' for partially-compensatory items. If itemtype = '1PL' or 'Rasch',
then the 1-parameter logistic/1-parameter ordinal or Rasch/partial credit models are estimated for
all the data. The default assumes that items are either '2PL' or 'graded', as before.
- flexible user defined linear equality restrictions may be imposed on all estimation functions,
so too can prior parameter distributions, start values, and choice of which parameters to
estimate. These all follow these general 2 steps:
1) Call the function as you would normally would but use, for example,
mirt(data, 1, startvalues = 'index') to return the start values as they are indexed
2) Edit them as you please (without changing the structure), then input them back into
the function as mirt(data, 1, startvalues = editedstartvalues).
This is true for the parprior (MAP priors), constrain (linear equality constraints), and
freepars (parameters freely estimated), each with their own little quirk. All inputs are lists
with named parameters for easy identification and manipulation. Note that this means that
the partial credit model and Rasch models may be calculated
as well by modifying either the start values and constraints accordingly (e.g., constrain all
slopes to be equal to 1/1.702 and not freely estimated for the classical Rasch model, or all equal
but estimated for the 1PL model)
- number of confmirt.model() options decreased due to the new way to specify item types, startvalues, prior
parameter distributions, and constraints
- plink package has not kept up with item information curves, so I'll implement my own for now.
Replaced plink item plots from 'itemplots' function with ones that I rolled
- package descriptions and documentation updated
- coef() now prints slightly different output, with the new option 'allpars = TRUE' to display all
the item and group parameters, returned as a list
- simdata() updated to support new item types
- more accurate standard errors for MAP and ML factor scores, and specific factors in bfactorClass
objects can now be estimated for all methods
Changes in mirt 0.2.6-1
- dropped the ball and had lots of bug fixes this round. Future
commits will avoid this problem by utilizing the testthat package
to test code extensively before release
- internal change in confmirt function to move MHRM engine outside the
function for better maintenance
- theta_angle added to mirt and polymirt plots for changing the viewing angle
w.r.t theta_1
- null model no longer calculated when missing data present
- fixed item slope models estimated in mirt() with associated standard errors
Changes in mirt 0.2.6
- null model computed, allowing for model statistics such as TLI
- documentation changes
- many back end technical details about estimation moved to technical lists
- support for all GPArotation methods and options, including Target rotations
- polymirt() uses confmirt() estimation engine
- 4PL support for mirt() and bfactor(), treating the upper bound as fixed
- coef() now has a rotate option for returning rotated IRT parameters
Changes in mirt 0.2.5
- Fixed translation bug in the C++ code from bfactor() causing illegal
vector length throw
- Fixed fscores() bug when using polychotomous items for mirt() and
bfactor()
- pass rotate='rotation' from mirt and polymirt to override default
'varimax' rotation at estimation time (suggested by
Niels Waller)
- RMSEA, G^2, and p set to NaN instead of internal placeholder when
there are missing data
- df adjusted when missing data present
- oblique rotations return invisible factor correlation matrix
Changes in mirt 0.2.4
- degrees of freedom correctly adjusted when using noncompensatory
items
- confmirtClass reorganized to work with S4 methods, now work
more consistently with methods.
- fixed G^2 and log-likelihood in logLik() when product terms included
- bugfix in drawThetas when noncompensatory items used
Changes in mirt 0.2.3
- bugfixes for fscores, itemplot, and generic functions
- read.mirt() added for creating a suitable plink object
- mirt() and bfactor() can now accommodate polychotomous items using
an ordinal IRT scheme
- itemplot() now makes use of the handy plink package plots, giving a
good deal of flexibility.
- Generic plot()'s now use lattice plots extensively
Changes in mirt 0.2.2
- Ported src code into Rcpp for future tweaking.
- Added better fitted() function when missing data exist (noticed by
Erin Horn)
Changes in mirt 0.2.1
- ML estimation of factor scores for mirt and bfactor
- RMSEA statistic added for all fitted models
- Nonlinear polynomial estimation specification for confmirt models, now
with more consistent returned labels
- Provide better identification criteria for confmirt() (suggested by
Hendrik Lohse)
Changes in mirt 0.2.0
- parameter standard errors added for mirt() (1 factor only) and bfactor() models
- bfactor() values that are ommited are recoded to NA in summary and coef
for better viewing
- 'technical' added for confmirt function, allowing for various tweaks and
varying beta prior weights
- product relations added for confmirt.model(). Specified by enclosing in brackets
and using an asterisk
- documentation fixes with roxygenize
Changes in mirt 0.1.20
- allow lower bound beta priors to vary over items (suggested by James Lee)
Changes in mirt 0.1.6
- bias fix for mirt() function (noticed by Pedro Barbetta)