# tern 0.8.4

### Enhancements
* Added method for `character` class to `h_coxreg_inter_effect` enabling `character` covariates in `summarize_coxreg`.

### Miscellaneous
* Began deprecation of `time_unit_input` and `time_unit_output` arguments and replaced them with the `input_time_unit` and `num_pt_year`, respectively, in `control_incidence_rate`.
* Removed deprecated `pairwise` function.

### Bug fixes
* Fixed long double assertion check in `sum(weights)` for `M1mac` installation.

# tern 0.8.3

### Enhancements
* Added explicit zero counts to `g_km` plot "at risk" annotation tables.
* Added a flag for total level split in `analyze_patients_exposure_in_cols`.
* Implemented `.indent_mods` argument in functions `h_tab_one_biomarker`, `h_tab_rsp_one_biomarker`, `h_tab_surv_one_biomarker`, `summarize_logistic`, `logistic_summary_by_flag`, `tabulate_rsp_biomarkers`, `a_coxreg`, `summarize_coxreg`, `tabulate_survival_biomarkers`, `surv_time`, `surv_timepoint`, and `cfun_by_flag`.
* Updated `summarize_coxreg` to print covariates in data rows for univariate Cox regression with no interactions and content rows otherwise.
* Removed "baseline status" text from `d_count_abnormal_by_baseline` labels.
* Improved default sizing of annotation tables in `g_km` and added dynamic scaling of the `surv_med` and `coxph` annotation tables, with customization via the `width_annots` argument.

### Bug Fixes
* Fixed bug in `split_text_grob` preventing titles and footnotes from being properly formatted and printed by `decorate_grob`.
* Fixed bug in `g_lineplot` preventing the addition of lines to the plot when midpoint statistic calculations result in `NA` value(s).
* Fixed `tern:::tidy.glm` formals to respect `broom:::tidy.default` formals.

### Miscellaneous
* Updated `README` to include installation instructions for CRAN.
* Remove examples for unexported functions.
* Export functions `has_count_in_cols`, `has_counts_difference`, `combine_counts`, `h_tab_rsp_one_biomarker`, `arrange_grobs`, `a_count_patients_sum_exposure`, `a_coxreg`, `groups_list_to_df`, `forest_viewport`.
* Updated `README` to include installation instructions for CRAN.
* Began deprecation of `indent_mod` argument and replaced it with the `.indent_mods` argument in `summarize_num_patients` and `analyze_num_patients`.

# tern 0.8.2

### Breaking Changes
* Refactored `s_coxreg` and `summarize_coxreg`to work with new analysis function `a_coxreg`.

### Enhancements
* Added `section_div` and `na_level` arguments to `summarize_vars`.
* Added `median_range` as a numeric variable statistic option for `summarize_vars`.
* Corrected ordering of factor levels by `d_onco_rsp_label`.
* Added new "Analyze Functions", "Summarize Functions", and "Analyze Functions on Columns" overview pages.
* Consolidated all KM plot documentation within the `g_km` function.
* Added `a_count_patients_sum_exposure` for `summarize_patients_exposure_in_cols` and new analyze function `analyze_patients_exposure_in_cols`.
* Added more informative error when the user selects an invalid method for unstratified analyses in `s_proportion_diff`.
* Updated `s_summary` and `s_compare` to allow `NA` values in input variables. For factor variables with `NA`s, if `na.rm = FALSE` an explicit `NA` level will be automatically added. `na.rm = TRUE` will also consider `"<Missing>"` values and exclude them.
* Updated purpose of `na_level` parameter in `s_summary` and `s_compare` to align with other `tern` functions. Instead of being a string to consider as `NA` when setting `na.rm = TRUE`, it now defines a string to print in place of `NA` values in the output table.

### Bug Fixes
* Fixed missing label for `TRTEDTM` in `tern` datasets.
* Fixed improper implementation of `na_level` argument in `summarize_vars` preventing it from having an effect.

### Miscellaneous
* Implemented the `lubridate` package for date variables in `tern` datasets.
* Organized `.gitignore` and `.Rbuildignore` files.
* Removed deprecated `footnotes` functions and all related files.
* Started deprecation cycle for `pairwise` function.
* Moved `count_patients_with_flags` functions from `count_patients_with_event.R` to `count_patients_with_flags.R`.

# tern 0.8.0

### Enhancements
* Added `summarize_glm_count` function to analyze count data using a linear model.
* Added legend to `g_step`.
* Added formatting functions `format_fraction_fixed_dp` and 
  `format_count_fraction_fixed_dp` with fixed single decimal place in percentages.
* Added `na_level` and `labelstr` arguments to `summarize_vars_in_cols`.
* Added `analyze_num_patients` to include summary at the beginning that does not
  repeat when paginating.
* Added `h_row_first_values` function as a more general helper function to retrieve
  first values from specific rows.
* Added option to remove `"(n)"` suffix from `unique_count` labels for `s_num_patients`.
* Added options to `g_km` to annotate with statistics (`annot_stats`) and add corresponding 
  vertical lines (`annot_stats_lines`).

### Bug Fixes
* Fixed bug causing incorrect ordering of numeric grade levels when missing 
  grades are present in `s_count_occurrences_by_grade`.
* Refactored `summarize_vars_in_cols` to work with pagination machinery.
* Fixed bug to allow passing of `conf_level` argument to `emmeans::contrast()` in `s_ancova`.
* Fixed bugs in `rtables_access.R` caused by not checking for specific combinations
  (also the standard values that were never used) of column indices and names.
* Fixed single applicable record bug in `count_abnormal_by_grade`.
* Fixed bug in `add_rowcounts` that caused all row count row values to count as zero.
* Fixed bug in `h_col_indices` causing an error when pruning with combination columns.
* Fixed bug in `test_proportion_diff` missing argument for `var_labels`.

### Documentation and Tests
* Added more tests to increase code coverage.
* Created separate documentation files for functions in different sections of `pkgdown` reference.
* Created separate `.R` files for logistic regression and cox regression helper functions.
* Fixed table tests using `analyze_num_patients` to generate an initial summary so there is no 
  repetition when paginating.
* Updated tests to use `testthat` 3rd edition and replaced applicable tests with snapshot testing.
* Updated `summarize_ancova` examples to use `iris` dataset instead of `scda` data.
* Created vignette which saves cached synthetic `CDISC` dataset files to the `data/` folder and 
  generated cached synthetic datasets.
* Updated all examples/tests to use datasets from the `data/` folder instead of `scda` datasets.
* Removed all template tests from `tern`. These tests are in internal repo `scda.test`.

### Miscellaneous
* Renamed `summarize_vars_in_cols` to `analyze_vars_in_cols` to reflect the appropriate `analyze` logic.
* Removed redundant `summary_in_cols` helper functions.
* Exported function `format_xx`.
* Replaced deprecated `ggplot2` functions/arguments to fix warnings.
* Replaced deprecated function `forcats::fct_explicit_na` with `forcats::fct_na_value_to_level`.
* Removed deprecated `wrap_text` function and related files.
* Started deprecation cycle for `footnotes` functions.

# tern 0.7.10

### New Features
* Added stratified `Newcombe` and stratified Wilson statistics to `estimate_proportion` and
  `estimate_proportion_diff` with relative tests.
* Added `stat_mean_pval`, a new summary statistic to calculate the p-value of 
  the mean.
* Added statistic `mean_se` (mean with standard error) for `summarize_variables` 
  and related functions.
* Introduced again `Rdpack` for references.

### Enhancements 
* Redesign of data handling in tests by removing repetitive data loads and 
  library calls.
* Added `DescTools::BinomDiffCI` function within `tern`.
* Added new parameter to `summarize_logistic` to specify which pivoted value 
  to use during analysis.
* Updated `s_coxph_pairwise` to generate log-rank p-value using original 
  log-rank test instead of Cox Proportional-Hazards Model.
* Implemented `nestcolor` in all examples by adapting `g_km`, `g_ipp`, 
  `g_waterfall`, `g_step`, `g_lineplot`, and `g_forest`.
* Added parameters `interaction_y` and `interaction_item` in `ANCOVA` to make the 
  interaction calculations available.
* Added new parameter `footnotes` to add footnotes to `g_km`.

### Migration from `assertthat` to `checkmate`
* Implemented `checkmate::assert_vector`, `checkmate::assert_set_equal`, and 
  `checkmate::assert_int` to check vector type, length, and values.
* Replaced with standard assertions from `checkmate` the following functions:
  `all_elements_in_ref`, `is_df_with_nlevels_factor`, `is_df_with_no_na_level`, 
  `is_proportion_vector`, `is_quantiles_vector`, `is_character_or_factor`, 
  `is_nonnegative_count`, `is_valid_character`, `assert_character_or_factor`, 
  `assert_equal_length` and `has_tabletree_colnames`.
* Modified `is_proportion`, `is_equal_length`, `is_df_with_no_na_level`, 
  `is_df_with_nlevels_factor`, `is_variables`, `is_df_with_variables`, 
  `is_df_with_factors`, `is_valid_factor` to use assertion logic.
* Added more verbose warnings from `as_factor_keep_attributes`.
* Made `assert_df_with_factors` and `assert_proportion_value` internal functions.
* Renamed `assertthat.R` and `test-assertthat.R` to `utils_checkmate.R` and 
  `test-utils_checkmate.R`.

### Documentation and NAMESPACE Polishing
* Added stable badges for:
   - `count_abnormal_by_marked` (reference to `abnormal_by_marked`),
   `count_abnormal_lab_worsen_by_baseline` and `h_adlb_worsen` (reference to
   `abnormal_by_worst_grade_worsen_from_baseline`), `count_abnormal_by_worst_grade`
   (reference to `abnormal_by_worst_grade`), `to_string_matrix`, `tidy.summary.coxph`, `tidy.step`,
   `surv_timepoint`, (reference to `survival_timepoint`), `surv_time` (reference to `survival_time`),
   `coxph_pairwise` (reference to `survival_coxph_pairwise`),
   `extract_survival_subgroups` and `tabulate_survival_subgroups` (reference to `survival_duration_subgroups`),
   `extract_survival_biomarkers` and `tabulate_survival_biomarkers` (reference to
   `survival_biomarkers_subgroups`), `control_summarize_vars`, `s_summary` and
   `a_summary` (reference to `summarize_variables`) and kept the S3 method tree.
   - `summarize_patients_exposure_in_cols`, `summarize_num_patients` with
   `s_num_patients`, `s_num_patients_content`, `summarize_num_patients`.
   - `count_cumulative`, `count_missed_doses`, `count_patients_events_in_cols`, `summarize_colvars`, `summarize_change`, `summarize_ancova`,`as.rtable`, `color_palette`, `add_footnotes`.
   - (statistical function controls)  `control_coxreg`, `control_coxph`,
   `control_incidence_rate`, `control_lineplot_vars`, `control_surv_time`,
   `control_surv_timepoint`, `control_logisitic`, `control_step`.
   - `stat_mean_ci`, `stat_median_ci`, `split_cols_by_groups`, `explicit_na`, `sas_na`, `extract_rsp_subgroups`, `tabulate_rsp_subgroups`, `extract_rsp_biomarkers`,
   `tabulate_rsp_biomarkers`, `keep_rows`, `keep_content_rows`, `has_count_in_any_col`,
   `has_fraction_in_cols`, `has_fraction_in_any_col`, `has_fractions_difference`,
   `test_proportion_diff`, `pairwise`, `logistic_regression`,
   `estimate_incidence_rate`, `control_incidence_rate` (reference to
   `incidence_rate`), `cut_quantile_bins`,
   `estimate_multinomial_rsp`, `decorate_grob_set`, `extreme_format`, `fit_rsp_step`,
   `fit_survival_step`, `footnotes`, `footnotes-set`,
   `format_count_fraction`, `format_fraction_threshold`, `formatting_functions`,
   `format_fraction`, `combination_function` (S4 method), `compare_variables` (S3 method), 
   `kaplan_meier`.
* Internal keywords added, export removed, `_pkgdown.yml` updated, and `tern:::` added for
   tests/examples/vignettes where present for the following functions:
   - (chain functions, reference to `abnormal_by_marked`) `s_count_abnormal_by_marked`,
   `a_count_abnormal_by_marked`.
   - (chain functions, reference to `abnormal_by_worst_grade_worsen_from_baseline`)
   `a_count_abnormal_lab_worsen_by_baseline`, `s_count_abnormal_lab_worsen_by_baseline`.
   - (chain functions, reference to `abnormal_by_worst_grade`) `s_count_abnormal_by_worst_grade`,
   `a_count_abnormal_by_worst_grade`.
   - (chain functions, reference to `survival_timepoint`) `s_surv_timepoint`, `s_surv_timepoint_diff`,
   `a_surv_timepoint`, `a_surv_timepoint_diff`.
   - (chain functions, reference to `survival_time`) `s_surv_time`, `a_surv_time`.
   - (chain functions, reference to `survival_coxph_pairwise`) `s_coxph_pairwise`, `a_coxph_pairwise`.
   - (chain functions, reference to `survival_duration_subgroups`) `a_survival_subgroups`.
   - (chain functions, reference to `count_cumulative`) `s_count_cumulative`, `a_count_cumulative`.
   - (chain functions, reference to `count_missed_doses`) `s_count_nonmissing`, `s_count_missed_doses`, `a_count_missed_doses`.
   - (chain functions, reference to `count_patients_events_in_cols`) `s_count_patients_and_multiple_events`, `summarize_patients_events_in_cols`.
   - (chain functions, reference to `incidence_rate`) `s_incidence_rate`, `a_incidence_rate`.
   - (cox regression helper) `cox_regression_inter`, `decorate_grob_factory`, `draw_grob`, `estimate_coef`.
   - `summary_labels`, `summary_formats`, `s_count_patients_sum_exposure`,
   `a_change_from_baseline` `s_change_from_baseline`, `a_ancova`, `s_ancova`, `arrange_grobs`, `as_factor_keep_attributes`, `combine_levels`, `split_text_grob`,
   `groups_list_to_df`, `s_cox_multivariate`, `is_leaf_table`, `a_response_subgroups`, `range_noinf`, `has_count_in_cols`,
   `has_counts_difference`, `prop_chisq`, `prop_cmh`, `prop_schouten`, `prop_fisher`,
   `s_test_proportion_diff`, `a_test_proportion_diff`, `fct_discard`, `fct_explicit_na_if`.

### Bug Fixes
* Fixed retrieval method of `stats::ancova` output due to version inconsistency.
* Fixed tests to respect the new standard print for `NA` coming from `rtables`.
* Fixed error in tests coming from changes in `formatters::var_labels`.
* Fixed `prop_diff` functions to respect success responses (`TRUE` values).
* Fixed error coming from comparing factors vector to characters vector.
* Fixed empty vector exception for `cut_quantile_bins`.
* Fixed exception error when empty strings are present in pivoted columns (`rtables` split
  functions)
* Fixed bug in `s_ancova` causing an error when the first level of the arm 
  factor is not the control arm. 
* Fixed bug in `s_abnormal_by_worst_grade` when there is one `PARAM` level.
* Fixed bug in `prop_diff_wald` when selecting all responders, updated tests accordingly.
* Fixed bug in `h_ancova` that caused an error when deselecting all covariates.

### Miscellaneous
* Added deprecated badge to `g_mmrm`.
* Removed internal function calls in examples (`tern:::`) and added `dontrun` 
  to internal function examples.
* Removed warnings and messages to console occurring in examples and tests.
* Deprecated functions `color_palette` and `h_set_nest_theme` in favor of 
  `nestcolor::color_palette` and `nestcolor::theme_nest`, respectively.
* Removed deprecated functions: `color_palette`, `color_palette_core`, 
  `h_set_nest_theme`, `s_cox_univariate`.
* Removed deprecated `mmrm` functions: `fit_mmrm`, `g_mmrm_diagnostic`, 
  `g_mmrm_lsmeans`, `as.rtable.mmrm`, `h_mmrm_fixed`, `h_mmrm_cov`, 
  `h_mmrm_diagnostic`, `tidy.mmrm`, `s_mmrm_lsmeans`, `s_mmrm_lsmeans_single`, 
  `summarize_lsmeans`.
