# lava 1.8.1
 - `sim.default` now accepts the argument `R` to be a list (of lists) of
 arguments.
 - New methods `subset.estimate`, `transform.estimate`, `labels.estimate`

# lava 1.8.0
 - New methods `estimate.mlm`, `IC.mlm`, `pars.mlm`, `estimate.array`,
   `estimate.data.frame`
 - `Print` method for tabular data (matrix, data.frame, data.table)
 - `merge` now supports regular expressions
 - `IC` returns row-names (default id) as obtained from model.matrix or similar
 - New vignette: Influence Functions
 - operators `%in.open%`, `%in.closed%` for checking if elements are within a range
   `3 %in.open% c(0,1)`)
- `estimate(..., estimator='glm')` now works with formulas with just an intercept
- `as.data.frame.sim`, `as.matrix.sim`
- fixed issues with quasi* families and negative binomial regr (MASS:glm.nb)

# lava 1.7.3 
- `parameter.estimate` method to extract matrix with estimates, standard errors, and confidence limits from and estimate object (coefmat element)
- pairwise difference with `'-'.estimate` and `pairwise.diff`
- Optional mc.cores arguments to `cv` and `bootstrap`
- `parameter.lvm` now automatically removes previously variables in the lvm object with same name as new added parameters.
- `Print` function deals more gracefully with non-rectangular objects
- bug-fix in `stack.estimate` (wrong stand-errors in `twostage` since version 1.7.0)

# lava 1.7.2.1
  - Maintenance release as version 1.7.2 broke compatibility with R<4.1.

# lava 1.7.2
  - Compatibility issues with development version of R fixed.
  - cluster.index now also works when not loading the package (directly calling lava::estimate)
  - `weibull.lvm` and `coxExponential.lvm` now uses default parametrizations
    similar to `rweibull`, `rexp`. `weibull.lvm` now has arguments
    "intercept","sigma" that directly relates to the accelerated failure time formulation. 
  - Packages `gof`, `lava.tobit` are removed from Suggested packages.
  
# lava 1.7.1
  - Fixed bug in variance estimates from `estimate` with clustered observations.
  - Discrete uniform distributions can now be specified with `uniform.lvm(value=...)`. 
  
# lava 1.7.0
  - `cv` method moved to the 'targeted' package
  - New `IC` method that returns influence function of a model object. The `iid`
    argument `iid` of the `estimate` method is now replaced with an argument
    `IC` (with a user supplied matrix this must now be the actual influence
    function and not the sample-size scaled version returned by the `iid` method).
  - fixed bug where calls like `regression("y", value=function(x) x)` did not
    work. `merge.estimate` now works without IC element
  
# lava 1.6.10
  - Improved starting values for MLE optimization.
  - New simulation distributions: `multinomial.lvm`, `none.lvm`, `constant.lvm`,
    `id.lvm`.
  - `regression`, `regression.lvm`: the 'value' argument can now be a
    (non-linear) function specifying the functional relationship between
    outcomes and covariates (for simulation with the `sim` method).
  - New `intervention` method for applying interventions on `lvm`-objects 
  - Progress updates are now done via the `progressr` library (enabled with 
    `progressr::handlers(global=TRUE)`).
  - Parallelization is now controlled via the future library. To enable
    multicore parallelization: `future::plan("multicore")`.
  - New `plot_region` function for adding confidence regions to plots.
  
# lava 1.6.9
  - `idplot`: now accepts matrix or data.frame as 1st argument. 
    New argument: return.data.
  - Unit tests updated 
  - Bug fixes: 
    `cv`: rmse output fixed.
    score: Fixed bug for linear Gaussian model with argument 'indiv=TRUE'. 
    estimate.formula: call object initialized correctly.
    `plot.lvm`: 'noplot' argument now works with all plot engines.
  
# lava 1.6.8.1
  - Maintenance release
  - `confpred`: split-conformal prediction method updated

# lava 1.6.8
  - Bug-fix: `parameter(m,x)` now returns an lvm object and not just x
  - profile likelihood confidence intervals with tobit/censored observations.
  - Vignettes added
    - Estimating partial correlations
	- Non-linear latent variable omdels
  - Pseudo-inverse used with "normal" estimator
  - Starting values for mixture fixed

