In [1]:
# rm(list=ls()) 
options(OutDec = ",")
#==============================================================================
# Correlacao amostral
#==============================================================================
R <- matrix(c(
   1, 0.02, 0.96, 0.42, 0.01,
0.02,    1, 0.13, 0.71, 0.85,
0.96, 0.13,    1, 0.50, 0.11,
0.42, 0.71, 0.50,    1, 0.79,
0.01, 0.85, 0.11, 0.79,    1),5,5,T)
In [2]:
#==============================================================================
# Analise fatorial via componentes principais
#==============================================================================
p       <- 5 # numero de variaveis
AF      <- eigen(R)
delta   <- AF$values
P       <- AF$vector
print("==== Autovalores ====")
print(delta)
print("==== Autovetores ====")
print(P)
print("==== Proporcao da variabilidade ====")
print(delta/p)
print("==== Proporcao da variabilidade acumulada ====")
print(cumsum(delta)/p)
# Escolhemos m=2
[1] "==== Autovalores ===="
[1] 2,85309042 1,80633245 0,20449022 0,10240947 0,03367744
[1] "==== Autovetores ===="
          [,1]        [,2]        [,3]       [,4]         [,5]
[1,] 0,3314539 -0,60721643 -0,09848524  0,1386643  0,701783012
[2,] 0,4601593  0,39003172 -0,74256408 -0,2821170  0,071674637
[3,] 0,3820572 -0,55650828 -0,16840896  0,1170037 -0,708716714
[4,] 0,5559769  0,07806457  0,60158211 -0,5682357  0,001656352
[5,] 0,4725608  0,40418799  0,22053713  0,7513990  0,009012569
[1] "==== Proporcao da variabilidade ===="
[1] 0,570618084 0,361266491 0,040898045 0,020481893 0,006735487
[1] "==== Proporcao da variabilidade acumulada ===="
[1] 0,5706181 0,9318846 0,9727826 0,9932645 1,0000000
In [3]:
#==============================================================================
# Estimacao da matriz de cargas dos fatores para m=2
#==============================================================================
ell.1 <- sqrt(delta[1])*P[,1]
ell.2 <- sqrt(delta[2])*P[,2]
L     <- cbind(ell.1,ell.2)
print(L)
         ell.1      ell.2
[1,] 0,5598618 -0,8160981
[2,] 0,7772594  0,5242021
[3,] 0,6453364 -0,7479464
[4,] 0,9391057  0,1049187
[5,] 0,7982069  0,5432281
In [4]:
#==============================================================================
# Para conferir, note que delta_j = ell.1_j'*ell.1_j
# 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))
[1] 2,85309042 1,80633245 0,20449022 0,10240947 0,03367744
        [,1]     [,2]
[1,] 2,85309 1,806332
In [5]:
#==============================================================================
# Estimacao das comunalidades 
#==============================================================================
sum2 <- function(x){return(sum(x^2))}
h    <- apply(L,1,"sum2")
print(h)
[1] 0,9794614 0,8789200 0,9758829 0,8929275 0,9322311
In [6]:
#==============================================================================
# Estimacao das variancias especificas
#==============================================================================
psi  <- 1 - h # variancia das variaveis padronizadas - comundalidades 
print(psi)
[1] 0,02053865 0,12107998 0,02411712 0,10707250 0,06776888
In [7]:
#==============================================================================
# Estimacao/Recomposicao de R
#==============================================================================
R.est  <- L%*%t(L)+diag(psi)
print(R.est)
            [,1]        [,2]      [,3]      [,4]        [,5]
[1,] 1,000000000 0,007357539 0,9716968 0,4401455 0,003558179
[2,] 0,007357539 1,000000000 0,1095187 0,7849273 0,905175175
[3,] 0,971696840 0,109518709 1,0000000 0,5275656 0,108806485
[4,] 0,440145533 0,784927343 0,5275656 1,0000000 0,806595488
[5,] 0,003558179 0,905175175 0,1088065 0,8065955 1,000000000
In [8]:
#==============================================================================
# Matriz residual
#==============================================================================
U <- R - R.est
print(U)
             [,1]        [,2]         [,3]        [,4]         [,5]
[1,]  0,000000000  0,01264246 -0,011696840 -0,02014553  0,006441821
[2,]  0,012642461  0,00000000  0,020481291 -0,07492734 -0,055175175
[3,] -0,011696840  0,02048129  0,000000000 -0,02756557  0,001193515
[4,] -0,020145533 -0,07492734 -0,027565574  0,00000000 -0,016595488
[5,]  0,006441821 -0,05517518  0,001193515 -0,01659549  0,000000000