                 Changes in version 1.0.0 (2026-09-17)                  

Data-generating mechanisms

  - Added four signal-complexity levels: linear, quadratic, quadratic
    with interactions, and the Friedman benchmark function.
  - Added control over nonlinear signal strength, predictor correlation,
    predictor distribution, and binary predictor prevalence through
    complexity and data_control.
  - Updated binary, continuous, and survival tuning so that calibration
    uses the same data-generating configuration as the sample-size
    simulation.

Models and performance metrics

  - Added ridge regression across binary, continuous, and survival
    outcomes and refined the random-forest defaults and XGBoost tuning.
  - Added calibration-slope squared error ("csse") for all supported
    outcome types, defined as -(1 - slope)^2 so that larger is better
    and 0 is perfect calibration. Unlike the calibration slope itself,
    it penalises slopes above one as well as below it.
  - Routed calibration-slope searches through CSSE for the
    machine-learning models. The search looks for the sample size at
    which performance equals the target, which requires the metric to
    move monotonically with n. The calibration slope does so for
    classical regression models, which overfit and approach one from
    below, but not for penalised and tree-based learners, whose slope
    can approach one from either side depending on how much the fit is
    shrunk, and so can meet the target at more than one sample size.
    CSSE is a squared distance from perfect calibration, so it improves
    monotonically regardless of the direction of miscalibration.
    Requesting metric = "calibration_slope" with lasso, ridge, rf, or
    xgboost now searches on the CSSE scale internally and translates the
    answer back, so targets and results stay on the calibration slope
    scale.

Sample-size search and results

  - Improved adaptive bounds and detection of performance targets that
    appear unreachable.
  - Improved fallback behaviour when model fitting or metric calculation
    fails.
  - Forwarded additional engine arguments consistently through
    simulate_custom() and the wrapper functions.
  - Expanded and standardised the metadata returned by wrapper
    simulations, which now records the full data-generating
    configuration alongside the search settings.
  - Added an up-front runtime estimate: the adaptive first stage is
    timed and extrapolated to the full search. Runs expected to take
    more than 30 minutes report the estimate; runs expected to take more
    than two hours also warn and ask for confirmation before continuing.
    The prompt is interactive-only and can be disabled with
    options(pmsims.confirm_long_runs = FALSE).

Printed output

  - Reorganised the console summary into sections: Inputs is now divided
    into Data-generating scenario, Model and performance, and
    Simulation, and Results leads with the minimum sample size, followed
    by the performance expected at that sample size.
  - Reported the data-generating configuration under Data-generating
    scenario: signal complexity, nonlinear strength, predictor
    distribution, predictor correlation, and binary predictor
    prevalence.
  - Reported performance estimates beneath a Performance at N = ...
    heading, with the achieved value for the chosen metric shown
    alongside its target.
  - Expressed the sample-size target as a criterion including its
    direction, for example Calibration slope >= 0.900, using the
    direction in which the metric improves.
  - Replaced internal identifiers with human-readable model names
    (Random forest rather than rf) and standardised names for
    statistical quantities (AUC and the C-statistic are both reported as
    C-statistic for a binary outcome).
  - Combined the signal and noise predictor counts onto one line, and
    stopped repeating the model and mode in Results.
  - Moved the mean/assurance explanation and the CSSE footnote below a
    closing rule, and de-emphasised them.
  - Added print(x, verbose = TRUE) for implementation-level detail:
    internal metric identifiers, the engine settings used for the
    search, and quantities recorded on an internal search scale.
    summary() now prints this detailed display.

Interface changes

  - Updated the wrapper interface to express predictor configuration
    through complexity and data_control. The top-level predictor_type
    and binary_predictor_prevalence arguments have been removed; both
    are now data_control fields. See the current examples and function
    documentation for details.
  - Candidate predictors are now correlated by default
    (data_control$correlation = 0.3), whereas 0.5.0 generated
    independent predictors. Set correlation = 0 to reproduce the earlier
    behaviour.

                        Changes in version 0.5.0                        

Initial release

New features

  - pmsims introduces a simulation-based framework for minimum sample
    size estimation in prediction model development.
  - The package provides wrapper workflows for binary, continuous, and
    survival outcomes via simulate_binary(), simulate_continuous(), and
    simulate_survival().
  - These workflows support both mean-based and assurance-based criteria
    for identifying the smallest sample size that meets a target level
    of predictive performance.
  - A lower-level simulate_custom() interface is available for
    user-defined data generators, model-fitting functions, and
    performance metrics.

Experimental machine-learning support

  - The wrapper workflows include experimental machine-learning options
    via regularised regression, random forest, and XGBoost.
  - These machine-learning methods have not yet undergone the package's
    main validation study and should be treated as experimental in
    0.5.0.
