Skip to contents

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()).