# lava 1.6.7
  - Fixed bug in the composite likelihood `complik` when used with
    censored variables (Surv objects).
  - Fixed regular expression in 'spaghetti' function
  - `plot.sim`: 'rug' argument is now by default FALSE and 'auto.layout'
    disabled when nr=nc=1.
  - base::sequence() is now a generic function and as a consequence
    `sequence.lvm` has been renamed to `Sequence.lvm`. The function
    `binary.lvm` is now an alias of `ones.lvm`.

# lava 1.6.6
  - Weighted kmeans++ (`wkm`). Gaussian mixture models (`mvnmix`) are now
    initialized by default using kmeans++.
  - `sim` method implemented for mvnmix models.
  - Bug fix: Newton-Raphson method (`lava::NR`) used a numerical
    approximation of the Hessian even when submitted as attribute to
    the objective function.

# lava 1.6.5
  - Maintenance release.

# lava 1.6.4
  - New simulation distributions: constant relative risk and risk
    difference models as in Richardson, Robins and Wang, 2017):
    `binomial.rd`, `binomial.rr`.
    Base on new hook 'simulate_multiple_inputs' which allows the
    distribution to depend non-linearly on multiple different input
    variables.
  - `sim.lvm`: 'X' argument can now fix (manipulate) any variable and not
    only exogenous variables.
  - Summary function for `sim.default` updated (the 'estimate' argument
    can now be a list with each element being the estimate position
    and optionally standard error and true value).
  - Starting values updated for mixture models. The parameter names
    can be obtained with `mixture(...,names=TRUE)` and set with
    `mixture(...,control=list(start=...)))`.
  - Naming conventions for multigroup parameters: 'par@g' (par: name
    of parameter, g: first group number where 'par' is
    observed). Starting values can be specified with
    estimate(...,control(list(start=...))).
  - New print and summary methods for mixture models.
  - Renamed (weighted) K-means function 'km' to `wkm`.
  - Derivative method deriv.function based on complex step derivatives.
  - `twostageCV`: estimation of mixture models are now parallelized if
    mc.cores>1.

# lava 1.6.3
  - Fixed problems with plots (Rgraphviz)
  - Better print method for `twostageCV`
  - Improved M-step in `mixture` method

# lava 1.6.2
  - `twostageCV`: cross-validate two-stage estimator
  - rmvn, dmvn moved to mets package (C++ implementation, old versions
    renamed to `lava::rmvn0`, `lava::dmvn0`)
  - mediation proportion handled correctly when direct effect is zero
  - unit tests clean-up (namespace)
  - `merge.lvm` now correctly handles fixed covariance parameters

# lava 1.6.1
  - Newton-raphson algorithm made more robust.
  - New `sim.as` method. `plot.sim` method now by default only plots
    density estimates
  - Compatibility fix with Matrix library

# lava 1.6
  - Mixture Latent variable models (`mixture`). Fast version
    requires 'mets' packages; Gaussian mixture models (`mvnmix`);
    weighted k-means (`km`)
  - `estimate.default`: 'keep', 'use' arguments can be specified as
    regular expressions (with argument regex=TRUE).
    Summary method now returns Wald test (null: all parameters being zero).
  - `makemissing`: seed argument added.
  - Global change: 'silent' argument renamed to 'messages'
  - New utility functions: `Grep`, `Na2x`, `x2NA`, `wait`, `waitclick`,
    `rotation`, `Rot2d`, `Rot3d`
  - Condition numbers calculated via SVD
  - `na.pass0`: returns data.frame with original number of rows but with
    zeros (or first level of factors) in the rows with missing data.
  - `stack`: 'weights' argument renamed to 'propensity'. If
    propensity=TRUE, the first argument (model) will be treated as
    propensity score model (glm) and 'predict' method will be
    used for the predictions.
  - `estimate.formula` now by default wraps glm such that the `iid` method
    return matrix of same size as full data (with zero rows where data
    are missing).
  - Updated output functions for class 'sim' (print method and
    plot).. Plot method: density.alpha is applied to each standard
    error ('se') level.
  - composite likelihood (`complik`) refactored + new example. `ordinal` method now
    cleans up properly when variables are removed (`rmvar`, `subset`).
  - `twostage`: fixed for mixture model (class 'lvm.mixture'). New help
    page + examples.  Predict function updated (newdata argument where
    covariate levels can be specified).

