[R] Partial Canonical Correlation Analysis Help
Proitsi, Petroula
petroula.proitsi at kcl.ac.uk
Wed Mar 14 09:06:48 CET 2012
Hello,
I am trying to perform partial Canonical Correlation (CCA) in R. I have calculated the CCA between two vectors X and Y and now I want to "control" for Z.
I know I have to modify the cc and rcc functions to include Z but what I am doing does not seem to be working...
Below I have the original code and my modified code
Original cc:
function (X, Y)
{
Xnames = dimnames(X)[[2]]
Ynames = dimnames(Y)[[2]]
ind.names = dimnames(X)[[1]]
res = rcc(X, Y, 0, 0)
return(res)
}
I changed this to:
function (X, Y, Z)
{
Xnames = dimnames(X)[[2]]
Ynames = dimnames(Y)[[2]]
Znames = dimnames(Z) [[2]]
ind.names = dimnames(X)[[1]]
res = rcc2(X, Y, Z, 0, 0, 0)
return(res)
}
and then for rcc
Original rcc:
function (X, Y, lambda1, lambda2)
{
Xnames <- dimnames(X)[[2]]
Ynames <- dimnames(Y)[[2]]
ind.names <- dimnames(X)[[1]]
Cxx <- var(X, na.rm = TRUE, use = "pairwise") + diag(lambda1,
ncol(X))
Cyy <- var(Y, na.rm = TRUE, use = "pairwise") + diag(lambda2,
ncol(Y))
Cxy <- cov(X, Y, use = "pairwise")
res <- geigen(Cxy, Cxx, Cyy)
names(res) <- c("cor", "xcoef", "ycoef")
scores <- comput(X, Y, res)
return(list(cor = res$cor, names = list(Xnames = Xnames,
Ynames = Ynames, ind.names = ind.names), xcoef = res$xcoef,
ycoef = res$ycoef, scores = scores))
}
I know I have to calculate Czz Czx and Czy but do I have to calculate Cxy.z (partial covariance)?
and I am not sure what to add in the res<- geigen etc
when I add Czz and/or Czx Czy I get an error - I have also left scores and return ans original since I am not sure what to include
modified rcc2
function (X, Y, Z, lambda1, lambda2, lambda3)
{
Xnames <- dimnames(X)[[2]]
Ynames <- dimnames(Y)[[2]]
Znames <- dimnames(Z)[[2]]
ind.names <- dimnames(X)[[1]]
Cxx <- var(X, na.rm = TRUE, use = "pairwise") + diag(lambda1,
ncol(X))
Cyy <- var(Y, na.rm = TRUE, use = "pairwise") + diag(lambda2,
ncol(Y))
Czz <- var(Z, na.rm = TRUE, use = "pairwise") + diag(lambda3,
ncol(Z))
Cxy <- cov(X, Y, use = "pairwise")
Czx <- cov(X, Z, use = "pairwise")
Czy <- cov(Y, Z, use = "pairwise")
# Cxy.z?
res <- geigen(Cxy, Cxx, Cyy, Czz, Czx, Czy) # doesnt work
names(res) <- c("cor", "xcoef", "ycoef", "zcoef")
scores <- comput(X, Y, Z, res)
return(list(cor = res$cor, names = list(Xnames = Xnames,
Ynames = Ynames, Znames=Znames, ind.names = ind.names), xcoef = res$xcoef,
ycoef = res$ycoef, zcoef = res$zcoef, scores = scores))
}
Any help would be really appreciated..I am completely new to this and lost.
many thanks
Joe
More information about the R-help
mailing list