lingamr 0.1.2
- Wrapped long-running bootstrap examples in
\donttest{}
to avoid CRAN NOTE for elapsed time > 10s
(lingam_parce_bootstrap,
lingam_rcd_bootstrap).
lingamr 0.1.1
- Extended the broom tidiers and
autoplot() to the new
result classes: tidy() methods for LiMResult,
ParceLingamResult and RCDResult (keeping
NA adjacency entries visible as estimate = NA
rows), MultiGroupLingamResult and
MultiGroupBootstrapResult (stacked with a
group column), and ImputationBootstrapResult
(collapsed via as_bootstrap_result());
glance() methods for LiMResult
(n_discrete), ParceLingamResult
(n_na_entries), RCDResult
(n_confounded_pairs), and
MultiGroupLingamResult (n_groups); and
autoplot() methods for LiMResult,
ParceLingamResult, RCDResult (suspected
latent-confounder / unresolved pairs drawn as dashed segments), and
MultiGroupLingamResult (one group at a time via the
group argument).
- Added
lingam_rcd(),
lingam_rcd_bootstrap(), and
generate_rcd_sample(), an R port of RCD (Repetitive Causal
Discovery; Maeda and Shimizu 2020) for causal discovery robust against
latent confounders. Unlike lingam_parce(), RCD does not
recover a causal order; instead it repeatedly extracts each variable’s
ancestor set (ancestors_list), narrows ancestor sets down
to direct parents, and tests remaining parent-free pairs for a shared
latent confounder, marking the corresponding adjacency-matrix entries
NA. estimate_total_effect_rcd() and
get_error_independence_p_values_rcd() are the
RCDResult counterparts of
estimate_total_effect() and
get_error_independence_p_values(). Reuses the HSIC and
F-correlation independence measures added for
lingam_parce(), and adds an optional MLHSICR
regression mode (HSIC-sum minimization via
stats::optim(method = "L-BFGS-B")) as a fallback when OLS
residuals are not independent of the explanatory variables.
- Added
bootstrap_with_imputation(), an R port of the
Python lingam.tools.bootstrap_with_imputation(), for causal
discovery on data containing missing values. Each bootstrap resample
(drawn with replacement, missing values retained) is multiply imputed
into n_repeats complete datasets (by default via
mice::mice(method = "norm"), a new Suggests
dependency), and a common causal structure shared by all imputed
datasets is jointly estimated with lingam_multi_group().
Imputation and causal-discovery estimation can be swapped for custom
implementations via the imputer and cd_fit
arguments; their return values are validated with descriptive errors on
violation. The result is an ImputationBootstrapResult,
whose extra n_repeats dimension can be collapsed into a
regular BootstrapResult with the new
as_bootstrap_result() helper to reuse the existing
bootstrap analysis functions (get_probabilities(),
get_causal_direction_counts(), etc.).
- Added
evaluate_model_fit(), an R port of the Python
lingam.utils.evaluate_model_fit(). Fits the causal graph
implied by an estimated adjacency matrix (or a lingamr result object
such as LingamResult / ParceLingamResult /
LiMResult) as a structural equation model via
lavaan::sem() (a new Suggests dependency) and
returns standard SEM fit measures (CFI, RMSEA, AIC/BIC, etc.).
NA entries marking a latent confounder pair are represented
as a residual covariance in the lavaan model, equivalent to the
latent-variable representation used by the Python
semopy-based original.
- Added
lingam_parce(),
lingam_parce_bootstrap(), and
generate_parce_sample(), an R port of BottomUpParceLiNGAM
(Tashiro et al. 2014) for causal discovery robust against latent
confounders. The algorithm searches for a causal order from the sink
side and stops once an independence test is rejected; variables it could
not order are returned as a single unresolved block, and the
corresponding adjacency-matrix entries are NA.
estimate_total_effect_parce() and
get_error_independence_p_values_parce() are the
ParceLingamResult counterparts of
estimate_total_effect() and
get_error_independence_p_values(). Adds two new
internal-only independence measures reusable by future ports: an HSIC
gamma-approximation test (R/hsic.r) and F-correlation /
kernel canonical correlation (R/f_correlation.r).
- Added
lingam_multi_group(),
lingam_multi_group_bootstrap(),
get_group_result(), and
generate_multi_group_sample(), an R port of
MultiGroupDirectLiNGAM (Shimizu 2012) for jointly estimating a Direct
LiNGAM model across multiple datasets (“groups”) that share a common
causal order but may have different structural coefficients. Per-group
analysis (total causal effects, independence tests, plotting) reuses the
existing single-group functions via get_group_result(),
which extracts a group as a plain LingamResult.
- Added
lingam_high_dim(), an R port of
HighDimDirectLiNGAM (Wang & Drton 2020) for causal discovery on
high-dimensional data (large p, or p > n).
Causal order search uses moment statistics of non-Gaussianity instead of
pairwise independence measures, and is deterministic.
- Added
lingam_lim() and
generate_lim_sample(), an R port of the LiM (LiNGAM for
Mixed data) algorithm (Zeng et al. 2022) for causal discovery on data
containing a mixture of continuous and binary (0/1) discrete
variables.
- Fixed a condition in the kernel-based independence measure
(
measure = "kernel") that made soft prior knowledge
silently ineffective.
- Fixed
reg_method = "ridge" erroring inside
lingam_direct_bootstrap() and
estimate_total_effect() /
estimate_all_total_effects().
- Fixed
lambda = "oracle" not being rejected upfront for
reg_method = "lasso" (only "ridge" was
previously validated), which previously surfaced as an unclear
glmnet error.
- Fixed a data-scale dependence in the default adaptive-LASSO
regularization path (
fit_regression.r): the AIC/BIC lambda
search grid is now scaled to the response’s magnitude instead of using a
fixed absolute grid.
select_var_lag() now guards against selecting an
overfit, near-saturated lag order when the sample size is small relative
to the number of variables and candidate lags.
lingam_direct_bootstrap() no longer aborts entirely
when a single bootstrap iteration fails (e.g. a degenerate resample);
the failing iteration is now skipped with a warning, and results reflect
however many iterations succeeded.
- Added a
compute_total_effects argument to
lingam_direct_bootstrap() to skip the (comparatively
expensive) total-effects estimation step when only edge/order stability
is needed.
get_causal_direction_counts() is now vectorized and
substantially faster for large bootstrap results.
get_error_independence_p_values(method = "kendall") now
warns for large n, where Kendall’s tau is O(n^2) per
variable pair.
- The kernel-based independence measure
(
measure = "kernel") now switches to an incomplete-Cholesky
low-rank approximation for n > 1000, cutting per-pair
cost from O(n^3) to about O(n*d^2) (~200x faster at n = 5000);
n <= 1000 still uses the exact computation.
- Removed unconditional Suggests-package dependencies from examples,
and added
\examples to the remaining exported
print.* methods.
- Expanded test coverage (previously untested
BootstrapResult query functions, numerical validation of
total-effect estimates, and additional input-validation tests).
lingamr 0.1.0
- Initial CRAN submission.
- Direct LiNGAM (
lingam_direct()) with selectable
regression backends for adjacency-matrix estimation via
reg_method: ordinary least squares ("ols"),
LASSO ("lasso"), adaptive LASSO
("adaptive_lasso"), and ridge regression
("ridge").
lingam_direct_bootstrap() provides bootstrap stability
assessment, including causal-order stability, and supports multi-core
execution through the parallel and n_cores
arguments (via parallel::makePSOCKcluster()). Sequential
execution remains the default. Parallel runs use L’Ecuyer parallel RNG
streams, so results are reproducible for a given
seed/n_cores but differ numerically from the
sequential path.
- Model diagnostics: residual independence and normality tests, plus a
one-call
summary_lingam().
- Visualization with DiagrammeR (interactive) and ggplot2
autoplot() (static).
- broom-style tidiers (
tidy() /
glance()).