* Renamed functions `arm` to `study_arm` and `extract` to `extract_by_name`.
* Renamed `rtables.R` to `utils_rtables.R`.
* Extracted `cox_regression_inter` into a separate file from `cox_regression`.
* Renamed `estimate_incidence_rate.R` to `incidence_rate.R` to match the documentation grouping name.
* Extracted `control_incidence_rate` into a separate file because it produces a separate documentation file.
* Added `@md` and removed `@order` from `incidence_rate.R`. Modified examples accordingly.
* Removed hyperlink from `prop_schouten` function documentation.
* Exported `draw_grob` function.

# tern 0.7.8

### Fix

* `h_split_by_subgroups` documentation warning fix for wrong placing of example block

### Documentation and NAMESPACE polishing

*  Adopting the standard of badges for `@description` instead of every
   `@descriptionIn` function. Corrected accordingly `summarize_variables_in_cols`
*  Added stable badge for `g_lineplot`, `g_step`, `g_waterfall`, `cox_regression`,
   `score_occurrences`, `add_rowcounts`, `odds_ratio`, `count_occurrences`,
   `count_occurrences_by_grade`, `explicit_na`, `df_explicit_na`,
   `count_patients_with_event`, `decorate_grob`, `combine_groups`,
   `append_varlabels`, `univariate`, `stack_grobs`, `count_abnormal` (reference
   to `abnormal`), `count_abnormal_by_baseline` (reference to
   `abnormal_by_baseline`).
*  Internal keywords added, export removed, `_pkgdown.yml` polished and `tern:::` for
   tests, examples, and vignettes when present for the following functions:
   - (helper functions) `h_format_row`, `h_map_for_count_abnormal`
   - (utils functions) `make_names`, `month2day`, `day2month`
     `empty_vector_if_na`, `aesi_label`,
     `n_available`, `format_xx`, `arm`.
   - `count_values_funs`, `prop_difference`, `combine_counts`.
   - (chain functions) `s_count_abnormal`, `a_count_abnormal`.
   - (chain functions) `s_count_abnormal_by_baseline`, `a_count_abnormal_by_baseline`,
     `d_count_abnormal_by_baseline`.
*  Deprecated `s_cox_univariate` function has now deprecated badge.

### Enhancements

* Enhanced `g_lineplot` with table to automatically scale the table height and return a `ggplot` object.
* Enhanced `g_ipp` with caption argument and adjust the position.
* Enhanced `prop_diff`, `tern` function and related functions to be able to apply a continuity correction in the `Newcombe` method.
* Enhanced `summarize_numeric_in_columns` and `summarize_variables` to allow factor/character summary and to be able to summarize the number of `BLQs` in `AVALC` from `ADPC` dataset.
* Updated order of summarize variables stats in manual for order consistency.
* Added a `sum` option to `summarize_variables`.
* Use consistent color palette for plotting (`stream` by default).
* Enhanced `h_pkparam_sort` function with argument `key_var` to allow data with different column names.

### Miscellaneous
* Updated `test-table_aet02.R` variant 12.
* Changed the `scda` data version to '2022-02-28'.
* Added a template to the `pkgdown` site.
* Removed package dependencies of `grDevices`, `stringr`, and `viridisLite`.
* Renaming `summarize_numeric_in_columns` to `summarize_variables_in_columns`.
* Renaming `summarize_vars_numeric_in_cols` to `summarize_vars_in_cols`.
* Fixed a bug where points on the `g_lineplot` plot were not connected when missing values.
* Updated the package authors.

# tern 0.7.7

### Breaking changes

* Move `MMRM` into a separate package `tern.mmrm`.

### New features

* Added `h_pkparam_sort` to order `PK PARAM` value based on the order of the dataset generated by `d_pkparam()`.
* Added `d_pkparam` to generate PK parameter map for sorting.

### Enhancements

* Changed the `nudge_y` argument of `h_g_ipp` to be dependent on the data, fixing an issue whereby the baseline labels were offset incorrectly.
* Enhanced `stat_mean_ci` and `s_summary.numeric` to calculate the geometric mean with its confidence intervals.

### Miscellaneous

* Updated dependencies and internal adjustments after the `rtables` package refactor.
* Removed `with_label`, `var_labels`, and `var_labels<-` to resolve conflict with the `formatters` package, a new dependency.
* Added new "Introduction to `tern`" and "`tern` tabulation" vignettes.

# tern 0.7.6

### New features
* Added `h_map_for_count_abnormal` to create the map used in `trim_levels_to_map` split function by calling this helper function. It supports two methods: one with all observed mapping, one with at least low limit above zero and at least one non missing high limit.
* Added `s_summary_numeric_in_cols` and `summarize_vars_numeric_in_cols` functions to generate summary statistics in columns, mainly used for PK datasets.
* Added five statistics to `s_summary.numeric` to use in `s_summary_numeric_in_cols`.

