# rm(list=ls())
options(OutDec = ",")
#==============================================================================
# Exemplo
#==============================================================================
# A matriz RHO e' positiva definida
#==============================================================================
RHO <- matrix(c(1,0.9,0.7,0.9,1,0.4,0.7,0.4,1),3,3,T)
print(RHO)
[,1] [,2] [,3] [1,] 1,0 0,9 0,7 [2,] 0,9 1,0 0,4 [3,] 0,7 0,4 1,0
#==============================================================================
# Note que e' possivel obter uma solucao via CP, mas ela nao e' exata.
# So' seria exata para m=p=3
#==============================================================================
dec <- eigen(RHO)
delta <- dec$values
P <- dec$vectors
ell.1 <- sqrt(delta[1])*P[,1]
ell.2 <- sqrt(delta[2])*P[,2]
ell.3 <- sqrt(delta[3])*P[,3]
L <- cbind(ell.1,ell.2,ell.3)
print(RHO-ell.1%*%t(ell.1)) # Se considerar m=1 a solucao nao e' exata
[,1] [,2] [,3] [1,] 0,02500233 0,02648121 -0,06232153 [2,] 0,02648121 0,21739805 -0,28297823 [3,] -0,06232153 -0,28297823 0,40396359
#==============================================================================
# Aproveitamos o exemplo para verificar:
#==============================================================================
print("==== Proporção da variabilidade ====")
print(delta/3)
print("==== Proporção da variabilidade acumulada ====")
print(cumsum(delta)/3)
[1] "==== Proporção da variabilidade ====" [1] 0,78454534 0,20533887 0,01011579 [1] "==== Proporção da variabilidade acumulada ====" [1] 0,7845453 0,9898842 1,0000000
#==============================================================================
# Para conferir, note que delta_k = ell.1_k'*ell.1_k
# Logo, podemos ver a proporcao da variabilidade devida ao k-esimo fator
# atraves da soma de quadrados dos valores da k-esima coluna de L
#==============================================================================
print(delta)
print(cbind((ell.1)%*%ell.1,(ell.2)%*%ell.2,(ell.3)%*%ell.3))
[1] 2,35363603 0,61601660 0,03034736
[,1] [,2] [,3]
[1,] 2,353636 0,6160166 0,03034736