Commit e60a0810 by Eric Coissac

Add of the mcor.partial function estimating the partial correlation coeficients matrix

parent 44d6a669
#' @include procmod.frame.R
#'
NULL
#' Compute the variance, covariance matrix of K coordinate matrices.
#'
#' Covariance between two matrices is defined as the sum of the
#' sigular values of the X'Y matrix. All the matrices must have
#' the same number of rows.
#'
#' @param ... the set of matrices
#'
#' @examples
#' # Build Three matrices of 3 rows.
#' A <- matrix(1:9,nrow=3)
#' B <- matrix(10:15,nrow=3)
#' C <- matrix(20:31,nrow=3)
#' # compute the variance covariance matrix
#' mvar(A,B,C)
#' mvar(A=A,B=B,C=C)
#'
#' @author Eric Coissac & Christelle Gonindard-Melodelima
#' @export
mvar = function(...) {
Xs <- list(...)
if (length(Xs)==1)
if (is.list(Xs[[1]]))
Xs=as.procmod.frame(Xs[[1]])
else if (is.procmod.frame(Xs[[1]]))
Xs=Xs[[1]]
else
Xs=procmod.frame(Xs[[1]])
else
Xs=as.procmod.frame(Xs)
Xnames=names(Xs)
Xs <- lapply(Xs,scale,scale = FALSE)
nX = length(Xs)
Xx <- rep(1:nX,nX)
Xy <- rep(1:nX,rep(nX,nX))
XXs <- mapply(function(x,y) crossprod(Xs[[x]], Xs[[y]]),
Xx,Xy,
SIMPLIFY = FALSE)
sol_xxs <- lapply(XXs,svd)
CovXXs = sapply(sol_xxs, function(sol) sum(sol$d))
dim(CovXXs)=c(nX,nX)
colnames(CovXXs)=Xnames
rownames(CovXXs)=Xnames
return(CovXXs)
}
#' Compute the person correlation matrix of K coordinate matrices
#'
#' @author Eric Coissac
#' @author Christelle Gonindard-Melodelima
#' @export
mcor = function(...) {
cov = mvar(...)
s = sqrt(diag(cov))
vv= outer(s,s)
return(cov/vv)
}
#' Compute the person partial correlation matrix of K coordinate matrices
#'
#' @author Eric Coissac
#' @author Christelle Gonindard-Melodelima
#' @export
mcor.partial = function(...) {
C = solve(mcor(...))
D = sqrt(diag(C) %o% diag(C))
return(C/D)
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment