corcondia {multiway} | R Documentation |
Core Consistency Diagnostic
Description
Calculates Bro and Kiers's core consistency diagnostic (CORCONDIA) for a fit parafac
or parafac2
model. For Parafac2, the diagnostic is calculated after transforming the data.
Usage
corcondia(X, object, divisor = c("nfac","core"))
Arguments
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. |
Details
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.
Value
Returns CORCONDIA value.
Author(s)
Nathaniel E. Helwig <helwig@umn.edu>
References
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.
Examples
########## 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)