| smscl {lazy.mds} | R Documentation |
Simultaneous Diagonalization of Several Symmetric Matrices
smscl(C, lmax = 100, eps = 1e-08, print = 2)
C |
Input array of symmetric matrices |
lmax |
max # of iterations |
eps |
convergence criterion |
print |
= 1 to print result |
Given matrices C_k, n=1,2,...,nG, find the orthonormal matrix T such that
T' C_k T == W_k, k=1,2,...,nG, diag
OR
C_k == T W_k T', k=1,2,...,nG
This program minimizes
rss2 = sum_k ( (C_k - T W_k T')^2 )
with respect to orthogonal T and diagonal W_k.
A list of
T, W, rmse, llll=iteretions needed, converged=1 if converged.
De Leeuw, Jan, and Pruzansky, Sandra (1978) A New Computational Method to Fit the Weighted Euclidean Distance Model. Psychometrika, v43 n4 p479-9
set.seed(1701)
W <- matrix( c( 1,1, 2,1, 1,2 ),,2, byrow=1 )
rownames(W) <- paste("sbj",1:nrow(W),sep="")
colnames(W) <- paste("d",1:ncol(W),sep="")
theta <- pi/3
T <- matrix(c(cos(theta),sin(theta),-sin(theta),cos(theta)),2,2)
C <- array(0,dim=c(2,2,3))
for( k in 1:nrow(W) ){
C[,,k] <- T%*%diag(W[k,])%*%t(T)
E <- 0.05*matrix(rnorm(4),2,2); E <- (E+t(E))/2
C[,,k] <- C[,,k] + E
}
dimnames(C) <- list(colnames(W),colnames(W),rownames(W))
res <- smscl( C, lmax=100, eps=1e-8, print=2 )