Auxiliary for Controlling Multi-Way Constraints
const.control(const, df = NULL, degree = NULL, intercept = NULL)
const |
Character vector of length 3 or 4 giving the constraints for each mode. See |
df |
Integer vector of length 3 or 4 giving the degrees of freedom to use for the spline basis in each mode. Can also input a single number giving the common degrees of freedom to use for each mode. Defaults to 7 degrees of freedom for each applicable mode. |
degree |
Integer vector of length 3 or 4 giving the polynomial degree to use for the spline basis in each mode. Can also input a single number giving the common polynomial degree to use for each mode. Defaults to degree 3 (cubic) polynomials for each applicable mode. |
intercept |
Logical vector of length 3 or 4 indicating whether the spline basis should contain an intercept. Can also input a single logical giving the common intercept indicator to use for each mode. Defaults to |
The const
function (from CMLS package) describes the available constraint options.
Returns a list with elements: const
, df
, degree
, and intercept
.
Nathaniel E. Helwig <helwig@umn.edu>
########## EXAMPLE ########## # create random data array with Parafac structure set.seed(4) mydim <- c(30, 10, 8, 10) nf <- 4 aseq <- seq(-3, 3, length.out = mydim[1]) Amat <- cbind(dnorm(aseq), dchisq(aseq+3.1, df=3), dt(aseq-2, df=4), dgamma(aseq+3.1, shape=3, rate=1)) Bmat <- svd(matrix(runif(mydim[2]*nf), nrow = mydim[2], ncol = nf), nv = 0)$u Cmat <- matrix(runif(mydim[3]*nf), nrow = mydim[3], ncol = nf) Cstruc <- Cmat > 0.5 Cmat <- Cmat * Cstruc Dmat <- matrix(runif(mydim[4]*nf), nrow = mydim[4], ncol = nf) Xmat <- tcrossprod(Amat, krprod(Dmat, krprod(Cmat, Bmat))) Xmat <- array(Xmat, dim = mydim) Emat <- array(rnorm(prod(mydim)), dim = mydim) Emat <- nscale(Emat, 0, ssnew = sumsq(Xmat)) # SNR = 1 X <- Xmat + Emat # fit Parafac model (unimodal and smooth A, orthogonal B, # non-negative and structured C, non-negative D) set.seed(123) pfac <- parafac(X, nfac = nf, nstart = 1, Cstruc = Cstruc, const = c("unismo", "orthog", "nonneg", "nonneg")) pfac # same as before, but add some options to the unimodality contraints... # more knots (df=10), quadratic splines (degree=2), and enforce non-negativity cvec <- c("unsmno", "orthog", "nonneg", "nonneg") ctrl <- const.control(cvec, df = 10, degree = 2) set.seed(123) pfac <- parafac(X, nfac = nf, nstart = 1, Cstruc = Cstruc, const = cvec, control = ctrl) pfac
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.