Core Consistency Diagnostic
corcondia(X, object, divisor = c("nfac","core"))
X |
Three-way data array with |
object |
Object of class "parafac" (output from |
divisor |
Divide by number of factors (default) or core sum of squares. |
The core consistency diagnostic is defined as
100 * ( 1 - sum( (G-S)^2 ) / divisor )
|
where G
is the least squares estimate of the Tucker core array, S
is a super-diagonal core array, and divisor
is the sum of squares of either S
("nfac") or G
("core"). A value of 100 indiciates a perfect multilinear structure, and smaller values indicate greater violations of multilinear structure.
Returns CORCONDIA value.
Nathaniel E. Helwig <helwig@umn.edu>
Bro, R., & Kiers, H.A.L. (2003). A new efficient method for determining the number of components in PARAFAC models. Journal of Chemometrics, 17, 274-286.
########## EXAMPLE ########## # create random data array with Parafac structure set.seed(3) mydim <- c(50,20,5) nf <- 2 Amat <- matrix(rnorm(mydim[1]*nf),mydim[1],nf) Bmat <- matrix(runif(mydim[2]*nf),mydim[2],nf) Cmat <- matrix(runif(mydim[3]*nf),mydim[3],nf) Xmat <- array(tcrossprod(Amat,krprod(Cmat,Bmat)),dim=mydim) Emat <- array(rnorm(prod(mydim)),dim=mydim) Emat <- nscale(Emat, 0, ssnew = sumsq(Xmat)) # SNR=1 X <- Xmat + Emat # fit Parafac model (1-4 factors) pfac1 <- parafac(X,nfac=1,nstart=1) pfac2 <- parafac(X,nfac=2,nstart=1) pfac3 <- parafac(X,nfac=3,nstart=1) pfac4 <- parafac(X,nfac=4,nstart=1) # check corcondia corcondia(X, pfac1) corcondia(X, pfac2) corcondia(X, pfac3) corcondia(X, pfac4)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.