### Enhancements
* Enhanced functions `tabulate_survival_subgroups` and `tabulate_rsp_subgroups` (Survival Duration and Best Response analyses) to calculate `N`-s based on the records considered to create the model.
* Enhanced the function `estimate_proportion` and related functions to be able to apply a continuity correction in the Wilson method.
* Refactored `count_abnormal_by_marked` and related statistics and formatting functions to use a more efficient layout with `.spl_context` argument used for determining denominators and with `trim_levels_to_map` split function under `split_rows_by` to show the desired levels in the table. This is a breaking change.
* Refactored `count_abnormal_by_worst_grade` and related statistics and formatting functions to use a more efficient layout with `.spl_context` argument used for determining denominators and with `trim_levels_to_map` split function under `split_rows_by` to show the desired levels in the table. This is a breaking change.
* Refactored `count_abnormal` function and related statistics and formatting functions to use a more efficient layout with `trim_levels_to_map` split function under `split_rows_by` to show the desired levels in the table. Also updated `abnormal` argument to be able to consider more than one level for each direction. This is a breaking change.
* Enhanced the function `estimate_incidence_rate` and related functions to consider the week as time unit for data input.

### Bug fixes
* Fixed bug in `assertthat` functions that output wrong data frame names and limited length of failure message outputs.

### Miscellaneous
* Removed dependency on `utils.nest` by using the `checkmate` and `purrr` packages for validation and moved `get_free_cores` and `skip_if_too_deep` functions from `utils.nest` into `tern`.

# tern 0.7.5

### New features
* Added functions to estimate continuous biomarker effects across subgroups for survival and binary response endpoints, used to produce corresponding forest plots, see `survival_biomarkers_subgroups` and `response_biomarkers_subgroups`.
* Added `g_lineplot` plot function, including new `h_format_row` helper function and `control_lineplot_vars` function. Removed `g_summary_by`.
* Added new safety helper function `h_stack_by_baskets` to stack events in `SMQ` and/or `CQ` basket flag in `ADAE` data set.

### Enhancements
* Added a couple of new statistics to `s_summary.numeric`. Added `names` attribute to each element of the final list returned by the `s_summary.numeric` function. Added `summary_formats` and `summary_labels` helper functions.
* Added option to also convert logical variables to factor variables in `df_explicit_na`.
* Refactored `h_append_grade_groups` to improve its flexibility, robustness and clearness, and to make sure the result is ordering according to the order of `grade_groups`. Also, added `remove_single` argument which controls whether the elements of one-element grade groups are in the output or removed.
* Added `var_labels` and `show_labels` arguments to `count_occurrences` and `count_patients_with_flags` to allow for creation of a title row.
* Added `na_level` argument to `count_abnormal_by_baseline`.
* Updated `h_append_grade_groups` to no longer fill-in empty grade groups with zeros.

### Bug Fixes
* Fixed `prop_diff_cmh` to handle edge case of no FALSE (or TRUE) responses.
* Enhanced `g_mmrm_diagnostic` to improve error handling when data is not amenable to the Locally Weighted Scatterplot Smoothing.
* Fixes in `g_km`:
  * Plot can now display any combination of the annotation tables for number of patients at risk, median survival time, and `CoxPH` summary.
  * Function will return a warning instead of an error if the `arm` variable includes a single level and `annot_coxph = TRUE`.
  * Lines in the plot now start at time 0 and probability 1.
  * Category labels can include the equals sign.

### Miscellaneous
* Fixed `day2month` and `month2day` to work with NA data.
* Added parameters for `stat_mean_ci` and `stat_median_ci` so that they may return different outputs.
* Added functionality in `h_row_counts` to handle analysis rows with `NULL` cells.
* Updated `LICENCE` and `README` with new package references.
* Added `error_on_lint: TRUE` to `.lintr`.

# tern 0.7.4

### New features
* Added new safety layout functions:
  * `count_abnormal_by_marked` tabulates marked laboratory abnormalities.
  * `summarize_patients_exposure_in_cols` tabulates patient counts and sum of exposure across all patients.

### Enhancements
* Enhanced `mmrm` related functions for fitting models without `arm` variable.
* Updated `cox_regression` to work without covariates. Also in case of interaction model summary, p-values for main effect coefficients are no longer displayed.
* Descriptive statistics returned by `summarize_vars` now include quantiles. `summarize_vars` now accepts the control function `control_summarize_vars` to specify details about confidence level for mean and median and quantile details. The `control` argument replaces `conf_level`.
* Added `var_labels` and `show_labels` arguments to `count_occurrences_by_grade`.
* Changed `indent` argument in `append_varlabels` to accept non-negative integer to represent the indent space defined by user. Previous calls with Boolean `indent` will do an integer conversion and produce a warning.

### Bug Fixes
* Corrected `tabulate_survival_subgroups` and related survival forest plot functions to use total number of events, instead of observations, as default for scaling the symbol sizes in the plot. (The user might still use total number of observations manually if they wish to do so.)
* Helper function `h_adsl_adlb_merge_using_worst_flag` will now impute `BTOXGR` for missing visits.

### Miscellaneous
* Deleted `count_abnormal_by_worst_grade_by_baseline` and its related statistic and analysis functions as a simpler design will create lab abnormality tables.
* Switched data in examples to use `scda` instead of `random.cdisc.data` package.

# tern 0.7.3

### New Features
* Added Subgroup Treatment Effect Pattern (STEP) model fitting functions `fit_rsp_step` and `fit_survival_step`, the corresponding tidy method `tidy.step` as well as the graph function `g_step`.
* Added new layout function `compare_vars` which compares variables of different types between columns and produces a p-value for the comparison to the reference column. Function built on top of the `summarize_vars` functionality.
* Added utility functions:
  * `cut_quantile_bins` cuts a numeric vector into quantile bins.
  * `fct_collapse_only` collapses levels of a factor and keeps those in the order provided.
  * `fct_explicit_na_if` inserts explicit missings in a factor based on a condition.
  * `range_noinf` is a kind of a wrapper function of `base::range`. It returns `c(NA, NA)` instead of `c(-Inf, Inf)` for zero-length data.