# lava 1.5.1
  - conformal predictions: `confpred`
  - warnings (char2num used instead of coersion via as.numeric)
  - `%++%` for function compositon
  - New `summary.effects` methods with mediation proportion in the
    output
  - New hook: `remove.hooks` (see example `ordinal.lvm`)
  - constrain methods now handled more robustly in `sim.lvm` allowing
    both vectorized and non-vectorized functions
  - Non-linear associations can now be specified with `nonlinear`
    method. Estimation via the `twostage` function.
  - Robust standard errors added to the IV estimator (2SLS)
  - New cross-validation function: `cv` (and `csplit` function for
    creating random sets).

# lava 1.5
  - lava.tobit is longer required for ordinal and censored
    responses. Default is now to use the implementation in the 'mets' package.
  - Composite likelihood method (`complik`) updated
  - weight argument renamed to weights in agreement with lm, glm, coxph, ...
  - `sim.default`: new argument 'arg' passed on to simulation function
  - `sim.default`: new argument 'iter'. If TRUE the iteration number is
    passed to function call as first argument (default FALSE)
  - `estimate.default`: Wildcards/global expressions can now be used for specifying
    contrasts based on the syntax of the functions `contr`, `parsedesign`.
    See examples on the help-page.
    The argument transform.ci has been renamed to back.transform.
  - correlation methods for matrices and data.frames (either pairwise or full MLE).
    All methods can now return the influence functions.
  - `revdiag`: dimnames are kept
  - `Combine`: output updated
  - `forestplot`: point estimates shown by default
  - `backdoor` now works without conditioning set (yields all possible conditioning sets)
  - New formula syntax: y+x~v+z same as c(y,x)~v+z
  - `spaghetti`: trend.formula can now contain a factor statement on the rhs

# lava 1.4.7
  - Maintenance release
  - models can now be specified as y1+y2~x1+x2 instead of c(y1,2y)~x1+x2
  - `sim` method now has a seed argument

# lava 1.4.6
  - New backtrace algorithms for Newton-Raphson optimization routine (`NR`).
  - `diagtest` updated.

# lava 1.4.5
  - New graph functions:
    `dsep`: check for d-separation (conditional independence).
    `backdoor`: check backdoor criterion of a graph (lvm-object).
    `adjMat`: return adjaceny matrix.
    `edgeList`: return edge list.
    `ancestors`: return ancenstors of nodes.
    `descendants`: return descendants of nodes.
  - All simple paths in a graph can now be extracted with:
    `path(...,all=TRUE)`
  - Covariance parameters are now reference with `~~` instead of `,`.
    Applies to setting starting values in `estimate`, parameters in
    `sim`,`compare`,`estimate`,...
    To use the old syntax set `lava.options(symbol=c("~",","))`.
  - `layout` argument added to `lava.options` (default 'dot')
  - visNetwork support, new `plot.engine` argument added to plot methods.
  - `bootstrap.lvmfit` now default returns original estimates.
  - `print`, `transform` methods updated (transform output).
  - `+` operator overloaded for lvm and estimate objects (merge).
  - New composite likelihood function: `complik`.
  - New functions for simple association measures: `riskcomp`, `rdiff`,
    `rratio`, ...
  - New argument 'latent' in `simulate` method. If FALSE the latent
    variables are dropped from the returned data.frame.
  - `modelsearch` by default now shows both directional or undirectional
    associations (type='all' vs type='cor').
  - `sim.default` now stores timings. New print functions (data.table
    like output).
  - lvm model can now be updated with the `sim` function,
    for instance setting parameter values for the simulation only once:
    `m <- sim(m,p=p,...)`, with faster subsequent calls `sim(m,n=n)`.
  - `estimate.default` can now simulate p-values ('R' argument). Returns
    an object which can also be used as input for `estimate`.
  - Bug fixes: `NR` optimization with back-tracing; fixed `matrices.lvm` when called
    without variance parameters; fixed a bug in r-square computations.
  - Contrast matrix can be specified with the function `contr`.

