Nestimate 0.8.4
Mixed Markov clustering contract
-
cluster_mmm()now returns the fittednet_mmmclustering object, retaining assignments, posterior probabilities, mixing proportions, fit criteria, and fitted component models. Network materialization remains the responsibility ofbuild_network(fit)or the one-stepcluster_network(..., cluster_by = "mmm")workflow. -
as_htna()gains anet_mmmmethod. An MMM fit created from an HTNA model is materialized into anhtna_groupwithout rerunning the MMM fit, while the original actor partition and clustering diagnostics are preserved.
Nestimate 0.8.3
HTNA expansion
-
as_htna()still rebuilds one full node-level network from the original source, preserving every between-cluster transition, and now completes the canonical HTNA contract. Its result inherits fromhtna,netobject, andcograph_network; stores character actor labels in$node_groups$group, a factor in$nodes$groups, and actor order in$actor_levels; and retains actor-order metadata on$node_groupsfor lossless partition round trips, plus the legacy$nodes$clusterand"cluster_members"metadata.
Nestimate 0.8.2
Session grouping
-
prepare()now identifies sessions from the observed combinations of theactorandsessioncolumns instead ofbase::interaction(). Three defects are fixed:-
Integer overflow.
interaction()codes a combination over the marginal level space, which exceeds.Machine$integer.maxonce both columns pass 46,341 distinct values. The resultingNAs were pasted into the literal string"NA", merging unrelated events into one pseudo-session. On 50,000 actor-session pairs this silently discarded 14% of sessions and manufactured transitions that no input sequence contained, including self-loops on terminal states. -
Separator collisions. Identifiers were pasted with
" | "before being used as a grouping and metadata merge key, so("a | b", "c")and("a", "b | c")collapsed into a single session. Grouping now keys on the original columns; the readable label is display-only and is exposed as.session_labelinmeta_data. - Missing identifiers. Missing values in a grouping column silently changed the session count. They now raise an error naming the columns.
Group numbering reproduces
interaction()’s ordering, so prepared row order and finite same-seed bootstrap results are unchanged. -
Integer overflow.
time_threshold = FALSEswitches session-interval splitting off, so each actor (or actor-session) forms a single sequence regardless of gap length. Accepted byprepare(),build_network()andbuild_mcml().
Testing
- Added a randomized grouping sweep over 1,000 seeded datasets covering actor/session column counts, identifier vocabularies including separator and UTF-8 cases, time on and off, tied timestamps, explicit order columns, shuffled input, and time-gap structures that split, do not split, or sit exactly on the threshold. Verified against ground truth and against
interaction()for row-order compatibility.
Nestimate 0.8.1
HTNA interoperability
Distance clustering and mixed-Markov clustering now preserve HTNA inputs.
build_clusters()andcluster_mmm()carry the node-to-actor partition into network materialization, whilecluster_network()returns anhtna_groupdirectly. Every child remains anhtnaobject with$node_groups,$nodes$groups, and$actor_levels; clustering assignments, posterior probabilities, fit diagnostics, and other outer attributes remain attached.Added extensive randomized equivalence coverage across distance clustering, mixed-Markov clustering, all transition-network estimators, actor-absent clusters, and HTNA-versus-plain input paths.
Nestimate 0.8.0
CRAN release: 2026-07-10
Documentation
The Bayesian verbs get their own reference section, placed directly after Network Estimation:
certainty(),bayes_compare(),subtract_networks()andas_netdifference(). They were previously buried in a fourteen-entry “Bootstrap & Inference” list.bootstrap_network()now points atcertainty()as its closed-form counterpart, andpermutation()points atbayes_compare()as its Bayesian complement, so each pair is reachable from either side.frequencies()is no longer marked\keyword{internal}. The topic page and the exported function share a roxygen topic name, so the keyword from the topic block leaked onto the function’s own help page even though the function is exported (and called by the package).cluster_data()keeps its internal keyword: it is a deprecated alias forbuild_clusters()and is meant to stay out of the index.Dropped the
utilshelp page, which documented no exported object. The@importFromdirectives it carried are retained.audit_codex/is no longer tracked; it holds generated audit artifacts.
Dependencies
-
Suggests: cograph (>= 2.4.4). The netdifference verbs added in 0.7.8 need cograph 2.4.x: CRAN’s cograph 2.3.6 contains nonetdifferencesupport, socograph::plot_difference()does not exist there andcograph::splot()on anetdifferencefalls through to the plainnetobjectrenderer and silently draws an unsigned network. Nestimate must not be submitted to CRAN before cograph 2.4.4 is available there.
Nestimate 0.7.8
New features
subtract_networks()/as_netdifference()— verbs for the difference between two networks.subtract_networks(x, y)returns the edge-wise difference as anetdifferenceobject;as_netdifference()promotes an existing comparison result to the same class — abayes_compare()result, or anetdifference, which passes through; anything else errors — so a difference computed by any route prints the same way. Addsprint.netdifference.bayes_compare()accepts twonet_edge_betweenness()objects (source method"relative"only). Edge betweenness is recomputed on every posterior draw, giving the Bayesian analogue ofpermutation()’s edge-betweenness dispatch, with posterior mean betweenness matrices and the plug-inobserved_diff.permutation()gains ameasuresargument for centrality permutation tests, matching thetnapackage’s dispatch.
Enhancements
bayes_compare()’s probability-of-direction column is renamedpd->p_differencein thesummary()frame, and the result now carries classc("net_bayes", "netdifference", "net_permutation")so it dispatches to the difference verbs as well as the permutation ones.Non-ASCII characters normalized across R sources and man pages.
Bug fixes
centrality_stability()no longer errors with “missing value where TRUE/FALSE needed” when a requested measure is undefined on the network (e.g.DiffusionisNaNon a small cyclic net):sd()returnedNA, which poisonedif (!any(keep)). Such measures now drop like zero-variance ones.centrality_stability()’s defaultmeasuresis restored toc("InStrength", "OutStrength", "Betweenness"). 0.7.7 had swappedOutStrengthforDiffusion, which broke the package: it callscentrality_stability()with nomeasuresand compares the result against its own explicit trio.centrality()/net_centrality()keep theDiffusiondefault; onlycentrality_stability()reverts.Suggests: cographrelaxed from(>= 2.4.4)to(>= 2.3.6), the version available on CRAN.Additional_repositoriesremoved — every declared dependency now resolves from CRAN.
Nestimate 0.7.7
Enhancements
-
plot()on anet_centrality_groupgainstype = "delta", showing the between-group difference per measure, and now supports three or more groups. Zero-valued edges can be blanked withdrop_zero = TRUE.
Nestimate 0.7.6
New features
-
plot()on anet_edge_betweenness()result (plot.net_edge_betweenness).
Enhancements
-
plot()on centrality results gains alternative views:type = c("bar", "line", "heatmap")for a singlenet_centrality, andtype = c("bar", "line", "delta")for anet_centrality_group. Count-like measures get integer axis labels.
Nestimate 0.7.4
New features
-
as_htna()— builds a grouped node-level network from data and a clustering, keeping every node (unlikecluster_summary(), which collapses to a cluster-level macro summary). Intended forcograph::plot_htna().
Enhancements
Centrality gains the
tna-parity measures.net_centrality(x, measures = "all")now returnsOutStrength,InStrength,ClosenessIn,ClosenessOut,Closeness,Betweenness,BetweennessRSP,DiffusionandClustering— previously only the strengths,ClosenessandBetweenness. Addsplot.net_centralityandplot.net_centrality_group.sequence_plot()and the MCML plots gain layout refinements.
Nestimate 0.7.3
New features
as_netobject()/validate_netobject()— the boundary layer between (which owns the psychometric-network math and emits a leancograph_network) and Nestimate (which owns the canonicalnetobjectschema).as_netobject()promotes apsychnetresult or a barecograph_networkto the dual-classc("netobject", "cograph_network")so it dispatches to every Nestimate verb, parking psychnet-specific fields (including the GLASSO KKT certificate) under$meta$psychnet;netobjects pass through unchanged.validate_netobject()enforces the shared structural contract so schema drift on either side fails loudly.psychnetis not a declared dependency — Nestimate never calls it; the converter works by S3 dispatch on whateverpsychnetobject the caller supplies.certainty()— analytic Bayesian counterpart ofbootstrap_network()for transition networks. Models each state’s outgoing transitions as a Dirichlet-Multinomial process (Jeffreys prior) and returns posterior mean, sd, credible interval and a stability decision per edge in closed form (no resampling). Returns the exactnet_bootstrapobject layout and carries classc("net_certainty", "net_bootstrap"), so it is a drop-in: everynet_bootstrapmethod works on it. Completes the assessment trio certainty / stability (bootstrap_network) / reliability (reliability).
Enhancements
sequence_plot()gains a multichannel view formcmlobjects built from sequences.sequence_plot(fit)draws one carpet panel per cluster channel plus a macroSummarypanel — each channel’s own states solid, the other clusters a faded wash, finished cells white, rows aligned by the macro sequence.sequence_plot(fit, type = "distribution")stacks the prevalence (own states + faded other clusters + an explicitNAband, to 100%), andnormalize = TRUEgives a TraMineR-styleseqdplotwhere each time point sums to 1. ggplot-based and dependency-free; returns aggplotobject.bayes_compare()results are now 100% compatible with thepermutation()format: the object carries classc("net_bayes", "net_permutation")with allnet_permutationslots (diff_sig,p_values,effect_size,iter,alpha,paired,adjust), and itssummaryis a superset ofsummary.net_permutation(from, to, weight_x, weight_y, diff, effect_size, p_value, sigplus the Bayesian extrascount_x, count_y, ci_lower, ci_upper, ci_width, pd). Abayes_compare()result is now a drop-in wherever anet_permutationis consumed.
Nestimate 0.7.2
New features
-
bayes_compare()— Bayesian Dirichlet-Multinomial comparison of two transition networks, a complement topermutation(). Models each source state’s outgoing transitions as a Dirichlet-Multinomial process (Jeffreys prior) and returns, per edge, a posterior mean difference, a credible interval, the probability of direction (pd) and its two-sided p-equivalent. Addsprint/summary/plotmethods andnetobject_groupdispatch (all-pairwise or matched). Method source: Johnston & Jendoubi (2026), How Delivery Mode Reshapes Resource Engagement: A Bayesian Differential Network Analysis, TNA Workshop 2026.
Nestimate 0.7.1
New features
-
as_networks()— promote abuild_mcml_pc()result into anetobject_group(the psychometric-network counterpart ofas_tna()). Singleton clusters with no within-network are dropped with a warning; an existingnetobject_grouppasses through unchanged.
Documentation
- Vignettes and articles now call package verbs directly instead of hand-assembled base-R subsetting rituals:
markov_order_test()reads sequences straight from a fitted network (markov_order_test(net)); HYPA anomaly tables usesummary(hypa, order_by = "ratio"); higher-order pathways usepathways(hon, top = ); grouped-clustering inspection usescluster_diagnostics().
Nestimate 0.7.0
New features (experimental)
-
build_mcml_pc()— MCML aggregation for psychometric networks (cor / pcor / EBICglasso). Five aggregation methods with explicitly different statuses:"average"(descriptive block-mean; works without raw data),"composite"(cluster scores re-estimated with the chosen estimator — a genuine cluster-level network),"loadings"(composites weighted by mean within-cluster connection strength — Nestimate’s own weighting, not an EGA reimplementation),"rv"(Escoufier’s RV matrix correlation between blocks), and"canonical"(first canonical correlation — the upper bound for composite methods). Within-cluster networks re-estimated by default (within = "reestimate") since a pcor submatrix is not the subsystem’s pcor network. Item diagnostics in$loadings: signed loadings (reverse-keyed items detected via the leading eigenvector of the within-block matrix and flipped in composites), cross-cluster strengths, and amisfitflag when an item is more connected to another cluster than its own (warned). Composites tolerate missing data (row-wise renormalized weighted means); Composite item weights are selectable viaweighting— ten built-in schemes spanning three views of the cluster: the scale as scored ("equal","item_total"), the network’s view ("strength","eigen","closeness","betweenness","expected_influence","specificity"— the misfit margin as a weighting, zeroing items that belong as much to another cluster), and the latent-variable view ("pca","factor"); plus fully custom weighting via a named numeric vector or afunction(W_block, data_block, nodes).aggregation = "loadings"is the alias for composite + strength. The"factor"weighting exposes its extraction method viafa_method:"ml"(factanal),"paf"(iterated principal axis),"minres"(ULS), or"cfa"(one-factor lavaan model; withcor_method = "polychoric"the categorical DWLS factor model) — all operating on thecor_method-consistent correlation structure. Reverse-keyed handling works under every sign-carrying scheme (item-total correlations are computed on eigen-sign-pre-oriented columns so a reversed member cannot contaminate small clusters).cor_method = "polychoric"(via lavaan) supports ordinal items;id_coldrops identifier columns soconvert_sequence_format(format = "frequency")actor-profiles feed the function directly (the within-person co-occurrence view of event data). Returns classmcml_pc(macro + within netobjects, all undirected) with print/summary/plot; the composite/loadings macro is a full netobject, sobootstrap_network(),vertex_bootstrap(), andvertex_compare()apply to it directly.cograph::plot_mcml()(>= 2.3.8) renders the two-layer undirected MCML view. Experimental: API and formulas may change. -
loading_stability()— case-bootstrap stability of thebuild_mcml_pc()composite weights (percentile CIs, sign-flip rates), with print and forest-style plot.
Nestimate 0.6.5
New features
-
vertex_bootstrap()— Snijders & Borgatti (1999) vertex bootstrap for network-level statistics (density, mean weight, strength centralization, weighted reciprocity, plus customstatistic_fn). Needs only the weight matrix, so it works on data-less netobjects (build_mlvar()constituents,as_tna(mcml)elements, plain matrices) wherebootstrap_network()cannot run. Returns a tidy one-row-per-statisticnet_vertex_bootstrapwith print/summary/plot. Self-loops are preserved (diagonal carries the resampled vertex’s own self-weight); undirected replicates stay symmetric. -
vertex_compare()— the Snijders & Borgatti two-network test the vertex bootstrap was originally proposed for: z-tests and normal-approximation CIs for differences in network-level statistics between two networks (netobjects, matrices, or precomputednet_vertex_bootstrapobjects). Tidynet_vertex_comparisonresult with print/summary/plot (forest plot of differences). -
bootstrap_network()andvertex_bootstrap()gainci_method = c("percentile", "basic"): basic intervals (Davison & Hinkley 1997, eq. 5.6) reflect the percentile bounds around the observed estimate, correcting first-order bootstrap bias. Default remains"percentile".
Nestimate 0.6.4
Bug fixes
-
build_mcml()(sequence and edge-list paths) now records the effective directedness in$meta$directed:FALSEwhentype = "cooccurrence", whose weights are symmetrized, instead of echoing thedirectedargument unchanged. Renderers that auto-detect directedness (e.g.,cograph::plot_mcml()withdirected = NULL) now draw co-occurrence MCML objects as undirected networks automatically.
Nestimate 0.6.3
New features
-
mosaic_analysis(data, var1, var2)— two-variable mosaic analysis on adata.frame: chi-square or Fisher test, Cramer’s V (df-adjusted effect size) and a flat mosaic plot. Returns classmosaic_analysiswith a tidy one-row-per-cell$counts, a one-row$stats, and print/summary/plot. Distinct frommosaic_plot(), which draws from a fitted network object.
Enhancements
-
mosaic_plot()gainsstyle = c("classic", "flat"). The flat style uses variable-width columns, white gutters and in-tile or side labels, sharing the classic style’s geometry and diverging palette;values = TRUEprints residuals inside the tiles.
Nestimate 0.6.1
New features
build_network()and the transition wrappers (build_tna(),build_ftna(),build_atna(),build_cna()) gainstartandendboundary markers:FALSE(default),TRUE(labels"Start"/"End") or a custom string.startprepends a source state to every sequence;endplaces a sink in the single cell after each sequence’s last non-NAstate (not absorbing — seemark_terminal_state()for that). Honoured by therelative,frequency,co_occurrenceandattentionestimators; other methods error.build_mmm()gainscovariate_effect."em"(default) folds covariates into the EM as covariate-dependent mixing, changing the fit;"posthoc"fits a plain mixture and uses covariates only for the after-fit multinomial logit, leaving the clustering bit-identical to a no-covariate fit.
Nestimate 0.6.0
CRAN release: 2026-05-31
New features
-
magnitude_difference()compares the frequency (FTNA) and probability (TNA) views of a transition network and quantifies the per-edge discrepancy on a common scale, with five metrics, four scalings, and two polarplot()portraits (stacked and circular). - Full persistent homology with a Vietoris-Rips filtration (
persistent_homology(),build_simplicial(type = "vr")) plus diagram toolsbottleneck_distance()andpersistence_landscape(). - Network comparison:
compare_model()(withnetobject_groupdispatch),summary.netobject(),plot.net_comparison(), andrename_models()for relabelling grouped network objects.
Documentation
- The pkgdown reference index now lists every exported function;
magnitude_difference(),casedrop_reliability(),build_hypergraph(),hypergraph_measures(), andcluster_data()were previously absent.
Nestimate 0.5.1
Audit follow-up (clustering + MCML)
Followed codex_docs/audit_clustering and codex_docs/audit_mcml recommendations across two modules. Eleven of thirteen findings addressed; two deferred pending design decisions on numeric semantics (directed = FALSE raw-data MCML, MMM first-non-NA initial state).
Bug fixes
-
cluster_network()now forwards distance-clustering arguments (na_syms,weighted,lambda,seed,q,p,covariates) tobuild_clusters()instead of silently passing them tobuild_network(). The split runs on caller...only — netobjectbuild_argscontinue to flow only to thebuild_network()step, protecting attention-method (atna) network history from being re-routed to weighted Hamming. (audit_clustering #1) -
.auto_detect_clusters()(used bybuild_mcml()andcluster_summary()) now requiresnode_groupsto carry a node identifier column when shaped as a data.frame, or be a named atomic vector keyed by node label. Previously, a barecluster-only data.frame was read positionally — silently mis-assigning nodes whenevernode_groupsrows were in a different order thanx$nodes. (audit_mcml #1) -
build_clusters()now rejects all-missing input early with a clear message instead of failing indirectly downstream in pam/hclust. (audit_clustering #4)
New parameters
-
compare_mmm(return_fits = FALSE)— whenTRUE, the fittednet_mmmmodels are attached asattr(result, "fits")keyed byk, so users can pick the chosen model without re-running EM. Default behaviour unchanged. (audit_clustering #6)
Improvements
-
build_clusters()validation messages now name the offending argument ("'k' must be at least 2 (got k = 1)") rather than dumping the failing predicate. Top-level type checks switched to named-conditionstopifnot()for the same reason. (audit_clustering #2)
Documentation
-
summary.mcml()roxygen corrected — was claiming a printing side effect that doesn’t exist. (audit_mcml #5) -
build_mcml()clusters = "<col>"mode now documents its narrow contract: assigns each row’s group label to both endpoints, so it only makes sense for within-group edge lists. (audit_mcml #2) -
build_mcml()methodparameter doc now steers raw sequence / event-log inputs to"sum", since the function counts observed transitions. Other methods are for weighted edge lists or pre-existing matrices. (audit_mcml #4) -
as_tna.mcml()“Excluded Clusters” section corrected — drop emits awarning()(was claimed silent) and only fires forrelativemethod (was claimed unconditional). (audit_mcml #6) -
build_clusters()na_symsdoc adds an explicit “Missing-value distance rule” subsection: NA becomes a comparable sentinel state, not pairwise deletion. (audit_clustering #3) -
build_mmm()adds an “Initial states” section explaining first-column-verbatim init and that build_mmm does NOT honor build_clusters-stylena_syms— only actualNAcells become NA inits. (audit_clustering #5, doc-only path)
Tests
- +12 new tests pinning the corrected contracts and the documented edge cases (misordered
node_groupsalignment, label propagation throughstate_distribution(),as_tna.mcml()drop-warning fixture, MMM first-column NA behaviour, and the four-waycluster_network()arg-routing contract). Full sweep: 1628 / 1628 pass, 0 fail.
Nestimate 0.5.0
Bug fixes
-
.extract_edges_from_matrix()no longer drops the diagonal. Netobjects built via.wrap_netobject()(and therefore everything frombuild_network(),build_mcml(),bootstrap_network(),build_mmm(),wtna(),as_tna()) now have$edgescontaining every non-zero matrix entry, including self-loops. Previously$weightsand$edgeswere silently inconsistent on any matrix with a non-zero diagonal, causing downstream consumers (e.g.cograph::centrality()on an MCML macro) to under-count node degree by 2.
New features
-
plot_state_frequencies()— native S3 generic for state-frequency plots acrossnetobject,netobject_group,mcml, andhtna. Defaults to a marimekko (mosaic) layout where column widths reflect per-group totals and segment heights reflect within-group state proportions; also supports a colored-bars style and a per-group faceted marimekko. Uses the package Okabe-Ito palette throughout. -
plot_mosaic()— exported low-level marimekko primitive built ongeom_rect()with cumulative-width / cumulative-height geometry. Reusable for any tidydata.frame(group, state, weight)input.
Nestimate 0.4.4
Bug fixes
-
passage_time()andmarkov_stability()now raise an explicit error naming the dead state when a transition-matrix row sums to zero, instead of silently propagatingNaNthrougheigen/solve. Zero rows mean the chain is not ergodic; mean first passage times are undefined. Shared helper.mpt_normalize_rows()factored out of both entry points. -
.prepare_association_input()no longer hard-rejects non-square numeric matrices. For association methods (glasso, pcor, cor) the netobject’s$dataslot is a numeric matrix (not a data.frame). Any downstream caller that row-subsetted$dataand re-invoked the estimator (centrality_stability(),bootstrap_network(),reliability()) was silently producing NULL centralities caught bytryCatch, which surfaced as an “all centrality measures have zero variance” warning or all-NaNcorrelations. The matrix branch now recognises non-square input as raw observation data and recursively re-enters through the data-frame branch. Square symmetric matrices (pre-computed correlation / covariance) still go through the symmetric-matrix path with the symmetry check intact.
New parameters
-
build_network()gainsstate_colsandmetadata_colsparameters (both defaultNULL). Explicit overrides for the state-vs-metadata column classifier, which previously used a “values-in-nodes” heuristic that silently misclassifies metadata columns whose values coincide with node labels (e.g. aconditioncolumn with levels"A","B","C"when nodes are"A","B","C"). Validation: error on overlap between the two vectors, error on column names not present in the input data. Forwarded through thegroup = ...recursive dispatch so per-group calls honour the override.
Removed
-
plot.net_link_prediction()andplot.mcml()removed. Nestimate is a computation engine — visualization is the user’s concern. Previously both methods calledcograph::directly, violating the stated dependency invariant (Nestimate -> cograph direction forbidden). Users callcograph::splot(net)orcograph::plot_mcml(fit)directly.
Documentation
-
wtna()@param typenow flags thattype = "relative"combined withmethod = "cooccurrence"produces an asymmetric matrix (conditional co-occurrence given row state), not a symmetric undirected weight matrix. Usetype = "frequency"if symmetric counts are required.
Testing infrastructure
- New numerical-equivalence tests (gated by
NESTIMATE_EQUIV_TESTS=true):test-equiv-permutation.R(vs.stats::p.adjust+ hand-coded base-R permutation loop),test-equiv-mlvar.R(vs.mlVAR::mlVARat machine precision),test-equiv-association-rules.R(vs.arules::apriori),test-equiv-link-prediction.R(vs. clean-room matrix algebra +igraph::similarity),test-equiv-centrality-stability.R(vs.bootnet::corStability). Total ~162k per-value comparisons; all within machine precision except centrality-stability which uses a documented drop-grid tolerance because bootnet usesigraphpath-based centrality and Nestimate uses Floyd-Warshall. - New HON-family equivalence tests under
local_testing_and_equivalence/validating HON, HONEM, HYPA, MOGen, and hypergraph against pathpy 2.2.0 (via reticulate),BiasedUrn,RSpectra, andHyperG. Not shipped in the R-packagetests/directory; added to.Rbuildignore. - Branch-matrix coverage added for the four many-mode APIs (
wtna,bootstrap_network,build_clusters,sequence_plot) — systematic cross-product tests over all combinations of mode parameters to catch regressions where one branch silently diverges.
Nestimate 0.4.3
CRAN release: 2026-04-20
CRAN resubmission (addresses incoming-check NOTEs on 0.4.2)
- Tarball now ships
build/vignette.rds(the vignette index). Previous 0.4.2 build usedR CMD build --no-build-vignettes, which preserved pre-builtinst/doc/*.htmlbut stripped the index — CRAN flagged “VignetteBuilder field but no prebuilt vignette index.” -
test-gimme.Rnowskip_on_cran(). GIMME tests fit a lavaan SEM per subject and took ~50s locally (2-3× on Windows), pushing total check time to 11 min on win-devel. Full test suite still runs in CI and local dev.
Nestimate 0.4.0
New functions
-
build_mlvar()— multilevel VAR networks from ESM/EMA panel data. Estimates temporal (directed), contemporaneous (undirected), and between-subjects (undirected) networks matchingmlVAR::mlVAR()at machine precision. -
build_mmm()/compare_mmm()— mixture of Markov models via EM, with BIC/AIC/ICL model selection and optional covariate regression. -
cooccurrence()— standalone co-occurrence network builder supporting 6 input formats and 8 similarity methods. -
sequence_compare()— k-gram pattern comparison across groups with optional permutation testing. -
sequence_plot()/distribution_plot()— base-R sequence index and state distribution plots with clustering integration. -
build_simplicial(),persistent_homology(),q_analysis()— topological analysis of networks via simplicial complexes. -
nct()— Network Comparison Test matchingNetworkComparisonTest::NCT()at machine precision. -
build_gimme()— group iterative mean estimation for idiographic networks via lavaan. -
passage_time(),markov_stability()— Markov chain passage times and stability analysis. -
predict_links()/evaluate_links()— link prediction with 6 structural similarity methods. -
association_rules()— Apriori association rule mining from sequences or binary matrices. -
predictability()— node predictability for glasso/pcor/cor networks. -
build_hon(),build_honem(),build_hypa(),build_mogen()— higher-order network methods (HON, HONEM, HYPA, MOGen) nowcograph_network-compatible.
New datasets
-
human_long,ai_long— canonical long-format human–AI pair programming interaction sequences (10,796 turns, 429 sessions). -
chatgpt_srl— ChatGPT-generated SRL scale scores for psychological network analysis. -
trajectories— 138-student engagement trajectory matrix (15 timepoints, 3 states).
API
-
build_clusters(),network_reliability(),permutation(), andprepare()replace earlier internal names for consistency with thebuild_*naming convention. -
mgmestimator added (method = "mgm") for mixed continuous + categorical data via nodewise lasso, matchingmgm::mgm()at machine precision.
Bug fixes
-
build_mmm()no longer crashes on platforms whereparallel::detectCores()returnsNA(macOS ARM64 CRAN check failure). -
gimmeconvergence filter now correctly handles all typedNAvariants (NA_character_,NA_real_, etc.). -
NaNvalues in numeric metadata aggregation (all-NAsessions) normalized toNA_real_. - HYPA p-values corrected;
hypa_scorecolumn renamed top_value.
CRAN compliance
-
.datapronoun added toglobalVariables(). -
base::.rowSums()/base::.colSums()replaced withrowSums()/colSums(). -
dev.new()guarded byinteractive()— no side effects under knitr or CI. - Equivalence test files excluded from the built tarball.
Performance
-
do.call(rbind, ...)replaced withdata.table::rbindlist()inmcml.Randsequence_compare.R.
Nestimate 0.3.4
- HYPA: Renamed
hypa_scorecolumn top_valuefor clarity. Added$over,$under,$n_over,$n_underfields tonet_hypaobjects. Scores are now pre-sorted with anomalous paths first. - HYPA:
summary.net_hypa()now shows over/under-represented paths separately with a configurablenparameter. -
pathways.netobject(): New S3 method to extract higher-order pathways directly from a netobject (builds HON or HYPA internally). -
path_counts(): Now handles NAs in trajectories by stripping them before k-gram counting.
Nestimate 0.2.0
- Reduced hard dependencies from 6 to 4 Imports (ggplot2, glasso, data.table, cluster).
- Removed igraph from Imports —
centrality_stability()andboot_glasso()now accept acentrality_fnparameter for external centrality computation. - Removed tna from Imports — moved to Suggests (only used for input class detection).
- Implemented
graphical_var()from scratch using coordinate descent lasso + graphical lasso with EBIC model selection, eliminating the graphicalVAR dependency. - Dropped
ml_graphical_var()— users should usemlvar()for multilevel VAR. - Removed cograph plot wrappers —
plot.netobject(),plot.net_bootstrap(),plot.net_permutation(),plot.net_hon(),plot.net_hypa()andas_cograph()removed. Users call cograph plotting functions directly on netobjects. - Added
attentionestimator for decay-weighted transition networks. - Increased test coverage from 84.5% to 96.1% (2780 tests).
- Passes R CMD check with 0 errors, 0 warnings, 0 notes.
Nestimate 0.1.0
- Initial release. Split from Saqrlab v0.3.0.
- Core estimation via
build_network()with 8 built-in estimators. - Bootstrap inference (
bootstrap_network()), permutation testing (permutation()), EBICglasso bootstrap (boot_glasso()). - Higher-order networks: HON, HONEM, HYPA, MOGen.
- GIMME, MCML, multilevel VAR, graphical VAR.
- Temporal network analysis and velocity TNA.
- Dual-class
c("netobject", "cograph_network")output for cograph compatibility.