### Enhancements
* Cox regression via `fit_coxreg_univar` and `fit_coxreg_multivar` is now also possible without treatment arm. In the univariate case this means that it fits separate univariate models for the provided covariates and tabulation of corresponding effect estimates can later occur.
* Added `fraction` in result returned by `s_count_occurrences`. It contains a list of numerators and denominators with one element per occurrence.
* Updated `sum_num_patients` and `count_occurrences` for the result `unique` and `count_fraction` to return (0, 0) when input is empty.
* Added a new argument `groups_lists` to `extract_survival_subgroups`, `extract_rsp_subgroups` and associated helper functions which allows to group factor levels of subgroup variables into manually defined groups, enhancing the flexibility of the resulting forest graphs.
* Forest graph function `g_forest` now extracts default arguments from attributes of the input table produced by `tabulate_rsp_subgroups` and `tabulate_survival_subgroups` so that the user does not have to do this manually anymore.
* In `g_km`:
  * Remove arm variable name from arm labels in plot legend and annotation tables.
  * Show symbol used to mark censored cases and match order of arm variable factor levels in the legend.
  * Display hazard ratio and its confidence interval to two decimal places.
  * Updated default position of hazard ratio table to stay on the left bottom corner but above x-axis.
  * Use arm value as strata name in when treatment arm variable has a single level.
* Updated `s_surv_time` function to use a newly created function `range_noinf` instead of `base::range`.
* New argument `no_fillin_visits` added to `h_adsl_adlb_merge_using_worst_flag` to specify excluded visits from the post-baseline worst toxicity grade output. Improved `h_adsl_adlb_merge_using_worst_flag` to include variables shared between `adsl` and `adlb`, along with `PARAM`, `PARAMCD`, `ATOXGR`, `BTOXGR` and optionally `AVISIT`, `AVISITN` when `by_visit = TRUE`. Prior output contained `USUBJID`, `ARMCD`, `PARAMCD`, `ATOXGR`, and `BTOXGR`.

### Bug Fixes
* Fix bug in `s_surv_timepoint` for cases when there are zero patients at risk.
* Modified `stat_median_ci` function so that when passing empty var with empty name, no `row names contain missing values` error would show.

### Miscellaneous
* Deprecated `s_cox_univariate` function, use `fit_coxreg_univar` function instead.
* Updated default formats of `hr` and `hr_ci` in `a_coxph_pairwise` and median in `s_surv_time` to align with STREAM.
* Updated the pre-processing code in the files `test-table_ttet01.R` and `test-table_dort01.R` to make sure the analysis variable `EVNT1` has both levels of the factor defined.
* Improved error message when number of levels in a factor variable in a data frame is not as expected.

# tern 0.7.2
* Fixed column label internal test errors.

# tern 0.7.1
* New argument `position_surv_med` added to `g_km` to move position of the annotation table with median survival times.
* Fixed bug in `g_km` related to the ignored arguments `pch` and `size` which were not passed on to helper function `h_ggkm`.
* Updated `xticks` and `max_time` arguments in `g_km` for greater functionality. `max_time` added as an argument in `h_xticks` to allow this.
* Fixed bug in `prop_diff_cmh` that led to `NaN` weighted proportion difference estimates and missing confidence intervals. Before this change, when including no patients from one treatment arm for at least one stratum the estimation did not lead to numeric results.
* Fixed bug in `prop_cmh` giving an error in case of at least one stratum containing less than two observations.
* New argument `n_events` added to `estimate_incidence_rate`.
* New argument `denom` added to `count_occurrences`.
* New arguments `yval` and `ci_ribbon` added to `g_km`.
* Add new individual patient plot function `g_ipp` along with helpers `h_g_ipp` and `h_set_nest_theme`.
* Fixed bug in `count_patients_with_events`, now shows zero counts without percentage.
* Fixed bug in `get_mmrm_lsmeans` which did not allow `MMRM` analysis of more than 3000 observations.
* Updated `stat_mean_ci` and `stat_median_ci` to handle edge cases with number of elements in input series equal to 1. For such cases, `NA_real_` is now returned, instead of `NA` or `+/-Inf` for confidence interval (CI) estimates.
* Rename `n_lim` argument of `stat_mean_ci` to `n_min` to better reflect its desired meaning.