# lava 1.4.4
  - estimate.default will now use the id-variable of an 'estimate'
    object if the 'id' argument is left unspecified.  For
    multinomial,gkgamma,kappa additional arguments (...) are now
    parsed on the 'estimate.default' (including id).
  - Updated print/summary methods for
    'estimate.default'. Sample/cluster-size added to output.
  - Code clean-up and optimization. Smarter calculations of kronecker
    products, and some regular expressions updated.
  - New function 'predictlvm' which return jacobian.
  - Intercepts can now be specified via parantheses, e.g., y ~ (-2) + x
  - 'getoutcome' with sep argument for splitting '|' statements in
    formulas.
  - Partial gamma, gkgamma, updated (probability interpretation,
    homogeneity tests removed)
  - 'moments' function now returns conditional mean with multiple rows. Side effect fixed across multiple functions
  - twostage function with support for mixture models
  - Beta (Beta.lvm) and Finite Gaussian (GM2.lvm,GM3.lvm) Mixtures
    added.
  - 'sim': parameters can now be specified as part of '...'
  - summary.sim: calculate Wald CI if confint=TRUE, otherwise use the
        user supplied confidence limits. 
  - Clopper-pearson intervals and exact binomial tests added to 'diagtest'.
  - Interval censoring with 'normal' estimator, which now also works
    with 'binary' definitions.
  - default plot style updated.

# lava 1.4.3
  - partial gamma coefficients (gkgamma)
  - Unit tests works with new testthat version
  - Avoid trying to fork new processes on windows (bootstrap,sim.default)

# lava 1.4.2
  - Code optimization and minor bug fixes
  - Travis-CI, unit-tests
  - glm estimator update (censored regression)
  - polychoric correlations (pcor)
  - New utility functions: wrapvec, offdiag
  - simulation: regression design on parameters (see weibull +
    variance hetereogeneity example in help('sim'))
  - Byte compile by default

# lava 1.4.1
  - New plot.estimate method
  - Documentation and examples updated

# lava 1.4.0
  - Linear measurement error model: 'measurement.error'
  - Diagnostic tests: 'diagtest'
  - 'plotConf' updated with support for special function terms (I, poly, ns, ...).
    Old version is available (not in namespace) as lava:::plotConf0
  - Pareto distribution: 'pareto.lvm'
  - Code clean-up/optimization: 'EventTime', 'stack'
  - 'estimate.default' new syntax for contrast specification (parsedesign)
  - 'regression.lvm' with y,x argument (as alias for to,from)
  - plot longitudinal data: 'spaghetti'
  - Examples updated

