| nmf.ffb.cv | R Documentation |
Performs K-fold cross-validation to evaluate the equilibrium mapping of the NMF-FFB model.
For each fold, nmf.ffb is fitted on the training samples,
yielding an equilibrium mapping \hat Y_1 = M_{\mathrm{model}} Y_2.
The held-out endogenous variables Y_1 are then predicted from Y_2
using this mapping, and the mean absolute error (MAE) over all entries in the
test block is computed. The returned value is the average MAE across folds.
This implements the hyperparameter selection strategy described in the paper: hyperparameters are chosen by predictive cross-validation rather than direct inspection of the internal structural matrices.
method = "fiml". When method = "fiml" is passed
(through ...), the column-wise scheme above is not run: the
equilibrium prediction M_{\mathrm{model}} Y_2 is a reduced-form
quantity, and the reduced form is the same with and without feedback, so
predicting held-out columns cannot select \Theta_1 (that is what the
BIC path and the bootstrap-calibrated LR test in nmf.ffb /
nmf.ffb.inference are for). The only tunable quantity is the
stage-1 rank, and the call is delegated to the element-wise CV of the
feed-forward fit, nmfkc.ecv(Y = Y1, A = Y2, rank = rank,
...), whose object is returned ($objfunc holds the CV error per
rank; rank may be a vector, default 1:min(3, P1)).
C1.L1 and C2.L1 are ignored in that case.
nmf.ffb.cv(
Y1,
Y2,
rank = NULL,
X.init = "nndsvd",
X.L2.ortho = 100,
C1.L1 = 1,
C2.L1 = 0.1,
epsilon = 1e-06,
maxit = 5000,
...
)
Y1 |
A non-negative numeric matrix of endogenous variables with rows = variables (P1), columns = samples (N). |
Y2 |
A non-negative numeric matrix of exogenous variables with
rows = variables (P2), columns = samples (N).
Must satisfy |
rank |
Integer; rank (number of latent factors) passed to |
X.init |
Initialization strategy for |
X.L2.ortho |
L2 orthogonality penalty for |
C1.L1 |
L1 sparsity penalty for |
C2.L1 |
L1 sparsity penalty for |
epsilon |
Convergence threshold for |
maxit |
Maximum number of iterations for |
... |
Additional arguments passed to |
A numeric scalar: mean MAE across CV folds (the fits use
method = "mu" unless method is given). With
method = "fiml", the nmfkc.ecv object of the
stage-1 rank sweep.
nmf.ffb
Y <- t(iris[, -5])
Y1 <- Y[1:2, ]
Y2 <- Y[3:4, ]
mae <- nmf.ffb.cv(Y1, Y2, rank = 2, maxit = 500, nfolds = 3)
mae
# rank selection for the likelihood-based estimator
ecv <- nmf.ffb.cv(Y1, Y2, rank = 1:2, method = "fiml", nfolds = 3)
ecv$objfunc
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.