Changes in version 1.6 (2026-09-30) CRAN incoming pre-test portability fixes — 2026-09-21 - Replaced the small qregress() example data with the full-rank datasets::mtcars example and se = "iid", preventing non-unique/singular summary.rq() failures on CRAN systems where quantreg is installed. - Replaced the Unicode greater-than-or-equal symbol in tabscore() documentation with the ASCII spelling >=, allowing the PDF reference manual to build with CRAN's LaTeX toolchain. Clean test output hardening — 2026-09-17 - Updated the RA-CUSUM unit test to explicitly expect its intentional same-sample expected-risk warning. The user-facing warning remains unchanged, while devtools::test() no longer reports it as an unexpected warning. - Adjusted the deterministic ITS boundary test series with a small oscillation so it still checks the exact intervention split without creating an incidental essentially-perfect-fit warning. CRAN documentation synchronization — 2026-09-17 - Synchronized the hand-written poisson() @usage block with the function signature by adding diagnosis = FALSE. This removes both the code/documentation mismatch warning and the Rd usage warning reported by R CMD check --as-cran. Documentation repair — 2026-09-17 - Repaired the generated Rd \name{} directives for gsurv(), surv_tables(), and survexport() so devtools::document() and Rd parsing no longer emit unexpected '{' warnings. Model-diagnosis hardening (2026-09-17) - vars(i.x) now explicitly declares a categorical variable with the first observed level as reference, making direct cox() syntax consistent with regress(), logistic(), and poisson(). - predict() now reconstructs categorical new-data columns from the fitted model's xlevels, so a source 0/1 numeric variable fitted via i.x can be predicted safely without manually converting new data to factor. Unknown levels remain explicit errors. - Repaired malformed survival help example blocks for gsurv(), surv_tables(), and survexport(). - Strengthened model-diagnosis tests to cover categorical Cox syntax and prediction from numeric source data after categorical fitting. Regression diagnosis, postestimation, and help expansion — 2026-09-17 - Added diagnosis = FALSE to the main regression commands regress(), logistic(), poisson(), qregress(), nlregress(), and cox(). When enabled, each command reports diagnostics appropriate to its model family rather than applying a single generic checklist. - Linear regression diagnosis now includes residual summaries, Shapiro-Wilk normality, a dependency-free Breusch-Pagan heteroscedasticity test, standardized/studentized residuals, leverage, Cook's distance, DFFITS, COVRATIO, influential observations, and collinearity diagnostics. - Logistic diagnosis adds calibration/goodness-of-fit, AUC discrimination, residual/influence measures, influential observations, and collinearity diagnostics. Poisson diagnosis adds Pearson/deviance dispersion and goodness-of-fit plus influence and collinearity diagnostics. Quantile regression reports residual balance and quantile check loss. Cox diagnosis adds concordance, proportional-hazards testing, and survival residual summaries. - Expanded predict() into a unified R4VN postestimation command. It now supports fitted values/probabilities, link predictions, raw/Pearson/deviance/working residuals, standardized and studentized residuals, leverage, Cook's distance, DFFITS, COVRATIO, DFBETA/DFBETAS, prediction standard errors, linear-model confidence limits, and Cox-specific prediction/residual types. term= selects a column from multi-column diagnostics. - Expanded help examples for regression diagnosis and postestimation. A package-wide help audit found every exported public function mapped to a help topic with examples and every argument appearing in an Rd usage section represented in the corresponding argument documentation. CRAN resubmission fixes — 2026-09-17 - Follow-up CRAN hardening after a local R CMD check --as-cran: distribution probability results now retain full machine precision internally while formatting only the displayed copy; hand-maintained postestimation examples are self-contained; tabscale() documentation now reports seed = NULL; and executable R code in distlearn.R is ASCII-only. - Removed the package-wide use of installed.packages() for availability checks; R4VN now uses find.package() and requireNamespace() as appropriate. - Removed fixed random seeds from user-facing analysis functions. Functions that expose reproducible random procedures now use seed = NULL by default and set a seed only when the user explicitly supplies one. - Removed the non-executable tabsurv() risk-table example from ?tabsurv; graph and risk-table examples remain documented in ?gsurv. - Reworked examples so ordinary short examples are executable, longer examples use \\donttest{}, and \\dontrun{} is retained only where external credentials, API keys, or services are genuinely required. - Updated generated help and usage entries to agree with the revised public function interfaces. Extended variable generation - Added egenvar(), a companion to genvar() for row-wise and group-wise generated variables. - Row functions include rowmin(), rowmax(), rowmean(), rowsum(), rowmedian(), rowsd(), rowmiss(), rownonmiss(), rowfirst(), and rowlast(), including compact selectors such as rowmean(q1:q5). - Group-aware functions include mean, standard deviation, minimum, maximum, median, total, count, sequence, z score, percentile/quantile, rank, group identifiers, and first-observation tags. Distribution teaching and probability tools - Added distdata() for publication-ready exploration and probability calculations for common continuous and discrete probability distributions. - Point queries automatically report the quantities most commonly needed in teaching and analysis. For a discrete distribution these include P(X = x), P(X < x), P(X <= x), P(X > x), and P(X >= x); interval probabilities and quantiles are also supported. - Added distlearn(), an interactive Shiny distribution explorer designed for teaching. Users can select a distribution, change parameters with sliders or numeric inputs, inspect density/mass and CDF plots, calculate probabilities and quantiles, simulate data, and read the history, parameter meanings, common applications, and modelling notes for each distribution. - The initial catalogue covers more than 30 continuous and discrete distributions, using base R whenever possible and internal formulas for additional teaching distributions to avoid unnecessary dependencies. Changes in version 1.5 Graph styling controls for R4VN Studio — 2026-09-04 - Added explicit border styling to gbar(), histogram border and normal-curve styling to ghist(), raw-point/border styling to gbox(), and fitted-line colour/type/width controls to gscatter(). - Added line-type support to gline() (now applied to the plotted lines as well as the legend), line width/type to gdensity(), slice borders to gpie(), and ROC/diagonal line styling to groc(). ROC axes retain exact 0–1 probability limits. - Expanded gsurv() with confidence-limit, censor-mark, median-line, and reference-line styling. - Expanded marginsplot() with line width/type, point size/symbol, and confidence-interval styling. - Updated graph Rd usage/argument documentation so Studio Help and option hints match the public graph API. - Added graph-style regression tests. Automatic typing for unprefixed vars() — 2026-09-04 - Unprefixed exact variables now use the same automatic type rule as vars(.) and wildcard selectors: numeric/integer variables are continuous and use mean (SD), while factor/character/logical variables are categorical. - Numeric-coded categorical variables can be forced to categorical explicitly with b1., b2., b3., etc.; the explicit b1. declaration is preserved after variable resolution. - c., q., and f. remain explicit continuous-summary overrides for mean (SD), median (IQR), and full continuous summary. Complete tabmeta() reporting upgrade - Subgroup publication tables are now transposed by default: statistics are rows and subgroup labels are columns. Multiple subgroup variables create one separate table per variable. Tidy long results remain available in $subgroup_long. - Every subgroup row now reports its pooled estimate and confidence interval, effect test statistic/df/p-value, numerical prediction interval, Cochran's Q/df/p-value, and I-squared/tau-squared confidence intervals when estimable. Interpretive significance/conclusion columns remain opt-in through interpretation=TRUE. - digit=2 now consistently controls subgroup and meta-regression estimates; very large or very small meta-regression limits use compact scientific notation instead of unwieldy fixed-decimal strings. - With subgroup analysis, plot=TRUE now places the overall forest plot and every subgroup forest plot in interactive Plot history as well as the HTML Viewer. Each subgroup plot retains an explicit variable/value-label title. - Meta-regression tables now print Intercept instead of metafor's abbreviated intrcpt, and variable labels are used for moderator and cumulative output whenever available. - The default statistical-test table now contains only the formal test results. Statistically significant and Conclusion are added only when interpretation = TRUE. - Forest plots place Weight to the right of Estimate (95% CI). With direct a,b,c,d input, show_abcd = TRUE displays all four cells and abcd_titles customizes their headings. - Subgroup output uses factor/value labels instead of numeric codes whenever labels are available. The HTML Viewer now includes a clearly titled forest plot for every subgroup level when subgroup analysis and plotting are used. - Fixed loss of custom label, labels, and value.labels attributes after excluding studies with non-finite effect estimates or variances. - tabmeta() now includes a dedicated statistical-significance table for the pooled estimate and Cochran's Q heterogeneity test, with the test statistic, degrees of freedom, and p-value; interpretive columns are opt-in. - Meta-analysis forest plots now show separate headed Weight and Estimate (95% CI) columns, use round parentheses for confidence intervals, and retain exact annotations when the effect axis is clipped. Estimates or intervals beyond xlim are indicated graphically with arrows. - Prediction intervals remain in the numerical results but are no longer drawn in forest plots by default (show_prediction = FALSE). - tabmeta() now accepts the four binary 2-by-2 cells directly through a, b, c, and d, while preserving the existing event/total and generic-effect syntax. - The c cell is now captured safely before restoring base::c() inside the function, so calls such as c = event_control no longer force an unresolved promise while R4VN constructs ordinary vectors. - The default profile = "auto" creates the appropriate pooled analysis, prediction interval, few-study inference comparison, small-study-effect diagnostics, leave-one-out/influence analyses, and publication figures. - Subgroup analysis accepts one or several variables and reports both pooled subgroup estimates and tests for subgroup differences. - Meta-regression accepts numeric and categorical moderators, with a multivariable model, univariable moderator screening, residual heterogeneity, and bubble plots for single numeric moderators. - Publication-bias sensitivity options now include Egger and Begg tests, contour-enhanced funnel plots, trim-and-fill, Rosenberg fail-safe N, and an optional step-function selection model. - small = "auto" uses modified Hartung-Knapp inference when at most 10 studies are available and includes a comparison of normal, Hartung-Knapp, and modified Hartung-Knapp confidence intervals. - Results expose a stable publication contract through $estimates, $tests, $diagnostics, $models, $tables, and $metadata; direct HTML, Word, Excel, PDF, and PNG export remains available from the same command. - interpretation remains opt-in and defaults to FALSE. The complete set of runnable patterns is included in ?tabmeta and examples/tabmeta_examples.R. - With plot=TRUE, the complete figure set remains embedded in the HTML Viewer while plot_display also draws selected figures in the interactive R/RStudio Plot pane and Plot history. - Meta-analysis plots now expose publication controls for fonts, title and axis sizing, study/CI/summary colors, symbols and sizes, row shading, reference lines, prediction-interval style, funnel contours and labels, bubble-plot bands, raster resolution, and advanced metafor engine arguments. - Requested interpretation is now sectioned and evidence-aware, covering the overall effect, heterogeneity, prediction interval, subgroup and moderator tests, small-study effects, few-study inference, influence, leave-one-out, and cumulative results when available. - Forest plotting is compatible with metafor releases both before and after the colci option, and supplies a complete line-type vector for prediction polygons. Fail-safe N now uses the documented x argument; numerical warnings from optional selection models are retained as diagnostic notes instead of flooding routine output and package tests. Complete tabsurv() reporting upgrade - tabsurv() now defaults to report = "auto", which selects valid descriptive, estimation, comparison, modeling, diagnostic, and graph modules from the supplied analysis structure. - Deterministic narrative interpretation is now opt-in with interpretation = TRUE; its default is FALSE. - A new opt-in lifetable = TRUE module reports the detailed Kaplan-Meier life table at every observed time (or the corresponding Aalen-Johansen event history for competing risks). The default is FALSE. - New shorthand cuminc = c(...) reports cumulative incidence at exactly the requested follow-up times: 1-KM for ordinary survival and Aalen-Johansen CIF for competing risks. The table is available through both $cuminc and the backward-compatible $risk component. - A simple grouped call now reports group-specific outcomes, automatically selected time-point risks, overall incidence rates, log-rank inference, two-group RR/RD/IRR comparisons, RMST, and a graph with confidence limits and a number-at-risk table. - Supplying vars automatically adds crude Cox estimates, a multivariable model when appropriate, model diagnostics, and proportional-hazards checks. Competing-risk analyses can automatically add Fine-Gray estimates. - New profiles are "brief", "auto", "full", and "custom"; the "custom" profile preserves the concise R4VN 1.5 defaults. - Results now expose a consistent report contract through $descriptive, $estimates, $tests, $diagnostics, $interpretation, $tables, $plots, $models, $metadata, and $call, while retaining the existing components used by older code. - tabsurv() can export all non-empty tables directly with export, file, and open, and accepts detailed graph controls through plot_args. - The late duplicate tabsurv() wrapper was removed. Hierarchical by = vars(...) behavior now lives in the single exported implementation. - anova() and anovai() now provide an explicit Bonferroni-adjusted pairwise post-hoc method, and all post-hoc result headings use full, publication-ready method names. - Graph commands that can produce multiple results now support combine = TRUE and ncol to arrange clearly labelled panels in one figure. - Graph results no longer print collection names or row-count status messages to the Console; use plot() whenever a returned graph should be redrawn. - Reference-line arguments are now consistently named xline and yline. The former vline and hline names remain deprecated compatibility aliases. - Hierarchical grouping labels now consistently use variable labels when available and display each level as Variable label (Value). Changes in version 1.4.1 1.4.1 maintenance fixes - tab() now bounds Fisher computation: 2 x 2 tables retain exact Fisher, while larger sparse R x C tables use a reproducible Fisher-Freeman-Halton Monte Carlo test (B = 5000), preventing accidental hangs when a high-cardinality variable is treated as categorical. - Hierarchical result binding now strips scalar names before recycling context labels, eliminating base-R row-name warnings from epi(..., by = vars(...)) and related collections. - Regression tests now declare continuous variables explicitly with c. in tab() examples. - Active-model predict() now reconstructs factor predictor types used by compact model syntax (for example i.htn) before prediction, while still accepting the user's original numeric 0/1 data column. - tabsurv(..., by = vars(stratum1, ..., group)) now performs true outer-stratum survival analyses with the final variable as the within-stratum survival group; descriptive KM/log-rank workflows no longer route through the legacy Cox-only superby mechanism. - cox() resolves ties before passing through the hierarchical wrapper, preventing the default choice vector from reaching match.arg(). - Cox fits now retain user-facing predictor mappings so margins(at = at(age = ...)) and active-model predict() can use original predictor names even though the survival engine fits collision-safe internal columns. - lincom() now accepts character expressions produced dynamically (for example with paste0()), in addition to direct character strings and unquoted coefficient expressions. - cox() now forwards optional NSE variable arguments (id, start, strata, cluster, and frailty) as evaluated values, so omitted arguments remain true NULL values instead of being mistaken for columns such as idn. Data entry and active data - genvar() can now create an active temporary data frame when no data are open, accept direct vectors, grow the active data when a later variable is longer, pad shorter variables, and create repeated patterns with times= or each=. Distribution tests and transformations - New normtest() runs Shapiro-Wilk, fitted-normal Kolmogorov-Smirnov, Jarque-Bera, and optional nortest procedures. Both normtest() and swilk() accept multiple variables through vars() and hierarchical by=vars(...). - New varform() provides a nine-panel Tukey transformation ladder with normal curves and descriptive distribution diagnostics. Inference - ttest() can report standardized effect sizes. - anova() and anovai() add Tukey, Games-Howell, Scheffe, and multiplicity-adjusted pairwise post-hoc comparisons. - kwallis() adds Dunn or pairwise Wilcoxon post-hoc comparisons and effect sizes. - Existing prtest()/prtesti() documentation and grouped workflows are expanded. - Hierarchical by=vars(...) is shared by core grouped tests and graphs: the final variable is the innermost analysis/grouping variable and preceding variables are ordered strata. Graphics - gbar(), ghist(), gbox(), gscatter(), gline(), gdensity(), gpie(), and groc() can create graph collections from multiple variables and/or hierarchical grouping. - Applicable graphs support configurable reference lines through xline, yline, ref_color, ref_lty, and ref_lwd. Models and postestimation - poisson() supports explicit binary outcomes with event= and risk-ratio display through rr=. - R4VN now remembers the most recently fitted model for postestimation. - New at(), margins(), marginsplot(), active-model predict() generation, and lincom() provide a Stata-like postestimation workflow while preserving ordinary R predict() dispatch. - New nptrend() provides ordered-group trend tests. - New qregress() provides quantile regression through the optional quantreg package. - New nlregress() provides natural splines, B-splines, polynomials, and linear functional forms for Gaussian, binomial, or Poisson models. Epidemiology and import - Stratified epi() output includes both percent-change definitions comparing crude and Mantel-Haenszel odds ratios. - Stata import now attempts haven, then optional readstata13, then foreign for compatible older files, and reports Windows Application Control DLL blocking more clearly. Documentation - Function usage is presented compactly and the help pages for the enhanced commands include expanded option descriptions and practical examples.