# tern 0.7.0
This version of `tern` introduces a major rewriting of `tern` due to the change to layout based tabulation in `rtables`. `tern` now does not build tables directly anymore, instead it provides analysis functions to build tables, see the examples.
* Counting patients with abnormal values post-baseline with `count_abnormal`.
* Counting patients with graded abnormal values with `count_abnormal_by_worst_grade`.
* Counting patients with abnormal values by baseline status with `count_abnormal_by_baseline`.
* Counting patients with missed doses with `s_count_missed_doses` and `count_missed_doses`.
* Counting patients with event flags with `count_patients_with_event` and `count_patients_with_flags`.
* Summarizing variables with `summarize_vars` (supports numeric, factor, character and logical variables). Note that factors need to have `NA`s converted to `na_level` before use.
* Summarizing change from baseline with `summarize_change`.
* Summarizing variables in columns with `summarize_colvars`.
* Estimating difference for responder proportions with `estimate_proportion_diff`.
* Estimating difference for Odds Ratio with `estimate_odds_ratio`.
* Testing the difference in responder proportions with `test_proportion_diff`.
* Estimating the responder proportion for the level of a factor with `estimate_multinomial_response`.
* Fitting and tabulating the results of Cox regressions with `fit_coxreg_univar`, `fit_coxreg_multivar` and `summarize_coxreg`, respectively.
* Pruning occurrence tables (or tables with counts and fractions) with flexible rules, see `?prune_occurrences` for details.
* Sorting occurrence tables using different options, see `?score_occurrences` for details.
* Fitting and tabulating `MMRM` models with `fit_mmrm` and `as.rtable` and `summarize_lsmeans`, see `?tabulate_mmrm` for details.
* Counting the number of unique and non-unique patients with `summarize_num_patients`.
* Counting occurrences with `count_occurrences`.
* Counting occurrences by grade with `summarize_occurrences_by_grade` and `count_occurrences_by_grade`.
* Counting patients and events in columns with `summarize_patients_events_in_cols`.
* Tabulating the binary outcome response by subgroup with `extract_rsp_subgroups` and `tabulate_rsp_subgroups`.
* Tabulating the survival duration by subgroup with `extract_survival_subgroups` and `tabulate_survival_subgroups`.

# tern 0.6.9
* Removing not used imports.

