smartcor 1.2.0

Version 1.2.0 aligns the R and Python packages with the accompanying paper (Harshvardhan and Ranjan, 2026). The changes below apply to both languages unless a section says otherwise.

New selection rules

Method selection now follows Table 3 and Figure 4 of the paper. Every pair starts from the Step 0 diagnostics described below. Default selections change for eight of the ten type pairs:

Binary + categorical and categorical + categorical still use Cramer’s V. Count variables follow the continuous rules everywhere, so count pairs change in the same way as the continuous ones.

assume_latent_normal = TRUE or FALSE now fixes only the latent-normality node; the outlier and Jarque-Bera checks still run. In "auto" mode a failed LR test resolves to “not assumed”.

Diagnostics

Linearity diagnostics and method selection

New estimators

Four estimators bring the total to 18 methods:

Polyserial and biserial now default to polycor::polyserial()’s own two-step estimator, with std.err = TRUE for the interval and p-value. New argument polyserial_ml = FALSE on smart_cor(), smart_cormat(), smart_cor_df(), and compare_methods(); TRUE, which we recommend, fits the full maximum-likelihood estimate with a strict tolerance and a safe-start retry, as earlier versions did.

available_methods() and compare_methods() now list the methods of Table 1 of the paper for each pair. The duplicate Pearson row for continuous-binary pairs is gone. For continuous-categorical pairs, compare_methods() bins the continuous variable only for Cramer’s V.

The two-letter codes used in the method heatmaps are Bs (biserial), E2 (eta-squared), EH (Kruskal-Wallis eta-squared), and Ft (Freeman’s theta). The clash between tetrachoric and Tschuprow’s T is fixed: they are now Tc and Ts.

Results

Optional positive-definite matrix adjustment

Python

Dependencies and validation

smartcor 1.0.1

CRAN resubmission after reviewer feedback. No statistical results change.

smartcor 1.0.0

First public release.