# lava 1.3
  - New syntax for categorical predictors (method 'categorical' and
    argument 'additive=FALSE' with 'regression method)
  - Argument 'intervals' added to 'ones.lvm' for piece-wise constant effects
  - Argument 'average=TRUE' now needed for empirical averages in estimate.default
  - Fixed a bug in score.glm (with weights and offset) introduced in version 1.2.6
  - estimate.default:
    - small-sample corrections
    - Default id from row names in estimate.default (used with merge method)
    - iid decompostion also returned for hypothesis contrasts
    - keep argument added to estimate.default and merge
    - labels argument added to estimate.default
  - 'images' function for visualization of tabular data added to namespace
  - 'ksmooth' and 'surface' for surface estimation and visualization of bivariate data and functions
  - 'dsort': Sort data.frames
  - general multivariate distributions in simulations. see example in 'sim'
  - 'or2prob', 'tetrachoric' for conversion from OR to probabilities
    (and tetrachoric correlations).
    'prob.normal': calculates probabilities from threshold model given thresholds and variance
    See also mets:::assoc for calculations of kappa, gamma, uncer.coef.
    'normal.threshold': returns thresholds,variance,mu from model with
    categorical outcomes.
  - Multiple testing routines: closed.testing, p.correct, ...
  - 'Missing' method updated with a simple 'suffix' argument
  - Back-tracing updated in Newton-Raphson routine

# lava 1.2.6
  - New 'stack' function for two-stage estimation (via 'estimate' objects)
  - New 'blocksample' function for resampling clustered data.
  - New function 'Missing' to generate complex missing data patterns
  - Weibull parametrization of 'coxWeibull.lvm' rolled back
    (ver. 1.2.4). The function 'weibull.lvm' now leads to Accelerated
    Failure Time model (see examples of 'eventTime')
  - iid function cleanup (new 'bread' attribute).
    iid.glm now gives correct estimated influence functions for
    'quasi' link (constant variance)
  - Parameter constraints on (co)variance parameters now possible with
    the syntax lvm(...,y~~a*x) (corresponding to
    covariance(...,y~x)<-"a")
  - Some additional utilities: pdfconvert, scheffe, images, click. confband
    updated with 'polygon' argument.
  - New function getMplus: Import results from Mplus
  - New function getSAS: Import SAS ODS
  - New 'edgecolor' argument of plot-function

# lava 1.2.5
  - 'merge' method added for combining 'estimate' objects
  - Adjustments to starting values
  - Function 'categorical' for adding categorical predictors to
    simulation model
  - Improved flexibility in simulations with 'transform','constrain'
    (ex: categorical predictors)
  - Added 'dataid' argument to estimate.default allowing different id
    for 'data' and i.i.d. decomposition of model parameter estimates.
    With the argument 'stack=FALSE' influence functions within
    clusters will not be stacked together.
  - R-squared values (+ approximate standard
    errors/i.i.d. decomposition) via 'rsq(model,TRUE)'
  - New infrastructure for adding additional parameters to models (no
    user-visible changes).
  - multinomial function for calculating influence curves for
    multinomial probabilities. 'gammagk' and 'kappa' methods for
    calculating Goodman-Kruskals gamma and Cohens kappa coefficients.
  - ordreg function for univariate ordinal regression models
  - iid methods for data.frames/matrices (empirical mean and variance)
  - Support for using 'mets::cluster.index' in GEE-type models (much
    faster).
  - plotConf updated (vcov argument added and more graphical arguments
    parsed to plotting functions)
  - Additional unit-tests implemented
  - New 'forestplot' and 'Combine' functions
  - Covariance structure may now be specified using '~~', e.g.
    'lvm(c(y,v)~~z+u)' specifies correlation between residuals of
    (y,z),(y,u),(v,z),(v,u).

# lava 1.2.4
  - Avoid estimating IC in 'estimate.default' when 'vcov' argument is
    given.
  - New default starting values
  - Time-varying effects via 'timedep'
  - R-squared added to summary
  - alias: covariance->variance
  - added size argument to binomial.lvm;

# lava 1.2.3
  - 'subset' argument added to estimate.default. Calculates empirical
    averages conditional on subsets of data
  - Improved output from compare/estimate functions
  - Minor bug fixes (plot, predict)
  - sim: Piecewise constant rates with coxEponential.lvm. New
    aalenExponential.lvm function for additive models. Functions
    ones.lvm and sequence.lvm for deterministic variables.

# lava 1.2.2
  - Regression parameters are now by default referenced using '~',
    e.g. "y~x" instead of "y<-x". Applies to setting starting values
    in 'estimate', parameters in 'sim','compare','estimate',....
    To use the old syntax set 'lava.options(symbol=c("<-","<->"))'
  - Newton-Raphson/scoring procedure updated
  - Search-interval for profile likelihood CI improved (for variance
    parameters)
  - 'estimate.default' updated (LRT)
  - 'iid' updated (variance now obtained as tensor product of the result)
  - progress bar for 'bootstrap' and 'modelsearch'
  - various minor bug fixes
  - new functions: Expand (expand.grid wrapper), By (by wrapper)

# lava 1.2.1
  - Optimization + minor bug fixes

# lava 1.2.0
  - New method 'iid' for extracting i.i.d. decomposition (influence
    functions) from model objects (e.g. glm, lvm, ...)
  - Method 'estimate' can now be used on model objects to transform
    parameters (Delta method) or conduct Wald tests. Average effects,
    i.e. averaging functionals over the empirical distribution is also
    possible including calculation of standard errors.
  - 'curereg' function for estimating mixtures of binary data.
  - Instrumental Variable (IV) estimator (two-stage
    least-squares) optimized.
  - New distributions: Gamma.lvm, coxWeibull.lvm, coxExponential.lvm,
    coxGompertz.lvm. New method 'eventTime' (for simulation of
    competing risks data)
