fitted.nmfae() and residuals.nmfae()
S3 methods; previously fitted() on an nmfae
object silently returned NULL because the wrong field name
($XB instead of $Y1hat) was used.Basis / Covariate columns (was
Factor/Exogenous in
nmf.sem.inference(),
Decoder/Encoder in
nmfae.inference()).wild.B = 500,
wild.seed = 123 across all inference functions..DOT functions renamed to
result for consistency.nfolds, seed,
shuffle) moved to ... in
nmfkc.ecv(), nmfae.ecv(),
nmfae.cv(), nmf.sem.cv(); div
also accepted for backward compatibility.nmfkc.criterion(): Extracted criterion computation from
nmfkc() as a standalone exported function. Supports
detail = "full" / "fast" /
"minimal" to control computation cost.nmfre.inference(): Separated statistical inference from
nmfre() optimization. Returns coefficient table with SE,
z-values, and p-values via wild bootstrap.nmf.sem.inference(): Statistical inference for the C2
parameter matrix in NMF-SEM. Uses sandwich SE and wild bootstrap.coef(), fitted(),
residuals() for all model classes (nmfkc,
nmfae, nmfre, nmf.sem).plot() for nmfre and
nmf.sem (convergence diagnostics).summary.nmf.sem(): Stability diagnostics, fit
statistics, and C2 coefficient table.nmfkc(), nmfkc.rank():
save.time / save.memory →
detailnmfae(): Q → rank,
R → rank.encodernmfre(): Q → rank,
dfU.cap.rate → df.ratenmfre.dfU.scan(), nmfkc.ar.degree.cv():
Q → ranknmfkc.residual.plot(): Y_XB_palette →
fitted.palette, E_palette →
residual.palettenmfkc.kernel.beta.nearest.med():
block_size → block.size,
sample_size → sample.sizehide.isolated option added to all .DOT
functions (default TRUE).nmf.sem.DOT(): Added sig.level parameter;
C2 edges decorated with significance stars.nmfkc(): Added X.restriction = "none"
option and X.init = "kmeansar" initialization.@section Lifecycle: Experimental added to
nmfae().mc.cores parallel option from
nmfae.ecv() for CRAN compliance.T shadowing TRUE in
information criterion computation.nmfkc.ecv() to use KL divergence for evaluation
when method="KL".save.time=TRUE) to
nmfkc.ecv() inner calls.nmfkc.rank() elbow normalization
when R-squared values are identical.rank → Q)
in nmfkc.rank() call to nmfkc.ecv().nmf.sem.split() when P=2.n.exogenous in
nmf.sem.split().summary.nmfkc() and
print.summary.nmfkc().@return for plot.nmfkc() and
predict.nmfkc().@return items (method,
n.missing, n.total, rank,
mae) to nmfkc().T/F with
TRUE/FALSE.1:length() with seq_along().nmf.sem.cv() defaults with
nmf.sem().Harmonized all DOT-generating functions
(nmf.sem.DOT, nmfkc.DOT,
nmfkc.ar.DOT) for consistent structure, naming conventions,
and visualization logic.
Standardized node and edge formatting rules, including unified cluster behavior, color schemes, and edge-scaling conventions.
Implemented threshold-aware coefficient labeling so that displayed numerical precision aligns with the visualization threshold, preventing misleadingly detailed labels.
Removed unused or redundant DOT fragments and improved compatibility across Graphviz engines.
Enhanced layout readability through consistent indentation, node
grouping, and suppression of isolated nodes in specific visualization
modes (e.g., type = "YA" in
nmfkc.DOT).
Refactored and expanded internal DOT helper functions
(.nmfkc_dot_format_coef,
.nmfkc_dot_digits_from_threshold,
.nmfkc_dot_cluster_nodes, etc.) for better maintainability
and uniform behavior.
New Function: Implemented
nmfkc.ecv() for Element-wise Cross-Validation (Wold’s
CV).
rank to evaluate multiple
ranks simultaneously.Missing Value & Weight Support:
nmfkc() and nmfkc.cv() now fully support
missing values (NA) and observation weights via the hidden
argument Y.weights (passed through ...).Y contains NAs, they are automatically
detected and masked (assigned a weight of 0) during optimization.Rank Selection Diagnostics
(nmfkc.rank):
save.time defaults to FALSE, enabling the
robust Element-wise CV calculation by default.Argument Standardization:
rank across all
functions (nmfkc, nmfkc.cv,
nmfkc.ecv, nmfkc.rank).Q is still supported for backward
compatibility but internally mapped to rank.Summary Improvements:
summary() and print() methods to
report:
Other Improvements:
nmfkc.ar() to ensure the
input Y has no missing values (as they cannot be propagated
to the covariate matrix A in VAR models).nmfkc.residual.plot() layout margins for better
visibility of titles.Regularization Update:
The regularization scheme has been revised from L2
(ridge) to L1 (lasso-type) penalties.
gamma now controls the L1 penalty on the
coefficient matrix ( B = C A ), promoting sparsity in
sample-wise coefficients.lambda has been added to control the
L1 penalty on the parameter matrix ( C ), encouraging
sparsity in the shared template structure....) to
nmfkc() and related functions.Function Signature Simplification:** Many less-frequently used
arguments in nmfkc() (e.g., gamma,
X.restriction, X.init) and in
nmfkc.cv() (e.g., div, seed) have
been moved into the ellipsis (...) for a cleaner function
signature.
Performance Improvement: The internal function
.silhouette.simple was vectorized and optimized to reduce
computational cost, particularly for the calculation of
a(i) and b(i).
Removed the fast.calc option from the
nmfkc() function.
Added the X.init argument to the
nmfkc() function, allowing selection between
'kmeans' and 'nndsvd' initialization
methods.
The penalty term has been changed from tr(CC') to
tr(BB') = tr(CAA'C').
Implemented the internal .z and xnorm
functions.
Added the fast.calc option to the nmfkc()
function.
Optimized internal calculations for improved performance.
Updated citation("nmfkc") and added AIC/BIC to the
output.
Implemented the nmfkc.ar.stationarity()
function.
Modified the z() function.
Used crossprod() for faster matrix
multiplication.
Implemented the nmfkc.ar.DOT() function.
Added logic to sort the columns of X to form a unit
matrix in special cases.
Implemented nmfkc.kernel.beta.cv() and
nmfkc.ar.degree.cv() functions.
Set the default column names of X to
Basis1, Basis2, etc.
Added X.prob and X.cluster to the
return object.
Skipped CPCC and silhouette calculations when
save.time = TRUE.
Added a prototype for the nmfkc.ar()
function.
Added the criterion argument to the
nmfkc() function to support multiple criteria.
Updated the nmfkc.rank() function.
Added the criterion argument to the
nmfkc.rank() function.
Implemented the save.time argument.
Implemented the nmfkc.rank() function.
Implemented the nstart option from the
kmeans() function.
Added an experimental implementation of the
nmfkc.rank() function.
Removed zero-variance columns and rows with a warning.
Added source and references to the documentation.
Renamed several components for clarity:
nmfkcreg to nmfkccreate.kernel to nmfkc.kernelnmfkcreg.cv to nmfkc.cvP to B.probcluster to B.clusterunit to X.columntrace to print.tracedims to print.dimsAdded the r.squared argument to the
nmfkcreg.cv() function.
In nmfkcreg():
dims argument to check matrix sizes.unit argument to normalize the basis matrix
columns.Modified the create.kernel() function to support
prediction.
Updated examples on GitHub.
Removed the YHAT return value; use XB
instead.
Added the cluster return value for hard
clustering.