# tern 0.6.8
* Improved handling of missing data in aggregation functions: `a_mean_sd`, `a_median`,  `a_n_true_and_freq`, `a_count`, `a_q1q3`, `a_iqr`, `a_range`.
* New default p-value method in `s_test_proportion_diff`: Chi-Squared Test with Schouten Correction.
* Add new function `t_contingency` for contingency tables.
* Renamed the class `splitText` to `dynamicSplitText` to resolve the name conflict with the package `ggpubr`.
* Add `rreplace_format` for tabulation post-processing.
* Add new tern function `t_ancova` to create `ANCOVA` tables, as well as corresponding elementary table function `t_el_ancova` and summary function `s_ancova`.
* Add new tern function `s_odds_ratio` to estimate Odds Ratio of response between categories, as well as the corresponding elementary table function `t_el_odds_ratio`.
* Added new CI methods (`Agresti-Coull`, `Jeffreys`) for `s_proportion`.
* Added new CI methods `anderson-hauck` and `newcombe` to `s_proportion_diff`.
* Added new p-value methods (Fisher's Exact, Chi-Squared Test with Schouten Correction) for `s_test_proportion_diff`.
* The binary summary table function `t_binary_outcome` takes now lists (instead of character vectors) specified by the helper function `control_binary_comparison` as the arguments `strat_analysis` and `unstrat_analysis`. Odds Ratio estimates and CIs are now removable and included by default, similarly to the other subsections of the arm comparison analyses. Also added argument `rsp_multinomial`.
* Add new table function `t_el_multinomial_proportion`.
* Add new table function `t_abn_shift`.
* Add new `MMRM` analysis function `s_mmrm`, as well as corresponding table functions `t_mmrm_lsmeans`, `t_mmrm_cov`, `t_mmrm_diagnostic`, `t_mmrm_fixed`, and plot functions `g_mmrm_lsmeans`, `g_mmrm_diagnostic`. The results of these match SAS results (up to numeric precision).
* Deprecated old `MMRM` functions `a_mmrm` and `t_mmrm` (they give a deprecation warning but still work) to remove in the next release. The reason is that the results of these functions don't match SAS results.
* Fix bug in `g_km` related to numbers in patients at risk table to correct numbers for integer time-to-event variable inputs.

# tern 0.6.7

* For functions with `row_by` argument, inputs no longer require use of `nested_by`.
* Add `stat_mean_ci` and `stat_median_ci` for error bars in `ggplot2`.
* Add new tern function `t_coxreg` as single interface for diverse cox regression types.
* Add compound table for binary endpoint: `t_binary_endpoint` and elementary functions: `t_el_proportion`, `t_el_proportion_diff` and `t_el_test_proportion_diff`. The supporting summary functions added are: `s_proportion`, `s_adj_proportion_diff`, `s_proportion_diff` and `s_test_proportion_diff`.
* Added new tern function `t_events_patyear` to create event table adjusted person-years.
* Added new tern function `t_abnormality` and the elementary table function `t_el_abnormality`.
* Removed `grade_levels` argument from `t_events_term_grade_id` functions. Post-processing by reordering the leaves of the table tree creates a different ordering of rows if required. Creating a helper function will occur at a later time.
* Added `prune_zero_rows` argument to `t_events_per_term_grade_id` and `t_max_grade_per_id` to not show rows of all zeros as they can clutter the visualization in the Shiny app and make it slower.
* Fixed position of (N=xx) in `t_summary_by` output when summarizing numeric columns in parallel with `compare_in_header`.
* Rename `t_coxph` to `t_coxph_pairwise` to reflect the model process, add details in documentation.
* Remove `test.nest` dependency.
* Keep column labels when splitting data into tree.

# tern 0.6.6

* Remove `test.nest` dependency.

# tern 0.6.5

* Change default option for denominator to be `N` in `t_summary`.
* Fix IQR bug: IQR as Q3 minus Q1.
* Add new function `t_logistic` for multi-variable logistic regression table.
* Add new function `df_explicit_na` to replace `NA` by explicit values.
* Added possibility in `t_tte` to specify confidence level independent for `survfit`, `coxph`, and `ztest`, see the manual.
* Fixed bug in `t_rsp` of not showing p-value, odds ratio and CIs when `strata_data` is not `NULL`.
* Added stratified analysis for `t_forest_rsp` and `t_forest_tte`, with footnotes in `g_forest`.
* Added `footnotes`, `footnotes<-` and `add_footnotes<-` functions to deal with footnotes.
* Added argument `conf_int` for confidence interval level to `t_el_forest_rps`, `t_forest_rsp`, `t_el_forest_tte`, `t_forest_tte`.
* Added argument `col_symbol_size` to `g_forest` to control the relative size of symbols used in the plot.
* Added `s_coxph_pairwise` function to perform pairwise testing, used by `t_tte` and `t_coxph`.
* Added methods for `t_count_true` replacing `t_summary_true`.
* Updated `t_count_unique` to create analysis subsets, added `t_el_count_unique` for vectors.
* Fixed bug in `t_events_term_id` so that table sort order is by decreasing frequency instead of alphabetical.
* Added function `color_palette` and a new nest color palette.

# tern 0.6.4

* Refactored after renaming functions in `utils.nest`.
* Added `event_type` argument to `t_events_per_term_grade_id`.
* Added one/two-arm t-test functions.
* Improvements in `t_summary_by`.
* Internal code refactoring.

# tern 0.6.3

* Added `node` S4 class to create trees:
    - For all related tree functions see the reference under trees.

* Removed functions:
    - Moved all the label functions to `rtables`.
    - Deleted `keys` and `keys<-` functions.

* New helper functions:
    - Exported `tabulate_pairwise`.
    - `get_N`, `col_N_add_total`, `check_id`.
    - `na_as_level`.
    - `as_factor_keep_attributes`.
    - `r_by`.

* New TLGs:
    - Disposition elementary table `t_el_disposition`.
    - `t_el_forest_tte`, `t_el_forest_rsp`.

* Changed Arguments:
    - All compound tables:
        - Added `table_tree` argument which returns a `node` object.
    - `t_summary.numeric`:
        - Added `f_numeric` to choose which statistics to calculate.
    - `t_summary.factor`:
        - `denominator` now also allows for `omit` if wanting to omit percentages.
    - `t_summary_by`:
        - Renamed `by` to `row_by`.
    - `t_forest_rsp`, `t_forest_tte`:
        - Changed functionality of `group_data` using `row_by_list`.
        - Removed `na_omit_group`.
    - `t_count_unique`:
        - Removed `indent` argument, use the `indent` function in `rtables`. instead

# tern 0.6.2

* Use cached data from `random.cdisc.data` to speed up testing.
* Added `t_summary.Date` method.
* Added `save_join`.

# tern 0.6.1

* Fixed colors in Kaplan-Meier Plot
* Refactor of all functions to pass `test.nest` tests:
    * Changed `width_row.names` argument of `g_forest` function into `width_row_names`.
    * Changed `censor.show` argument of `g_km` function into `censor_show`.
    * Changed `col.legend.title` argument of `g_waterfall` function into `col_legend_title`.
    * Changed `na.rm` argument of `t_count_unique` function into `na_rm`.
    * Changed `row.name` argument of `t_count_unique` function into `row_name`.
    * Changed `na.omit.group` argument of `t_forest_rsp` function into `na_omit_group`.
    * Changed `na.omit.group` argument of `t_forest_tte` function into `na_omit_group`.
    * Changed `row.name.TRUE` and `row.name.FALSE` arguments of `t_summary.logical` into `row_name_true` and `row_name_false` respectively.
    * Rename `splotTextGrob` into `split_text_grob`.
    * Fix examples.
    * Refactor of internal functions code.

# tern 0.6.0

* Removed functions `addTable`, `t_summarize_by_visit`, `t_summarize_variables`.
* Added `t_summary_by` function.
* Refactor of `g_km` function, renamed `kmGrob` into `kmCurveGrob`.
* Refactor `t_events_*` family of functions.
* Updated examples.

# tern 0.5.0.3

#### New TLGs

* `t_summary` and methods for `data.frame`, `numeric`, `logical`, `character`, `factor`, and `Date` objects.
* `t_events_per_term_id`, `t_events_per_term_grade_id`: Adverse Events & Concomitant Treatment Tables.
* `t_max_grade_per_id`, `t_count_unique`, `t_events_summary` elementary tables used for the Adverse Events & Concomitant Treatment Tables.
* `g_waterfall`: Horizontal Waterfall Plot.

#### New Helper Functions

* `decorate_grob`, `decorate_grob_set`, `decorate_grob_factory`, `splitTextGrob`.
* `stack_grobs`, `arrange_grobs`, `draw_grob`.

#### TLG changes

* `t_tte` now shows two rows with ranges for event and censored times, respectively.
* `g_km` works with one arm `survfit` objects.
* In forest plot functions, added formatting to display extreme values to ">999.9".
* `t_summarise_variables` uses now `n` instead of `N` as a denominator for calculating percentages for factors by default.
* `t_rsp` now works when all response values are `TRUE` or `FALSE`.

#### Deprecated Functions

* Deprecated `t_summarize_variables` as `t_summary` is more powerful.
* Replacing `t_summarize_by_visit` with `t_summary_by` will occur in an upcoming release.

# tern 0.5.0

* First version with harmonized analysis functions names and arguments.
