                 Changes in version 6.7.0 (2026-09-21)                  

New features

  - Added simulatePlpBenchmarkData() to generate semi-synthetic
    benchmark data from covariate profiles or fitted PLP models.
  - Added outcome-limited split settings for large data sets where
    training should use a target number of outcome-positive rows (#396).
  - Added Broken Adaptive Ridge logistic regression via
    setBrokenAdaptiveRidge(), including automatic ridge initialization
    and out-of-fold penalty selection (#673).
  - Added lifecycle-style custom hyperparameter generators.
  - Persisted model names in the results data model for downstream
    viewers.

Bug fixes

  - Generated iterative hard thresholding CV predictions using fitted
    prior variances and restored intercept fitting.
  - Ensured Cyclops CV refits honor thread, seed, tolerance, and
    iteration settings (#672).
  - Validated simulation outcome covariates and added support for
    user-supplied PLP outcome models.
  - Fixed scikit-learn SVC JSON loading to restore probability
    prediction, preserve sparse-model predictions, support dense models,
    and retain all-zero columns in sparse matrices (#682).
  - Defaulted missing evaluation types in evaluatePlp().
  - Corrected imputation messages for the number of missing features.
  - Added the existing diagnostic_predictors.probast_id column to the
    results data model specification (#674).

Performance and maintenance

  - Reduced hyperparameter database serialization overhead.
  - Raised and tested minimum dependency versions and added an R 4.1.3
    dependency floor check.

                 Changes in version 6.6.0 (2026-03-09)                  

New features

  - Added flexible hyperparameter tuning with configurable tuning
    metrics and support for grid, random, and custom search strategies
    (#618).
  - Standardized the non-Cyclops modeling interface to simplify tuning
    and maintenance of classification models (#618).
  - Added ridge logistic regression settings via Cyclops with
    setRidgeRegression() (#621).
  - Expanded imputation support and hardened the missing-indicator and
    predictive mean matching workflow (#622).
  - Added support for using logits / linear predictors in rank-based
    metrics (#615).
  - Persisted hyperparameter settings and model names in the results
    data model to improve downstream model identification and viewing
    (#633, #632).

Bug fixes

  - Improved upload of hyperparameter metadata and robustness of model
    settings persistence for database viewers and downstream tools
    (#628, #623).
  - Ensured existing GLM and scikit-learn model settings retain model
    identity so uploads generate distinct model design records (#614).
  - Fixed evaluation when outcomes are single-class (#624).
  - Improved LightGBM model persistence using a more robust in-memory
    serialization path (#626).
  - Removed deprecated sklearn AdaBoost usage for compatibility with
    newer scikit-learn versions (#627).
  - Fixed serialization of simpleImputer metadata when saving PLP models
    (#630).
  - Limited batchRestrict handling to SQLite-backed data to avoid
    incorrect behavior on other backends (#612).

Performance and maintenance

  - Improved simpleImpute performance for large feature sets (#629).
  - Reduced GitHub Actions R CMD check runtime in CI (#625).

                 Changes in version 6.5.1 (2025-10-15)                  

  - [Feature] Added optional missingness indicators for features imputed
    with createSimpleImputer() and createIterativeImputer() via
    addMissingIndicator (default FALSE for backward compatibility)
  - [Bug] Remove old R condition from Rd files throug new roxygen2 (PR
    #603)
  - [Internal] Use reticulate's py_require for stating python
    dependencies (PR #600)
  - [Bug] use closeConnection instead of finalize for RMM (PR #599)
  - [Bug] Refresh the xgboost training call to remove watchlist/nthread
    deprecation warnings (PR #587)
  - [Bug] Align querySql() usage and migration discovery with
    DatabaseConnector 7 to keep PLP uploads and exports working (PR
    #595)
  - [Internal] Add pkgload to Suggests for dev/test tooling (PR #595)
  - [Bug] Improve net benefit plot to handle multiple results and
    thresholdSummary (PR #586)

                 Changes in version 6.5.0 (2025-07-25)                  

  - [Feature] skip diagnostics when using runMultiplePlp (PR #581)
  - [Bug] Add seed to simulatePlpData to stop convergence issues in
    examples (PR #583)
  - [Bug] Conserve andromeda object when samplig (PR #579)
  - [Bug] Fix modelSettings of existing GLM (PR #575)
  - [Bug] Fix normalizers if feature is a constant (PR #573)
  - [Bug] Fix failure of rclassifier and sklearn models with only one
    feature (PR #569)

                 Changes in version 6.4.1 (2025-04-20)                  

  - [Bug] Fix bug when sampleSize is NULL but restricting by dates in
    getPlpData (PR #559)
  - [Bug] Add cohort definitions to external validation (PR #562)
  - [Bug] Copy attributes correctly in new FE methods (PR #557)
  - [Bug] Specify more settings for existing models (GLM and
    Scikit-learn) (PR #555)
  - [Bug] temporal data compatibility (PR #554)
  - [Bug] Specify start and endDays in cohortCovariates (PR #553)
  - [Bug] Fix bugs when uploading same cohorts in parallel (PR #544)

                 Changes in version 6.4.0 (2025-02-11)                  

  - Official maintainer updated to Egill Fridgeirsson
  - Feature: Added experimental imputation methods
      - Simple imputation using median or mean
      - Iterative imputation by chained equations using predictive mean
        matchin
  - Feature: Added more feature engineering methods to deal with rare
    features and normalization of numerical features
      - Min/Max normalization
      - Robust normalization which normalizes by the interquartile range
        and optionally squashes the features to a range -3 to 3
  - Feature: Added existingSplit settings where users can split data
    bases on an existing split
  - Feature: Added a net benefit plot plotNetBenefit
  - Feature: Added timings that are printed to the log to most functions
    in the pipeline
  - Feature: Now a model trained with scikit-learn in python can be
    converted with createSklearnModel and used to predict on new data
    with the package
  - Feature: Added a convenience function getEunomiaPlpData to get some
    data in one line.
  - Docs: Added a new GIS example to the docs (thanks @jshoughtaling)
  - Docs: All exported functions (about 120) now have runnable examples.
    All examples are now conditinally executed if required. Shiny
    examples only executed in interactive sessions, examples using
    packages in suggests only executed if they are installed and so on.
  - Docs: Fixed linting errors and R codestyle in docs to conform to
    HADES style
  - Docs: Remove links to pdf's, point to website instead.
  - Docs: Fix broken links in Readme and BuildingPredictiveModels
    vignette
  - Internal: Added support for coming duckdb backed Andromeda
      - Only create indexes for sqlite backed Andromeda
  - Internal: Removed the old simulationProfile and added a new one
    based on Eunomia
      - This will allow us to quickly simulate small datasets for
        examples
      - Manually specified an outcome model tailored to Eunomia
  - Internal: Went through all tests and put skip_if_offline or
    skip_if_not_installed where appropriate. Tests using Eunomia need
    internet and tests using any suggest packages need
    skip_if_not_installed. Put skip_on_cran for all tests requiring
    python
  - Internal: Cleaned up dependencies. Moved what could be moved to
    suggest and put behind a rlang::check_installed flag. This means the
    installation is much lighter if only using the basic functionality
    of the package, e.g. develop a model using Cyclops.
  - CI: Use UV for python management on github actions and upgrade
    ubuntu version to 24.04
  - CI: Added an action to detect broken links in repo

                        Changes in version 6.3.9                        

  - Hotfix adding schema to DatabaseConnector::getTableNames when
    creating results tables

                        Changes in version 6.3.8                        

  - Add support for R4.4
  - Fix notes around documentation (vignette engine and brackets in
    itemize)
  - Use webp image format where possible (not in pdfs) for smaller size
  - Make sure random table names are unique in tests
  - Remove remote info for Eunomia since it's in CRAN

                        Changes in version 6.3.7                        

  - Clean up dependencies, tibble removed and IHT and ParallelLogger
    from CRAN
  - Use cohortIds for cohortCovariates to comply with FeatureExtraction
  - Add cdmDatabaseName from DatabaseDetails to model output
  - Fix bug when attributes weren't preserved on trainData$covariateData
    after split
  - Fix warnings in tests and speed them up
  - Fix bug in assignment operator in configurePython
  - Delay evaluation of plpData when using do.call like in
    learningCurves and runMultiplePlp
  - Speed up population generation when subjectId's are distinct
  - Fix bug when population was still generated when provided to runPlp

                        Changes in version 6.3.6                        

  - fix bug with ohdsi shiny modules version check (issue 415)

                        Changes in version 6.3.5                        

  - Fix sklearnToJson to be compatible with scikit-learn>=1.3
  - Fix github actions so it's not hardcoded to use python 3.7

                        Changes in version 6.3.4                        

  - added spline feature engineering
  - added age/sex stratified imputation feature engineering
  - changed result table execution date types to varchar
  - updated covariateSummary to use feature engineering

                        Changes in version 6.3.3                        

  - fixed bug introduced with new reticulate update in model saving to
    json tests

                        Changes in version 6.3.2                        

  - fixed bug with database insert if result is incomplete
  - updated/fixed documentation (Egill)
  - added model path to models (Henrik)
  - updated hyper-parameter saving to data.frame and made consistent

                        Changes in version 6.3.1                        

  - fixed bug with multiple covariate settings in diagnose plp
  - added min cell count when exporting database results to csv files
  - light GBM added (thanks Jin Choi and Chungsoo Kim)
  - fixed minor bugs when uploading results to database

                        Changes in version 6.2.1                        

  - added ensure_installed("ResultModelManager") to getDataMigrator()

                        Changes in version 6.1.0                        

  - shiny app is now using ShinyAppBuilder with a config saved in the
    /inst folder

                       Changes in version 6.0.11                        

  - fixed bugs introduced when sklearn inputs changed
  - added sklearn model being saved as jsons
  - made changes around the DatabaseConnection get table names function
    to make it work for the updated DatabaseConnection
  - removed check RAM stop (now it just warns)

                       Changes in version 6.0.10                        

  - Updated test to skip test for FE setting if the model does not fit
    (this was causing occasional test fail)
  - replaced .data$ with "" for all dplyr::select to remove warnings

                        Changes in version 6.0.9                        

  - Fix bug with python type being required to be int

                        Changes in version 6.0.8                        

  - Allow priorType to be passed down to getCV function in case prior is
    not 'laplace'
  - Seed specified in Cyclops model wasn't passed to Cyclops

                        Changes in version 6.0.7                        

  - fixed issue with shiny viewer converting connection details to large
    json

                        Changes in version 6.0.6                        

  - added check for cdmDatabaseId into createDatabaseDetails
  - added test for check for cdmDatabaseId into createDatabaseDetails to
    error when NULL
  - removed session$onSessionEnded(shiny::stopApp) from shiny server

                        Changes in version 6.0.5                        

  - fixing cox predictions

                        Changes in version 6.0.4                        

  - forcing cdmDatabaseId to be a string if integer is input

                        Changes in version 6.0.3                        

  - replaced utils::read.csv with readr::read_csv when inserting results
    from csv

                        Changes in version 6.0.2                        

  - replaced gsub with sub when inserting csvs to database

                        Changes in version 6.0.1                        

  - saved result specification csv in windows to fix odd formating issue

                        Changes in version 6.0.0                        

  - fixed sample data bugs
  - updated to use v1.0.0 of OhdsiShinyModules
  - updated plp database result tables to use the same structure for
    cohort and database as other HADES packages
  - added function to insert csv results into plp database result tables
  - added input for databaseId (database and version) when extracting
    data to be consistent with other HADES packages. This is saved in
    plp objects.

                        Changes in version 5.4.4                        

  - fixed issue with 'preprocess' vs 'preprocessing' inconsistently used
    across models
  - added metaData tracking for feature engineering or preprocessing
    when predicting
  - fixed issue with FE using trainData$covariateData metaData rather
    than trainData
  - fixed bug when using sameData for FE

                        Changes in version 5.4.3                        

  - pulled in multiple bug fixes and test improvements from Egill
  - pulled in fix for learning curves from Henrik
  - Pulled in fix for feature engineering from Solomon
  - Cleaned check messages about comparing class(x) with a string by
    changing to inherits()

                        Changes in version 5.4.2                        

  - removed json saving for sklearn models since sklearn-json is no
    longer working for the latest sklearn

                        Changes in version 5.4.1                        

  - renamed the input corresponding to the string that gets appended to
    the results table names to tablePrefix
  - fixed issues with system.file() from SqlRender code breaking the
    tests
  - added an input fileAppend to the function that exports the database
    tables to csv files
  - moved the plp model (including preprocessing details) outside of the
    result database (into a specified folder) due to the size of the
    objects (too large to insert into the database).

                        Changes in version 5.4.0                        

  - added saving of plp models into the result database
  - added default cohortDefinitions in runMultiplePlp

                        Changes in version 5.3.3                        

  - added modelType to all models for database upload

                        Changes in version 5.3.2                        

  - moved FeatureExtraction to depends
  - fixed using inherits()

                        Changes in version 5.3.1                        

  - moved most of the shiny app code into OhdsiShinyModules
  - removed shiny dependencies and added OhdsiShinyModules to suggests
  - fixed bug with linux sklearn saving

                        Changes in version 5.1.1                        

  - replaced cohortId to targetId for consistency throughout code

                        Changes in version 5.1.0                        

  - replaced targetId in model design to cohortId for consistency
    throughout code
  - replaced plpDataSettings to restrictPlpDataSettings to improve
    naming consistency
  - added ability to use initial population in runPlp by adding the
    population to plpData$population
  - added splitSettings into modelDesign
  - replaced saving json settings with ParallelLogger function
  - updated database result schema (removed researcher_id from tables -
    if desired a new table with the setting_ids and researcher_id could
    be added, removed study tables and revised results table to
    performances table with a reference to model_design_id and
    development_database_id to enable validation results without a model
    to be inserted)
  - added diagnostic code based on PROBAST
  - added diagnostic shiny module
  - added code to create sqlite database and populate in
    uploadToDatabase
  - add code to convert runPlp+val to sqlite database when viewing shiny
  - added code to extract database results into csv files:
    extractDatabaseToCsv()

                        Changes in version 5.0.5                        

  - pulled in GBM update (default hyper-parameters and variable
    importance fix) work done by Egill (egillax)

                        Changes in version 5.0.4                        

  - updated installation documents
  - added tryCatch around plots to prevent code stopping

                        Changes in version 5.0.3                        

  - updated result schema (added model_design table with settings and
    added attrition table)
  - updated shiny app for new database result schema
  - removed C++ code for AUC and Rcpp dependency, now using pROC instead
    as faster
  - made covariate summary optional when externally validating

                        Changes in version 5.0.2                        

  - updated json structure for specifying study design (made it
    friendlier to read)
  - includes smooth calibration plot fix - work done by Alex (rekkasa)
  - fixed bug with multiple sample methods or feature engineering
    settings causing invalid error

                        Changes in version 5.0.0                        

  - plpModel now saved as json files when possible
  - Updated runPlp to make more modular
  - now possible to customise data splitting, feature engineering,
    sampling (over/under) and learning algorithm
  - added function for extracting cohort covariates
  - updated evalaution to evaluate per strata (evaluation column)
  - updated plpModel structure
  - updated runPlp structure
  - updated shiny and package to use tidyr and not reshape2
  - sklearn learning algorithms share the same fit function
  - r learning algorithms share the same fit function
  - interface to cyclops code revised
  - ensemble learning removed (will be in separate package)
  - deep learning removed (will be in DeepPatientLevelPrediction
    package)

                        Changes in version 4.4.2                        

  - revised toSparseM() to do conversion in one go but check RAM
    availablility beforehand.
  - removed temporal plpData conversion in toSparseM (this will be done
    in DeepPatientLevelPrediction)

                        Changes in version 4.4.1                        

  - shiny can now read csv results
  - objects loaded via loadPlpFromCsv() can be saved using
    savePlpResult()

                        Changes in version 4.4.0                        

  - added database result storage
  - added interface to database results in shiny
  - merged in shinyRepo that changed the shiny app to make it modular
    and added new features
  - removed deep learning as this is being added into new OHDSI package
    DeepPatientLevelPrediction

                       Changes in version 4.3.10                        

  - save xgboost model as json file for transparency
  - set connectionDetails to NULL in getPlpData

                        Changes in version 4.3.9                        

  - updated andromeda functions - restrict to pop and tidy covs for
    speed
  - quick fix for GBM survival predicting negative values
  - fixed occasional demoSum error for survival models
  - updated index creation to use Andromeda function

                        Changes in version 4.3.8                        

  - fixed bug when normalize data is false
  - fixed bugs when single feature (gbm + python)
  - updated GBM

                        Changes in version 4.3.7                        

  - updated calibration slope
  - fixed missing age/gender in prediction
  - fixed shiny intercept bug
  - fixed diagnostic
  - fixed missing covariateSettings in load cvs plp

                        Changes in version 4.3.6                        

  - Removed plpData from evaluation
  - Added recalibration into externalVal
  - Updated shiny app for recalibration
  - Added population creation setting to use cohortEndDate as timeAtRisk
    end
  - fixed tests

                        Changes in version 4.3.3                        

  - Reduced imports by adding code to install some dependencies when
    used

                        Changes in version 4.3.2                        

  - fixed csv result saving bug when no model param

                        Changes in version 4.3.1                        

  - fixed r check vignette issues
  - added conda install to test

                        Changes in version 4.3.0                        

  - finalised permutation feature importance

                       Changes in version 4.2.10                        

  - fixed deepNN index issue (reported on github - thanks dapritchard)
  - add compression to python pickles
  - removed requirement to have outcomeCount for prediction with python
    models

                        Changes in version 4.2.9                        

  - cleaned all checks
  - fixed bug in python toSparseMatrix
  - fixed warning in studyPop

                        Changes in version 4.2.8                        

  - fixed bug (identified by Chungsoo) in covariateSummary
  - fixed bug with thresholdSummary
  - edited threshold summary function to make it cleaner
  - added to ensemble where you can combine multiple models into an
    ensemble
  - cleaned up the notes and tests
  - updated simulated data covariateId in tests to use integer64
  - fixed description imports (and sorted them)

                        Changes in version 4.2.7                        

  - fixed Cox model calibration plots
  - fixed int64 conversion bug

                        Changes in version 4.2.6                        

  - added baseline risk to Cox model

                        Changes in version 4.2.3                        

  - updated shiny: added attrition and hyper-parameter grid search into
    settings

                        Changes in version 4.2.2                        

  - updated shiny app added 95% CI to AUC in summary, size is now
    complete data size and there is a column valPercent that tells what
    percentage of the data were used for validation

                        Changes in version 4.2.1                        

  - updated GBMsurvival to use survival metrics and c-stat

                        Changes in version 4.2.0                        

  - added survival metrics

                        Changes in version 4.1.0                        

  - added updates and fixes into master from development branch

                        Changes in version 4.0.6                        

  - fixed bug with pdw data extraction due to multiple person_id columns
  - fixed bug in shiny app converting covariate values due to tibble

                        Changes in version 4.0.5                        

  - added calibration updates: cal-in-large, weak cal
  - updated smooth cal plot (sample for speed in big data)
  - defaulted to 100 values in calibrationSummary + updated cal plot

                        Changes in version 4.0.4                        

  - fixed backwards compat with normalization
  - fixed python joblib dependancy

                        Changes in version 4.0.2                        

  - fixed bug in preprocessing
  - added cross validation aucs to LR, GBM, RF and MLP
  - added more settings into MLP
  - added threads option in LR

                        Changes in version 4.0.1                        

  - fixed minor bug with shiny dependency
  - fixed some tests
  - added standardizedMeanDiff to covariatesummary
  - updated createStudyPopulation to make it cleaner to read and count
    outcome per TAR

                        Changes in version 4.0.0                        

  - Andromeda replaced ff data objects
  - added age/gender into cohort
  - fixed python warnings
  - updated shiny plp viewer

                       Changes in version 3.0.16                        

  - Fixed bug when running multiple analyses using a data extraction
    sample with multiple covariate settings

                       Changes in version 3.0.15                        

  - improved shiny PLP viewer
  - added diagnostic shiny viewer

                       Changes in version 3.0.14                        

  - updated external validate code to enable custom covariates using
    ATLAS cohorts
  - fixed issues with startAnchor and endAnchor

                       Changes in version 3.0.13                        

  - Deprecating addExposureDaysToStart and addExposureDaysToEnd
    arguments in createStudyPopulation, adding new arguments called
    startAnchor and endAnchor. The hope is this is less confusing.
  - fixed transfer learning code (can now transfer or fine-tune model)
  - made view plp shiny apps work when some results are missing

                       Changes in version 3.0.12                        

  - set up testing
  - fixed build warnings

                       Changes in version 3.0.11                        

  - added tests to get >70% coverage (keras tests too slow for travis)
  - Fixed minor bugs
  - Fixed deep learning code and removed pythonInR dependancy
  - combined shiny into one file with one interface

                       Changes in version 3.0.10                        

  - added recalibration using 25% sample in existing models
  - added option to provide score to probabilities for existing models
  - fixed warnings with some plots

                        Changes in version 3.0.9                        

Small bug fixes:

  - added analysisId into model saving/loading
  - made external validation saving recursive
  - added removal of patients with negative TAR when creating population
  - added option to apply model without preprocessing settings (make
    them NULL)
  - updated create study population to remove patients with negative
    time-at-risk

                        Changes in version 3.0.8                        

Changes:

  - merged in bug fix from Martijn - fixed AUC bug causing crash with
    big data
  - update SQL code to be compatible with v6.0 OMOP CDM
  - added save option to external validate PLP

                        Changes in version 3.0.7                        

Changes:

  - Updated splitting functions to include a splitby subject and renamed
    personSplitter to randomSplitter
  - Cast indices to integer in python functions to fix bug with non
    integer sparse matrix indices

                        Changes in version 3.0.5                        

Changes:

  - Added GLM status to log (will now inform about any fitting issue in
    log)
  - Added GBM survival model (still under development)
  - Added RF quantile regression (still under development)
  - Updated viewMultiplePlp() to match PLP skeleton package app
  - Updated single plp vignette with additional example
  - Merge in deep learning updates from Chan

                        Changes in version 3.0.4                        

Changes:

  - Updated website

                        Changes in version 3.0.3                        

Changes:

  - Added more tests
  - test files now match R files

                        Changes in version 3.0.2                        

Changes:

  - Fixed ensemble stacker

                        Changes in version 3.0.1                        

Changes:

  - Using reticulate for python interface
  - Speed improvements
  - Bug fixes
