Bastão de Asclépio & Distribuição Normal

Bastão de Asclépio & Distribuição Normal

suppressMessages(library(car, warn.conflicts=FALSE))
suppressMessages(library(corrplot, warn.conflicts=FALSE))
suppressMessages(library(GGally, warn.conflicts=FALSE))
suppressMessages(library(ggstatsplot, warn.conflicts=FALSE))
suppressMessages(library(knitr, warn.conflicts=FALSE))
suppressMessages(library(likert, warn.conflicts=FALSE))
suppressMessages(library(polycor, warn.conflicts=FALSE))
suppressMessages(library(psych, warn.conflicts=FALSE))
suppressMessages(library(qgraph, warn.conflicts=FALSE))
suppressMessages(library(readxl, warn.conflicts=FALSE))
source("eiras.showdataframe.R")
source("eiras.bartitle.R")

Material

  • HTML de Rmarkdown em RPubs

Incluir

  • bruceR
    • bruceR::Corr
    • bruceR::Describe
    • bruceR::RECODE
    • bruceR::model_summary
    • bruceR::regress
    • bruceR::EMMEANS
    • bruceR::GLM_summary
    • bruceR::HLM_summary
    • bruceR::TTEST
    • bruceR::MANOVA: https://psychbruce.github.io/bruceR/reference/MANOVA.html
    • bruceR::lavaan_summary
    • bruceR::PCA
    • bruceR::EFA
    • bruceR::cfa

Objetivos

  • Discutir aplicação de Psicometria na área da saúde
  • Conceituar a análise fatorial exploratória (EFA) utilizando um exemplo da literatura psicológica
  • Ler conjunto de dados em R e executar EFA
  • Interpretar a saída estatística de EFA
  • Dar exemplos da literatura que ilustrem como EFA tem sido utilizada.

Tipo de variável

Variável dicotômica

Variável politômica

Likert scale: Wikipedia

“A OMS organizou um projeto colaborativo multicêntrico com o objetivo de desenvolver um instrumento internacional que avaliasse qualidade de vida como um construto subjetivo, multidimensional e composto tanto por dimensões positivas (mobilidade, autoestima) como negativas (dor, fadiga). Este projeto foi realizado simultaneamente em 15 centros de diferentes continentes e o resultado foi a elaboração do WHOQOL-100, um questionário com 100 itens e sua versão abreviada, o WHOQOL-BREF com 26 itens.”

Projeto VERAS (2011) Vida do Estudante e Residente na Área da Saúde.
Enns et al. (2016)
Tempski et al. (2016)
Paro et al. (2016)
Silveira, … & Siqueira (2025)

O questionário em português do Brasil está disponível aqui.

Alguns exemplos de questões do WHOQOL-BREF:

Os itens são agrupados em domínios (Manual do Projeto VERAS (2011)):

Os itens 3, 4 e 26 têm valência negativa. As respostas podem ser invertidas, tornando as respostas de 1 a 5 em valores 5 a 1, para transformá-las em valência positiva.

WHO sugere a forma de computar os escores de cada respondente nos domínios, por meio da somatória das respostas dos itens Likert (com mesma valência), utilizando-os como intervalares embora sejam, no máximo, ordinais. O escore é multiplicado por 4 para se tornar próximo ao valor da versão plena do WHOQOL-100, além de procedimentos para transformar em porcentagem devido ao tamanho desigual dos domínios. Conforme Manual do WHOQOL (Apêndice 10, p. 106),

Note que os itens 1 e 2 não são incluídas nos domínios porque são muito gerais sobre qualidade de vida e saúde, respectivamente. Portanto, para comparar a proposta da WHOQOL-BREF com a análise feita adiante, também os excluiremos.

Para referência, aqui estão todas as perguntas do WHOQOL-BREF:

1. Como você avaliaria sua qualidade de vida? 
2. Quão satisfeito(a) você está com a sua saúde?

    As questões seguintes são sobre o quanto você tem sentido algumas
coisas nas últimas duas semanas. 3. Em que medida você acha que sua dor (física) impede
você de fazer o que você precisa? 4. O quanto você precisa de algum tratamento médico para
levar sua vida diária? 5. O quanto você aproveita a vida? 6. Em que medida você acha que a sua vida tem sentido? 7. O quanto você consegue se concentrar? 8. Quão seguro(a) você se sente em sua vida diária? 9. Quão saudável é o seu ambiente físico (clima, barulho, poluição, atrativos)? As questões seguintes perguntam sobre quão completamente você tem
sentido ou é capaz de fazer certas coisas nestas últimas duas semanas. 10. Você tem energia suficiente para seu dia-a-dia? 11. Você é capaz de aceitar sua aparência física? 12. Você tem dinheiro suficiente para satisfazer suas necessidades? 13. Quão disponíveis para você estão as informações que
precisa no seu dia-a-dia? 14. Em que medida você tem oportunidades de atividade de lazer? As questões seguintes perguntam sobre quão bem ou satisfeito você
se sentiu a respeito de vários aspectos de sua vida nas últimas duas semanas. 15. Quão bem você é capaz de se locomover? 16. Quão satisfeito(a) você está com o seu sono? 17. Quão satisfeito(a) você está com sua capacidade de
desempenhar as atividades do seu dia-a-dia? 18. Quão satisfeito(a) você está com sua capacidade para o trabalho? 19. Quão satisfeito(a) você está consigo mesmo? 20. Quão satisfeito(a) você está com suas relações pessoais
(amigos, parentes, conhecidos, colegas)? 21. Quão satisfeito(a) você está com sua vida sexual? 22. Quão satisfeito(a) você está com o apoio que você
recebe de seus amigos? 23. Quão satisfeito(a) você está com as condições do local onde mora? 24. Quão satisfeito(a) você está com o seu acesso aos serviços de saúde? 25. Quão satisfeito(a) você está com o seu meio de transporte? As questões seguintes referem-se a com que freqüência você sentiu
ou experimentou certas coisas nas últimas duas semanas. 26. Com que freqüência você tem sentimentos negativos tais
como mau humor, desespero, ansiedade, depressão? Sobre o preenchimento do questionário: ext-1. (Alguém lhe ajudou a preencher este questionário? ext-2. (Quanto tempo você levou para preencher este questionário?

Item Likert e escala Likert

Item Likert é muito usado em testes/ escalas/ questionários/ inventários/ baterias. As distâncias entre as categorias de item Likert não são necessariamente iguais/ equidistantes. Portanto, item Likert é, no máximo, ordinal.

A soma de itens Likert (ordinais) produz a escala somatória Likert (intervalar), conforme Jamieson (2004) e Carifio & Perla (2008), respectivamente:

“Escalas de Likert [o autor refere-se a itens individuais Likert] situam-se no nível ordinal de mensuração.”

“…As escalas de Likert (conjuntos de itens), em oposição a itens individuais de Likert, não são de natureza ordinal, mas sim de natureza intervalar…”

Item Likert é distinto de item de diferencial semântico.

O item de Likert apresenta uma afirmação e solicita que o respondente indique o grau de concordância em uma escala ordenada (por exemplo, de discordo totalmente a concordo totalmente), geralmente em uma escala de cinco pontos. Mede o grau de concordância com uma proposição unidimensional, resultando em uma variável ordinal.

O item de diferencial semântico apresenta um conceito (por exemplo, tratamento) e pares de adjetivos opostos (como eficiente–ineficiente), geralmente em uma escala de sete pontos.

Friborg et al. (2006)

Tipo de correlação

Personality Project, Revelle

  • Dicotômica e intervalar
    • Correlação ponto-bisserial
      • Correlação de Pearson (r) para uma variável dicotômica discreta e outra intervalar (e.g.: ter ou não animal de estimação e tempo que passa fora de casa)
    • Correlação bisserial
      • Uma dicotômica com normal subjacente e outra intervalar (e.g.: gostar ou não de animal de estimação e tempo que passa fora de casa)
  • Ambas dicotômicas
    • Correlação tetracórica: dicotômicas com binormal subjacente (e.g.: gostar ou não de musica erudita e ser de direita ou de esquerda)
    • Correlação de Pearson ou coeficiente phi (φ): dicotômicas discretas (e.g.: passear com ou sem cão e ser ou não paulistano) (veja Phi coefficient (Wikipedia))

Um texto didático sobre as medidas de correlação está em Howell (2013, capítulo 10). Muito do texto de Dancey & Reidy (2019) foi baseado neste livro.

Correlações de Pearson, policórica e poliserial

Em R, podemos usar polycor::hetcor() para obter correlações Pearson, policórica e poliserial.

Exemplo: Escala de Felicidade

Usaremos o arquivo de Felicidade.rds, considerando todas as variáveis como intervalares, implementado em demo_Correlacao.R:

Dados <- data.frame(readxl::read_excel("Felicidade.xlsx"))
Dados[,] <- lapply(Dados[,],as.numeric)
saveRDS(Dados, "Felicidade.rds")
Dados <- readRDS("Felicidade.rds")
print(head(Dados))
print(tail(Dados))

# itens intervalares
Dados[,] <- lapply(Dados[,], as.numeric)

# Correlacoes heterogeneas
print(polycor::hetcor(Dados, use="complete.obs"), digits=2)
  Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10
1  1  2  4  2  4  1  3  2  2   1
2  1  3  4  1  1  1  3  3  3   1
3  1  4  3  1  1  1  4  4  4   1
4  1  2  3  1  1  1  1  1  1   1
5  1  3  3  1  1  1  3  3  1   1
6  1  4  4  1  1  1  4  4  4   1
    Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10
195  1  4  4  1  1  1  4  4  4   1
196  1  1  2  1  1  1  1  1  2   1
197  1  3  2  1  1  1  1  2  3   1
198  1  3  3  1  1  1  2  3  3   1
199  1  4  3  1  1  1  3  2  2   1
200  1  4  5  1  1  1  4  4  3   1

Two-Step Estimates

Correlations/Type of Correlation:
       Q1      Q2      Q3      Q4      Q5      Q6      Q7      Q8      Q9
Q1      1 Pearson Pearson Pearson Pearson Pearson Pearson Pearson Pearson
Q2  0.021       1 Pearson Pearson Pearson Pearson Pearson Pearson Pearson
Q3  0.046    0.43       1 Pearson Pearson Pearson Pearson Pearson Pearson
Q4   0.51  -0.054 -0.0013       1 Pearson Pearson Pearson Pearson Pearson
Q5   0.43  -0.051  -0.047    0.35       1 Pearson Pearson Pearson Pearson
Q6   0.46   0.059   0.024    0.64     0.4       1 Pearson Pearson Pearson
Q7  0.074    0.47    0.44  -0.059  -0.013  0.0099       1 Pearson Pearson
Q8  0.024    0.67     0.5  -0.029  -0.019   0.094    0.74       1 Pearson
Q9   0.12    0.43    0.46  -0.077 -0.0065  -0.011    0.62    0.58       1
Q10  0.49  0.0039  -0.039    0.53     0.4    0.62   0.097   0.037   0.061
        Q10
Q1  Pearson
Q2  Pearson
Q3  Pearson
Q4  Pearson
Q5  Pearson
Q6  Pearson
Q7  Pearson
Q8  Pearson
Q9  Pearson
Q10       1

Standard Errors:
       Q1    Q2    Q3    Q4    Q5    Q6    Q7    Q8    Q9
Q1                                                       
Q2  0.071                                                
Q3  0.071 0.058                                          
Q4  0.052 0.071 0.071                                    
Q5  0.058 0.071 0.071 0.062                              
Q6  0.056 0.071 0.071 0.042  0.06                        
Q7   0.07 0.055 0.057 0.071 0.071 0.071                  
Q8  0.071 0.039 0.053 0.071 0.071  0.07 0.032            
Q9   0.07 0.058 0.056  0.07 0.071 0.071 0.044 0.048      
Q10 0.054 0.071 0.071 0.051 0.059 0.044  0.07 0.071 0.071

n = 200 

P-values for Tests of Bivariate Normality:
          Q1       Q2      Q3       Q4       Q5       Q6      Q7      Q8
Q1                                                                      
Q2   6.4e-66                                                            
Q3   9.7e-41  8.5e-26                                                   
Q4   1.4e-79  1.5e-66   5e-41                                           
Q5   5.7e-78  9.1e-63 2.3e-37  7.6e-79                                  
Q6  1.4e-114 3.5e-101 1.8e-75 1.2e-110 2.8e-112                         
Q7   3.9e-43    2e-29 2.1e-05  4.6e-44    1e-40    6e-80                
Q8   7.5e-64  4.3e-47 1.3e-24  8.2e-65  1.4e-61 8.2e-100 9.4e-33        
Q9     5e-67  2.9e-47 5.6e-25  2.7e-66  3.8e-61 1.6e-101 1.1e-30 2.9e-46
Q10 1.8e-111  6.5e-99 7.8e-74   5e-112 6.6e-111 4.5e-144 2.4e-77 1.3e-97
         Q9
Q1         
Q2         
Q3         
Q4         
Q5         
Q6         
Q7         
Q8         
Q9         
Q10 1.2e-98

Os tipos de alguns itens podem ser alterados, para demonstração. Em demo_Correlacao_NomOrd.R alteramos os itens Q1 e Q2 para serem nominais e Q3 e Q4 para serem ordinais.

Dados$Q1 <- as.factor(Dados$Q1) # nominal
Dados$Q2 <- as.factor(Dados$Q2) # nominal
Dados$Q3 <- as.ordered(Dados$Q3) # ordinal
Dados$Q4 <- as.ordered(Dados$Q4) # ordinal

Ao executar o código, observe que a matriz de correlações muda (demo_Correlacao_NomOrd.R):

Dados <- readRDS("Felicidade.rds")
print(head(Dados))
print(tail(Dados))

# itens intervalares
Dados[,] <- lapply(Dados[,], as.numeric)
str(Dados)

# Alterando tipos de variável em algumas colunas
Dados$Q1 <- as.factor(Dados$Q1) # variavel nominal
Dados$Q2 <- as.factor(Dados$Q2) # variavel nominal
Dados$Q3 <- as.ordered(Dados$Q3) # variavel ordinal
Dados$Q4 <- as.ordered(Dados$Q4) # variavel ordinal
# confere os tipos
str(Dados)
print(sapply(Dados,class))

# matriz de correlacoes
print(polycor::hetcor(Dados, use="complete.obs"), digits=2)
  Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10
1  1  2  4  2  4  1  3  2  2   1
2  1  3  4  1  1  1  3  3  3   1
3  1  4  3  1  1  1  4  4  4   1
4  1  2  3  1  1  1  1  1  1   1
5  1  3  3  1  1  1  3  3  1   1
6  1  4  4  1  1  1  4  4  4   1
    Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10
195  1  4  4  1  1  1  4  4  4   1
196  1  1  2  1  1  1  1  1  2   1
197  1  3  2  1  1  1  1  2  3   1
198  1  3  3  1  1  1  2  3  3   1
199  1  4  3  1  1  1  3  2  2   1
200  1  4  5  1  1  1  4  4  3   1
'data.frame':   200 obs. of  10 variables:
 $ Q1 : num  1 1 1 1 1 1 1 1 1 1 ...
 $ Q2 : num  2 3 4 2 3 4 5 4 4 4 ...
 $ Q3 : num  4 4 3 3 3 4 5 5 5 5 ...
 $ Q4 : num  2 1 1 1 1 1 1 1 1 1 ...
 $ Q5 : num  4 1 1 1 1 1 1 1 1 1 ...
 $ Q6 : num  1 1 1 1 1 1 1 1 1 1 ...
 $ Q7 : num  3 3 4 1 3 4 5 4 5 4 ...
 $ Q8 : num  2 3 4 1 3 4 5 4 4 5 ...
 $ Q9 : num  2 3 4 1 1 4 5 4 4 4 ...
 $ Q10: num  1 1 1 1 1 1 1 1 1 1 ...
'data.frame':   200 obs. of  10 variables:
 $ Q1 : Factor w/ 5 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ Q2 : Factor w/ 5 levels "1","2","3","4",..: 2 3 4 2 3 4 5 4 4 4 ...
 $ Q3 : Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 4 4 3 3 3 4 5 5 5 5 ...
 $ Q4 : Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 2 1 1 1 1 1 1 1 1 1 ...
 $ Q5 : num  4 1 1 1 1 1 1 1 1 1 ...
 $ Q6 : num  1 1 1 1 1 1 1 1 1 1 ...
 $ Q7 : num  3 3 4 1 3 4 5 4 5 4 ...
 $ Q8 : num  2 3 4 1 3 4 5 4 4 5 ...
 $ Q9 : num  2 3 4 1 1 4 5 4 4 4 ...
 $ Q10: num  1 1 1 1 1 1 1 1 1 1 ...
$Q1
[1] "factor"

$Q2
[1] "factor"

$Q3
[1] "ordered" "factor" 

$Q4
[1] "ordered" "factor" 

$Q5
[1] "numeric"

$Q6
[1] "numeric"

$Q7
[1] "numeric"

$Q8
[1] "numeric"

$Q9
[1] "numeric"

$Q10
[1] "numeric"

Two-Step Estimates

Correlations/Type of Correlation:
       Q1         Q2         Q3         Q4         Q5         Q6         Q7
Q1      1 Polychoric Polychoric Polychoric Polyserial Polyserial Polyserial
Q2   0.07          1 Polychoric Polychoric Polyserial Polyserial Polyserial
Q3  0.046       0.48          1 Polychoric Polyserial Polyserial Polyserial
Q4   0.59     -0.052     -0.023          1 Polyserial Polyserial Polyserial
Q5   0.42     -0.048     -0.051       0.37          1    Pearson    Pearson
Q6    0.4      0.076      0.024       0.54        0.4          1    Pearson
Q7  0.078       0.51       0.46     -0.077     -0.013     0.0099          1
Q8  0.046       0.71       0.53     -0.027     -0.019      0.094       0.74
Q9   0.15       0.45       0.48      -0.12    -0.0065     -0.011       0.62
Q10  0.43      0.014     -0.038       0.46        0.4       0.62      0.097
            Q8         Q9        Q10
Q1  Polyserial Polyserial Polyserial
Q2  Polyserial Polyserial Polyserial
Q3  Polyserial Polyserial Polyserial
Q4  Polyserial Polyserial Polyserial
Q5     Pearson    Pearson    Pearson
Q6     Pearson    Pearson    Pearson
Q7     Pearson    Pearson    Pearson
Q8           1    Pearson    Pearson
Q9        0.58          1    Pearson
Q10      0.037      0.061          1

Standard Errors:
       Q1    Q2    Q3    Q4    Q5    Q6    Q7    Q8    Q9
Q1                                                       
Q2   0.09                                                
Q3  0.089 0.058                                          
Q4   0.07 0.092  0.09                                    
Q5  0.063 0.074 0.074 0.066                              
Q6  0.062 0.075 0.074 0.052  0.06                        
Q7  0.086 0.051 0.055 0.085 0.071 0.071                  
Q8  0.086 0.033 0.049 0.086 0.071  0.07 0.032            
Q9  0.086 0.055 0.052 0.085 0.071 0.071 0.044 0.048      
Q10 0.061 0.075 0.074 0.058 0.059 0.044  0.07 0.071 0.071

n = 200 

P-values for Tests of Bivariate Normality:
         Q1      Q2      Q3      Q4       Q5       Q6      Q7      Q8      Q9
Q1                                                                           
Q2     0.47                                                                  
Q3     0.84     0.3                                                          
Q4     0.13   0.012    0.87                                                  
Q5  2.3e-55 7.4e-36 1.6e-35 1.9e-56                                          
Q6  2.5e-94 2.5e-73 3.9e-73 4.5e-98 2.8e-112                                 
Q7  2.7e-16 1.4e-05 0.00064 4.4e-21    1e-40    6e-80                        
Q8  1.1e-36 5.3e-22 1.3e-21 2.3e-41  1.4e-61 8.2e-100 9.4e-33                
Q9  1.8e-39 2.4e-22 3.3e-22 9.8e-43  3.8e-61 1.6e-101 1.1e-30 2.9e-46        
Q10 7.1e-94 3.1e-71 2.3e-71 8.8e-94 6.6e-111 4.5e-144 2.4e-77 1.3e-97 1.2e-98

Usamos a função print(sapply(Dados,class)) para conferir o tipo adotado pelas variáveis.


Finalmente, em demo_Correlacao_Dicotomica.R, dicotomizamos alguns itens (Q3 em diante) com métodos variados, obtendo:

Dados <- readRDS("Felicidade.rds")

# itens intervalares
Dados[,] <- lapply(Dados[,],as.numeric)

# Alterando tipos de variável 
Dados$Q1 <- as.numeric(Dados$Q1) # variavel intervalar
Dados$Q2 <- as.ordered(Dados$Q2) # variavel ordinal
Dados$Q3 <- cut(Dados$Q3,breaks=c(0,2,5),labels=c(0,1))
Dados$Q3 <- ifelse(Dados$Q3=="0", Dados$Q3<-0, Dados$Q3<-1)
Dados$Q3 <- as.factor(Dados$Q3)
Dados$Q4 <- cut(Dados$Q4,breaks=c(0,2,5),labels=c(0,1))
Dados$Q4 <- ifelse(Dados$Q4=="0", Dados$Q4<-0, Dados$Q4<-1)
Dados$Q4 <- as.factor(Dados$Q4)
Dados$Q5 <- cut(Dados$Q5,breaks=c(0,2,5),labels=c(0,1))
Dados$Q5 <- ifelse(Dados$Q5=="0", Dados$Q5<-0, Dados$Q5<-1)
Dados$Q5 <- as.ordered(Dados$Q5)
Dados$Q6 <- cut(Dados$Q6,breaks=c(0,2,5),labels=c(0,1))
Dados$Q6 <- ifelse(Dados$Q6=="0", Dados$Q6<-0, Dados$Q6<-1)
Dados$Q6 <- as.ordered(Dados$Q6)
Dados$Q7 <- cut(Dados$Q7,breaks=c(0,2,5),labels=c(0,1))
Dados$Q7 <- ifelse(Dados$Q7=="0", Dados$Q7<-0, Dados$Q7<-1)
Dados$Q7 <- as.numeric(Dados$Q7)
Dados$Q8 <- cut(Dados$Q8,breaks=c(0,2,5),labels=c(0,1))
Dados$Q8 <- ifelse(Dados$Q8=="0", Dados$Q8<-0, Dados$Q8<-1)
Dados$Q8 <- as.numeric(Dados$Q8)
Dados$Q9 <- cut(Dados$Q9,breaks=c(0,2,5),labels=c(0,1))
Dados$Q9 <- ifelse(Dados$Q9=="0", Dados$Q9<-0, Dados$Q9<-1)
Dados$Q9 <- as.logical(Dados$Q9)
Dados$Q10 <- cut(Dados$Q10,breaks=c(0,2,5),labels=c(0,1))
Dados$Q10 <- ifelse(Dados$Q10=="0", Dados$Q10<-0, Dados$Q10<-1)
Dados$Q10 <- as.logical(Dados$Q10)
# confere os tipos
str(Dados)
print(sapply(Dados,class))

# matriz de correlacoes
print(polycor::hetcor(Dados, use="complete.obs"), digits=2)
'data.frame':   200 obs. of  10 variables:
 $ Q1 : num  1 1 1 1 1 1 1 1 1 1 ...
 $ Q2 : Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 2 3 4 2 3 4 5 4 4 4 ...
 $ Q3 : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
 $ Q4 : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
 $ Q5 : Ord.factor w/ 2 levels "0"<"1": 2 1 1 1 1 1 1 1 1 1 ...
 $ Q6 : Ord.factor w/ 2 levels "0"<"1": 1 1 1 1 1 1 1 1 1 1 ...
 $ Q7 : num  1 1 1 0 1 1 1 1 1 1 ...
 $ Q8 : num  0 1 1 0 1 1 1 1 1 1 ...
 $ Q9 : logi  FALSE TRUE TRUE FALSE FALSE TRUE ...
 $ Q10: logi  FALSE FALSE FALSE FALSE FALSE FALSE ...
$Q1
[1] "numeric"

$Q2
[1] "ordered" "factor" 

$Q3
[1] "factor"

$Q4
[1] "factor"

$Q5
[1] "ordered" "factor" 

$Q6
[1] "ordered" "factor" 

$Q7
[1] "numeric"

$Q8
[1] "numeric"

$Q9
[1] "logical"

$Q10
[1] "logical"

Two-Step Estimates

Correlations/Type of Correlation:
       Q1         Q2         Q3         Q4         Q5         Q6         Q7
Q1      1 Polyserial Polyserial Polyserial Polyserial Polyserial    Pearson
Q2  0.025          1 Polychoric Polychoric Polychoric Polychoric Polyserial
Q3   0.09       0.53          1 Polychoric Polychoric Polychoric Polyserial
Q4   0.49      -0.12     -0.056          1 Polychoric Polychoric Polyserial
Q5   0.33     -0.037      0.065       0.41          1 Polychoric Polyserial
Q6   0.54       0.02        0.3        0.8       0.43          1 Polyserial
Q7  0.037       0.33        0.4     -0.043      -0.21      -0.14          1
Q8  0.014       0.52       0.37      -0.11      -0.23        0.1       0.61
Q9   0.34       0.45       0.49     -0.056     -0.015      -0.15       0.42
Q10  <NA>       -0.1       0.25       0.82       0.38       0.91    -0.0023
            Q8         Q9        Q10
Q1     Pearson Polyserial Polyserial
Q2  Polyserial Polychoric Polychoric
Q3  Polyserial Polychoric Polychoric
Q4  Polyserial Polychoric Polychoric
Q5  Polyserial Polychoric Polychoric
Q6  Polyserial Polychoric Polychoric
Q7     Pearson Polyserial Polyserial
Q8           1 Polyserial Polyserial
Q9        0.48          1 Polychoric
Q10     -0.048       0.25          1

Standard Errors:
       Q1    Q2    Q3    Q4    Q5    Q6    Q7    Q8   Q9
Q1                                                      
Q2  0.075                                               
Q3   0.11 0.082                                         
Q4  0.068  0.11  0.15                                   
Q5  0.083  0.11  0.16  0.14                             
Q6  0.076  0.14  0.21 0.088  0.17                       
Q7  0.071 0.064 0.071  0.11 0.094  0.12                 
Q8  0.071  0.05 0.075   0.1 0.095  0.15 0.045           
Q9   0.12 0.087  0.11  0.15  0.16  0.18 0.069 0.064     
Q10  <NA>  0.15  0.22 0.087  0.18 0.057  0.14  0.14 0.22

n = 200 

P-values for Tests of Bivariate Normality:
          Q1      Q2      Q3      Q4      Q5      Q6       Q7      Q8   Q9
Q1                                                                        
Q2   1.7e-38                                                              
Q3     3e-44    0.42                                                      
Q4   9.6e-45    0.01    <NA>                                              
Q5   2.4e-44    0.44    <NA>    <NA>                                      
Q6   6.2e-49    0.39    <NA>    <NA>    <NA>                              
Q7  2.2e-114 2.6e-70 3.1e-77 6.3e-77 5.4e-77 6.1e-77                      
Q8  1.3e-108 2.6e-65 3.5e-71 4.3e-71   4e-71 4.3e-71 1.3e-136             
Q9   1.3e-45     0.9    <NA>    <NA>    <NA>    <NA>  2.7e-77 3.3e-71     
Q10     <NA>    0.62    <NA>    <NA>    <NA>    <NA>  6.4e-77 4.5e-71 <NA>

Pode ser difícil visualizar as matrizes de correlação, especialmente quando há maior número de itens. A função GGally::ggcorr pode ajudar.

Exemplo: WHOQOL-BREF

No exemplo do WHOQOL-BREF, os dados dos estudos do Projeto VERAS estão disponíveis em:

Dados$Sexo <- NULL

A análise de correlação está implementada em demo_ggcorr_WHOQOL.R, tratando os itens como intervalares:

Dados <- readRDS("WHOQOL.rds")

r <- qgraph::cor_auto(Dados[-1], 
                      detectOrdinal=FALSE, 
                      forcePD=TRUE, 
                      missing="fiml")
print (
  GGally::ggcorr(data=NULL,
                 name="WHOQOL-BREF: intervalar",
                 cor_matrix=r,
                 geom="tile",
                 min_size=0,
                 max_size=10, 
                 nbreaks=6,
                 digits=2,
                 label=FALSE,
                 label_round=2,
                 label_size=4)
)
Registered S3 method overwritten by 'GGally':
  method from   
  +.gg   ggplot2

O mesmo, convertendo os itens para ordinais está implementado em demo_ggcorr_WHOQOL_ord.R:

Dados <- readRDS("WHOQOL.rds")

ro <- qgraph::cor_auto(Dados[-1], 
                       detectOrdinal=TRUE, 
                       forcePD=TRUE)
print (
  GGally::ggcorr(data=NULL,
                 name="WHOQOL-BREF: ordinal",
                 cor_matrix=ro,
                 geom="tile",
                 min_size=0,
                 max_size=10, 
                 nbreaks=6,
                 digits=2,
                 label=FALSE,
                 label_round=2,
                 label_size=4)
)
Variables detected as ordinal: Q3; Q4; Q5; Q6; Q7; Q8; Q9; Q10; Q11; Q12; Q13; Q14; Q15; Q16; Q17; Q18; Q19; Q20; Q21; Q22; Q23; Q24; Q25; Q26

Recorde a proposta para o WHOQOL-BREF (Manual do Projeto VERAS (2011)):

DExistem funções R que procuram agrupar itens ordinais. Por exemplo, demo_ggcorr_WHOQOL_ord2.R, utilizando alguns métodos (e.g., graph=“glasso” (correlação policórica parcial) e graph=“cor” (correlação policórica de ordem zero) no código):

Dados <- readRDS("WHOQOL.rds")

ro <- qgraph::cor_auto(Dados[-1], 
                       detectOrdinal=TRUE, 
                       forcePD=TRUE)
n <- nrow(Dados)

corrplot::corrplot(corr=ro,
                   is.corr=TRUE,
                   #method="number",
                   diag=FALSE,
                   title="Polychoric Correlation",
                   order="hclust",
                   hclust.method="ward.D",
                   tl.col="black",
                   addrect=4)

qgraph::qgraph(ro, 
               graph="cor", 
               sampleSize=n,
               minimum="sig",
               bonf=TRUE,
               layout="spring", 
               shape="rectangle",
               vsize=5,
               label.cex=2,
               labels=colnames(ro),
               label.prop=0,
               theme="gray",
               title="WHOQOL-BREF (polychoric cor)",
               details=FALSE)

qgraph::qgraph(ro, 
               graph="glasso", 
               sampleSize=n,
               layout="spring",
               shape="rectangle",
               vsize=5,
               label.cex=2,
               labels=colnames(ro),
               label.prop=0,
               theme="gray",
               title="WHOQOL-BREF (polychoric glasso)", 
               details=FALSE)

itens <- paste0("Q", 3:26)

# 2) Correlação policórica e hclust
Rpoly <- psych::polychoric(Dados[, itens, drop = FALSE])$rho
D <- as.dist(1 - Rpoly)
hc <- hclust(D, method = "ward.D2")

# 3) Clusters (k=4) e nomes
cl <- cutree(hc, k = 4)
names(cl) <- colnames(Dados[, itens, drop = FALSE])

# 4) Domínios a priori (WHOQOL-BREF/Veras)
dom_ap <- c(
  "Físico","Físico",                       # Q3,Q4
  "Psicológico","Psicológico","Psicológico", # Q5,Q6,Q7
  "Ambiente","Ambiente",                   # Q8,Q9
  "Físico",                                # Q10
  "Psicológico",                           # Q11
  "Ambiente","Ambiente","Ambiente",        # Q12,Q13,Q14
  "Físico","Físico","Físico","Físico",     # Q15–Q18
  "Psicológico",                           # Q19
  "Relações Sociais","Relações Sociais","Relações Sociais", # Q20–Q22
  "Ambiente","Ambiente","Ambiente",        # Q23–Q25
  "Psicológico"                            # Q26
)
names(dom_ap) <- itens

# 5) Rótulo de cluster = maioria do domínio a priori dentro do cluster
tab <- table(Cluster = cl, Apriori = dom_ap[names(cl)])
lab_cluster <- apply(tab, 1, function(r) names(which.max(r)))
dom_post <- lab_cluster[as.character(cl)]
names(dom_post) <- names(cl)

# 6) Significado conciso por item
sig <- c(
  Q3  = "dor limita atividades",
  Q4  = "dependência de tratamento",
  Q5  = "aproveita a vida",
  Q6  = "sentido da vida",
  Q7  = "capacidade de concentração",
  Q8  = "sensação de segurança",
  Q9  = "qualidade do ambiente físico",
  Q10 = "energia disponível",
  Q11 = "aceitação da aparência",
  Q12 = "recursos financeiros suficientes",
  Q13 = "acesso à informação",
  Q14 = "oportunidades de lazer",
  Q15 = "locomoção",
  Q16 = "satisfação com sono",
  Q17 = "satisfação com atividades diárias",
  Q18 = "satisfação com capacidade trabalho",
  Q19 = "autoestima/satisfação pessoal",
  Q20 = "satisfação com relações pessoais",
  Q21 = "satisfação com vida sexual",
  Q22 = "satisfação com apoio social",
  Q23 = "satisfação com moradia",
  Q24 = "satisfação com acesso à saúde",
  Q25 = "satisfação com transporte",
  Q26 = "freq sentimentos negativos"
)

# 7) Tabela final
tabela <- data.frame(
  "Item" = names(cl),
  "Significado" = unname(sig[names(cl)]),
  "Domínio a priori" = unname(dom_ap[names(cl)]),
  "Domínio a posteriori" = unname(dom_post[names(cl)]),
  stringsAsFactors = FALSE,
  check.names = FALSE
)

# Ordenar e exibir
tabela <- tabela[order(tabela$"Domínio a priori", tabela$"Item"), ]
print(tabela, row.names = FALSE)
Variables detected as ordinal: Q3; Q4; Q5; Q6; Q7; Q8; Q9; Q10; Q11; Q12; Q13; Q14; Q15; Q16; Q17; Q18; Q19; Q20; Q21; Q22; Q23; Q24; Q25; Q26

 Item                        Significado Domínio a priori Domínio a posteriori
  Q12   recursos financeiros suficientes         Ambiente             Ambiente
  Q13                acesso à informação         Ambiente             Ambiente
  Q14             oportunidades de lazer         Ambiente     Relações Sociais
  Q23             satisfação com moradia         Ambiente             Ambiente
  Q24      satisfação com acesso à saúde         Ambiente             Ambiente
  Q25          satisfação com transporte         Ambiente             Ambiente
   Q8              sensação de segurança         Ambiente               Físico
   Q9       qualidade do ambiente físico         Ambiente             Ambiente
  Q10                 energia disponível           Físico               Físico
  Q15                          locomoção           Físico             Ambiente
  Q16                satisfação com sono           Físico               Físico
  Q17  satisfação com atividades diárias           Físico               Físico
  Q18 satisfação com capacidade trabalho           Físico               Físico
   Q3              dor limita atividades           Físico               Físico
   Q4          dependência de tratamento           Físico               Físico
  Q11             aceitação da aparência      Psicológico               Físico
  Q19      autoestima/satisfação pessoal      Psicológico               Físico
  Q26         freq sentimentos negativos      Psicológico               Físico
   Q5                   aproveita a vida      Psicológico     Relações Sociais
   Q6                    sentido da vida      Psicológico               Físico
   Q7         capacidade de concentração      Psicológico               Físico
  Q20   satisfação com relações pessoais Relações Sociais     Relações Sociais
  Q21         satisfação com vida sexual Relações Sociais     Relações Sociais
  Q22        satisfação com apoio social Relações Sociais     Relações Sociais

Aqui, pela primeira vez, aparece uma tentativa de agrupamento dos itens.

Recorde a proposta para o WHOQOL-BREF (Manual do Projeto VERAS (2011)):

No gráfico com o método glasso, notamos alguma proximidade entre questões propostas para o mesmo domínio, mas nem sempre. Quando mais grossas são as linhas e mais aproximadas as questões, maior a ligação.

As três questões negativas, Q3 e Q4 (ambas tidas como do domínio físico do WHOQOL, F) e Q26 (psicológico, P) estão próximas, mas a ligação entre Q3 e Q4 é mais forte.

As questões do domínio de ligações sociais (S), Q20, Q21 e Q22, aparecem nesta (e em várias análise abaixo) próximas entre si. Q20 é a mais próxima de Q5 do domínio psicológico. São elas:

      1. Quão satisfeito(a) você está com suas relações pessoais (amigos, parentes, conhecidos, colegas)?
      1. O quanto você aproveita a vida?

Q22 liga-se a Q23 e Q24 (ambiente, A) e, mais fracamente, com Q8 (A) e Q19 (P), mas têm similaridade, aparentemente relacionadas a condições de apoio e infraestrutura:

      1. Quão satisfeito(a) você está com o apoio que você recebe de seus amigos?
      1. Quão satisfeito(a) você está com as condições do local onde mora?
      1. Quão satisfeito(a) você está com o seu acesso aos serviços de saúde?
      1. Quão seguro(a) você se sente em sua vida diária?
      1. Quão satisfeito(a) você está consigo mesmo?

Q21 liga-se principalmente a Q11 (psicológico), ambas obviamente conectadas aos relacionamentos sexuais:

      1. Quão satisfeito(a) você está com sua vida sexual?
      1. Você é capaz de aceitar sua aparência física?

O conjunto Q25, Q23, Q24, Q9, Q12 e Q13 são do domínio ambiente, mas a Q15 (do domínio físico), aparece fortemene conectada a Q25. Curiosamente, são ambas ligadas a deslocamento:

      1. Quão bem você é capaz de se locomover?
      1. Quão satisfeito(a) você está com o seu meio de transporte?

Outra ligação forte aparece entre Q5 (psicológico) e Q14 (ambiente). Seus conteúdos são ligados ao lazer:

      1. O quanto você aproveita a vida?
      1. Em que medida você tem oportunidades de atividade de lazer?

Q5 (psicológico) está na ponta do outro conjunto envolvendo Q6, Q19 e Q7 (também do domínio psicológico), Q17, Q18 (físico, fortemente ligadas), Q10 e Q16 (também do físico) e Q8 (ambiente). O ambiente físico, neste agrupamento, está todo representado com a exceção da Q15 que aproximou-se da Q25 por tratar de deslocamento e das negativas Q3 e Q4. Observe seus conteúdos na ordem de proximidade:

      1. O quanto você aproveita a vida?
      1. Em que medida você acha que a sua vida tem sentido?
      1. Quão satisfeito(a) você está consigo mesmo?
      1. Quão seguro(a) você se sente em sua vida diária?
      1. Quão satisfeito(a) você está com sua capacidade de desempenhar as atividades do seu dia-a-dia?
      1. Quão satisfeito(a) você está com sua capacidade para o trabalho?
      1. Quão satisfeito(a) você está com o seu sono?
      1. Você tem energia suficiente para seu dia-a-dia?
      1. O quanto você consegue se concentrar?

Há uma clara ordenação na sequência, iniciando com o aproveitamento da vida e seguindo para satisfação, segurança, atividades diárias, descanso e recuperação. Parece muito com a ideia de “felicidade intrínseca” do outro exemplo: são questões relacionadas com percepções que dependem da própria pessoa.

É supreendente que a análise dependa apenas da matriz de correlações, sem nenhuma análise do conteúdo das perguntas. Ainda assim, agrupa itens que de assuntos similares.

As discordâncias e similaridades entre esta análise e a proposta original da WHO ocorrerá em várias análises adiante. O leitor é convidado a observar os resultados, sob esta perspectiva, quaisquer que sejam as análises adotadas.

Uma outra análise descritiva interessante está implementada em demo_likert_WHOQOL.R comportaram-se da seguinte forma:

suppressMessages(suppressWarnings(
  invisible(Sys.setlocale("LC_ALL", "pt_BR.UTF-8"))
))
Dados <- readRDS("WHOQOL.rds")

cat("\nItens ordinais\n")
Dados[-1] <- lapply(Dados[-1], as.ordered)
cat("\n\t- verificando com class:\n")
print(sapply(Dados[-1],class))
cat("\n\t- verificando com str:\n")
print(str(Dados[-1]))

# esta funcao precisa que todos os itens tenham o mesmo numero de niveis
# descritiva com o pacote likert
cat("\nPacote likert\n")
cat("\nNúmero de níveis do item\n")
print(sapply(Dados[-1], function(x) nlevels(x)))

# usa a funcao preparatoria
lkt <- likert::likert(Dados[-1])

cat("\nFrequência das respostas\n")
print(lkt, digits=1)
print(plot(lkt, 
           type="heat", 
           low.color="lightgray", 
           high.color="darkgray"))

cat("\nFrequência das respostas\n")
print(summary(lkt), digits=2)
print(plot(lkt, 
           low.color="lightgray", 
           high.color="black"))

Itens ordinais

    - verificando com class:
     Q3        Q4        Q5        Q6        Q7        Q8        Q9       
[1,] "ordered" "ordered" "ordered" "ordered" "ordered" "ordered" "ordered"
[2,] "factor"  "factor"  "factor"  "factor"  "factor"  "factor"  "factor" 
     Q10       Q11       Q12       Q13       Q14       Q15       Q16      
[1,] "ordered" "ordered" "ordered" "ordered" "ordered" "ordered" "ordered"
[2,] "factor"  "factor"  "factor"  "factor"  "factor"  "factor"  "factor" 
     Q17       Q18       Q19       Q20       Q21       Q22       Q23      
[1,] "ordered" "ordered" "ordered" "ordered" "ordered" "ordered" "ordered"
[2,] "factor"  "factor"  "factor"  "factor"  "factor"  "factor"  "factor" 
     Q24       Q25       Q26      
[1,] "ordered" "ordered" "ordered"
[2,] "factor"  "factor"  "factor" 

    - verificando com str:
'data.frame':   2684 obs. of  24 variables:
 $ Q3 : Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 1 1 1 3 1 1 2 1 1 1 ...
 $ Q4 : Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 1 1 1 1 1 1 5 2 2 2 ...
 $ Q5 : Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 3 4 2 2 5 5 3 2 3 5 ...
 $ Q6 : Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 4 4 3 4 5 5 5 3 4 5 ...
 $ Q7 : Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 2 3 3 4 4 4 3 4 3 5 ...
 $ Q8 : Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 4 3 3 3 5 4 3 4 2 5 ...
 $ Q9 : Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 4 3 2 3 4 3 3 2 3 4 ...
 $ Q10: Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 3 3 3 3 4 5 3 4 2 4 ...
 $ Q11: Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 4 2 5 3 5 3 5 4 3 3 ...
 $ Q12: Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 4 5 3 2 5 5 3 3 3 4 ...
 $ Q13: Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 4 5 5 4 5 5 4 4 4 4 ...
 $ Q14: Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 4 3 2 3 4 4 1 3 4 5 ...
 $ Q15: Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 5 5 2 5 5 5 5 5 4 5 ...
 $ Q16: Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 2 2 2 4 4 3 2 1 2 4 ...
 $ Q17: Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 3 2 3 2 5 4 2 4 3 4 ...
 $ Q18: Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 4 2 3 3 4 4 2 4 3 5 ...
 $ Q19: Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 3 2 3 2 5 4 4 3 3 4 ...
 $ Q20: Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 4 3 4 1 5 3 3 2 3 5 ...
 $ Q21: Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 5 3 3 1 5 2 2 3 2 3 ...
 $ Q22: Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 4 3 4 1 5 3 5 2 3 4 ...
 $ Q23: Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 4 2 1 3 5 5 4 5 4 4 ...
 $ Q24: Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 5 2 2 2 3 5 5 4 4 5 ...
 $ Q25: Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 2 4 2 2 4 4 5 2 2 4 ...
 $ Q26: Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 3 4 2 2 1 2 4 3 3 2 ...
NULL

Pacote likert

Número de níveis do item
 Q3  Q4  Q5  Q6  Q7  Q8  Q9 Q10 Q11 Q12 Q13 Q14 Q15 Q16 Q17 Q18 Q19 Q20 Q21 Q22 
  5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5 
Q23 Q24 Q25 Q26 
  5   5   5   5 

Frequência das respostas
   Item    1  2  3  4    5
1    Q3 42.7 34 17  6  0.6
2    Q4 44.4 32 14  8  1.6
3    Q5  1.2 18 44 34  3.9
4    Q6  1.0  4 17 44 34.2
5    Q7  1.6 17 44 34  3.8
6    Q8  1.5 12 41 39  5.7
7    Q9  2.0 14 41 38  5.3
8   Q10  1.6 13 55 26  4.4
9   Q11  3.0 12 32 37 16.1
10  Q12  3.5 16 43 24 14.1
11  Q13  0.3  4 24 51 21.3
12  Q14  1.9 29 45 19  5.0
13  Q15  0.6  3  9 32 55.7
14  Q16  9.5 37 25 24  4.4
15  Q17  3.6 24 29 37  5.6
16  Q18  3.2 22 29 40  4.7
17  Q19  2.9 19 28 43  7.2
18  Q20  3.1 17 21 46 13.6
19  Q21 10.1 18 24 32 16.6
20  Q22  2.6  9 23 48 16.9
21  Q23  1.9  8 11 43 35.6
22  Q24  3.2 11 21 41 23.3
23  Q25  8.3 17 15 28 31.8
24  Q26  5.6 44 24 19  7.9


Frequência das respostas
   Item  low neutral high mean   sd
13  Q15  3.5     8.7 87.8  4.4 0.81
21  Q23 10.0    11.4 78.6  4.0 0.98
4    Q6  4.8    16.7 78.5  4.1 0.86
11  Q13  4.0    23.8 72.3  3.9 0.78
20  Q22 11.6    23.1 65.3  3.7 0.94
22  Q24 14.6    21.0 64.4  3.7 1.05
23  Q25 25.1    15.0 59.9  3.6 1.31
18  Q20 19.9    20.5 59.6  3.5 1.02
9   Q11 14.6    31.9 53.6  3.5 0.99
17  Q19 22.2    27.5 50.3  3.3 0.96
19  Q21 28.0    23.8 48.2  3.3 1.22
6    Q8 14.0    40.8 45.2  3.4 0.83
16  Q18 25.6    29.3 45.1  3.2 0.95
7    Q9 15.9    41.0 43.0  3.3 0.85
15  Q17 28.0    28.9 43.0  3.2 0.98
10  Q12 19.0    43.2 37.8  3.3 1.00
5    Q7 18.1    44.2 37.7  3.2 0.82
3    Q5 18.9    43.6 37.5  3.2 0.82
8   Q10 14.9    54.8 30.2  3.2 0.77
14  Q16 46.7    25.2 28.1  2.8 1.05
24  Q26 49.9    23.7 26.5  2.8 1.06
12  Q14 31.1    45.3 23.6  3.0 0.87
2    Q4 76.6    14.2  9.2  1.9 1.01
1    Q3 76.5    16.6  6.9  1.9 0.94

A função preparatória likert::likert necessita de dados ordinais (em data.frame) e que todos os itens tenham o mesmo número de níveis observados. Note que os itens foram apresentados em outra ordem, pois esta função tenta agrupá-las de acordo com seus padrões de freqências de respostas. A ordem que sugere também não coincide completamente (como sempre) com aquela proposta pela OMS para o WHOQOL.

Recorde a proposta para o WHOQOL-BREF (Manual do Projeto VERAS (2011)):

Finalmente, um dendrograma é produzido pela análise hierárquica de grupos (hierarchical cluster analysis) usando pvclust::pvclust com itens intervalares. Ele apresenta outra classificação de itens.

Dados <- readRDS("WHOQOL.rds")

Dados[,-1] <- lapply(Dados[,-1],as.numeric)
res.pv <- pvclust::pvclust(Dados[-1], 
                           method.dist="correlation",
                           method.hclust="ward.D2", 
                           quiet=TRUE,
                           nboot=5e2)
plot(res.pv)

Recorde a proposta para o WHOQOL-BREF (Manual do Projeto VERAS (2011)):

Análise Fatorial Exploratória (EFA)

Padrão de correlações

Este capítulo é uma continuação de Análise de Correlação. Naquele capítulo, analisamos as correlações de Pearson apenas de duas variáveis intervalares com e sem variáveis intervalares de controle. Aqui analisaremos matrizes de correlações e de covariâncias entre pares de variáveis simultaneamente. Uma forma inicial para reconhecer padrões nestas matrizes é por inspeção visual. No entanto, à medida que o número de variáveis aumenta, a inspeção visual é impraticável.

Análise fatorial foi inicialmente utilizada para estudar a estrutura da mente e inteligência (1904), e mais tarde da personalidade. Lida com padrões de correlações das variáveis manifestas (itens) da escala de avaliação, de forma que itens mais correlacionados entre si e menos correlacionados com outros itens da escala formam um fator comum.

O objetivo é desenvolver algoritmos que nos auxiliem a reconhecer padrões presentes nas matrizes. Tais padrões são variáveis latentes, que chamaremos de fatores comuns (não confundir com outros fatores ou com variáveis do tipo factor da análise de variância). O primeiro passo é encontrar quantos são os fatores comuns subjacentes à configuração adotada pelas matrizes.

Esta análise fatorial tem duas partes:

  • Análise fatorial exploratória (EFA, Exploratory Factor Analysis)
  • Análise fatorial confirmatória (CFA, Confirmatory Factor Analysis)

Neste texto, abordaremos EFA.

Dancey & Reidy (2019) apresentam o seguinte exemplo no item 6.3:

Por inspeção visual, detectam-se dois fatores comuns (maiores correlações absolutas em negrito). Depois que os fatores são encontrados, podemos atribuir nomes significativos para eles, tais como “satisfação social (extrínseca)” e “satisfação pessoal (intrínseca)” neste exemplo.

Classificação do modelo psicométrico

Veremos, adiante, que é crítico para EFA construir a matriz de correlações adequada, o que é feito pela função polycor::hetcor() exemplificada anteriormente, que tem algoritmos robustos para escolher o tipo de correlação e sua computação.

Fator comum é variável latente, não observável. Por exemplo:

As variáveis observáveis (manifestas) presentes no banco de dados são runny nose (coriza), cough (tosse), sneeze (espirro) e sore throat (dor de garganta). O fator comum, denominado cold (resfriado), é uma variável latente hipotetizada como causa subjacente desses sintomas.

Como o resfriado (fator comum) é tido como “causa” dos sintomas (itens), este modelo é chamado de reflexivo.

Variável latente é uma representação de qualquer fenômeno não diretamente observável ou conceito para o qual não há método operacional para mensuração direta.

As variáveis latentes são variáveis intervalares.

Variáveis do modelo psicométrico

  • Variável manifesta (\(\tau\))
    • Variável mensurável diretamente
    • Variável aleatória observável
    • Variável observável
    • Indicador
    • Sintoma
    • Sinal
    • Item
  • Variável latente (\(\theta\))
    • Variável mensurável indiretamente
    • Variável aleatória não observável
    • Variável não observável
    • Variável hipotética
    • Variável oculta
    • Traço latente
    • Fator comum
    • Fator-fonte
    • Habilidade
    • Construto
    • Dimensão
    • Domínio
    • Aptidão
    • Fator

Exemplos de variável latente

  • Inteligência
  • Bem-estar
  • Felicidade
  • Satisfação
  • Autocontrole
  • Depressão
  • Esgotamento (burnout)
  • Proficiência em matemática
  • Tamanho total do animal

Quilograma

Conforme Revista FAPESP: Definição de massa,

“A constante de Planck (\(6.62607004 \cdot 10^{-34}\) m2kg/s) deve substituir o cilindro metálico usado desde 1889 como referência internacional do quilograma. O quilograma é a última das sete principais unidades internacionais de medida ainda aferida com base em um objeto – a mensuração das outras já é feita há anos por meio de constantes universais da Física. Com a alteração, que pode valer a partir de 2018, a aferição deve ser tornar mais confiável, o que tem importância óbvia para Física – o quilograma entra na definição de outras 20 unidades de medida – e para o comércio internacional. O primeiro desses métodos consiste em definir o valor da constante de Planck a partir da contagem dos átomos de uma esfera de silício puro com massa de 1 quilograma. A contagem dos átomos dessa esfera permite calcular o valor da constante de Avogadro, que indica o número de partículas em uma determinada massa, e, posteriormente, chegar ao valor da constante de Planck. Contando os átomos dessas esferas especiais – há apenas duas no mundo, cuidadosamente produzidas a um custo de US$ 3,2 milhões cada –, os pesquisadores do Projeto Internacional Avogadro já conseguiram medir o valor da constante de Avogadro, e consequentemente da de Planck, com uma imprecisão de 30 partes por bilhão.”

Tamanho geral do pássaro?


Resumo: Comparamos diversas medidas univariadas e multivariadas de tamanho corporal usadas comumente em pesquisas ornitológicas, incluindo oito medidas multivariadas (obtidas por análises de componentes principais (PCA)), além do comprimento do crânio, ulna, tibiotarso, asa e massa. As análises basearam-se em 26 medições de três machos e três fêmeas selecionados aleatoriamente de pardal da savana (Passerculus sandwichensis) provenientes de 53 localidades geográficas diferentes dentro da distribuição da espécie. Seis dos oito componentes principais forneceram essencialmente a mesma informação sobre o tamanho corporal. As análises baseadas na matriz de variância-covariância dos dados brutos ou transformados em logaritmo geraram eixos que variaram mais em relação às demais estimativas multivariadas de tamanho. Entre as medidas univariadas, comprimento da ulna, comprimento da asa e massa forneceram informações que divergiram das medidas multivariadas de tamanho corporal total. A massa representa melhor o tamanho geral (isto é, PC I) do que o comprimento da asa; porém, devido à variação nas condições reprodutivas, a massa é uma medida muito melhor em machos do que em fêmeas. O comprimento da asa não é uma medida representativa do tamanho corporal. Como cada análise de componentes principais fornece essencialmente a mesma informação sobre o tamanho corporal no PC I, encorajamos os pesquisadores a escolher entre as diversas abordagens de acordo com seus objetivos analíticos, e não com base apenas na simplicidade metodológica ou utilidade geral.”

Saúde e doença

Definição clássica da OMS, Constituição da OMS, 1946:

“Saúde é um estado de completo bem-estar físico, mental e social, e não apenas a ausência de doença ou enfermidade.”

Então, o que é doença?

Não encontramos definição para doença da OMS, mas existe uma extensa classificação, o CID-11 (https://www.who.int/standards/classifications/classification-of-diseases).

Conforme Segre & Ferraz (1997),

“A Organização Mundial de Saúde (OMS) define saúde não apenas como a ausência de doença, mas como a situação de perfeito bem-estar físico, mental e social. Essa definição, até avançada para a época em que foi realizada, é, no momento, irreal, ultrapassada e unilateral.”

Saúde é homeostase

As práticas médicas consistem num conjunto de procedimentos para manter e restabelecer a homeostase do organismo humano individual e coletivo.

Homeostasia ou homeostase, a partir dos termos gregos homeo, “similar” ou “igual”, e stasis, “estático”, é a condição de relativa estabilidade da qual o organismo necessita para realizar suas funções adequadamente para o equilíbrio do corpo. É a propriedade de um sistema aberto, especialmente dos seres vivos, de regular o seu ambiente interno, de modo a manter uma condição estável mediante múltiplos ajustes de equilíbrio dinâmico, controlados por mecanismos de regulação inter-relacionados.

A homeostase é uma das características fundamentais dos seres vivos. É a manutenção do ambiente interno dentro de limites toleráveis. O ambiente interno de um organismo vivo consiste basicamente nos seus fluidos corporais. Estes incluem o plasma sanguíneo, a linfa, e vários outros fluidos inter e intracelulares. A manutenção de condições estáveis nestes fluidos é essencial para os seres vivos, uma vez que a ausência de tais condições é prejudicial ao material genético.

A capacidade de sustentar a vida dos fluidos do corpo humano é afetada por todo um leque de fatores, como a temperatura, a salinidade, o pH ou as concentrações de nutrientes, como a glicose, vários íons, oxigênio e resíduos, como o dióxido de carbono e a ureia. Dado que estes fatores afetam as reações químicas que mantêm o corpo vivo, este inclui mecanismos fisiológicos para os manter dentro dos limites desejáveis.

Portanto, o que é doença?

  • Doença:
    • Do latim dolentia (padecimento)
  • Disease
    • Perspectiva médica
    • Condição médica associada a sintomas e sinais observáveis ou não * Não é resultado de ferimentos físicos
    • Disfunção do processo homeostático
    • Qualquer condição em humanos que cause dor, disfunção, angústia, estigma social, morte, invalidez, síndrome, intoxicação, envenenamento, incapacidade de realizar tarefas do dia a dia, comportamentos reprovados socialmente ou sintomas isolados
    • A morte por doença é denominada por causas naturais: infecciosa, deficiência, genética (hereditária ou não) e fisiológica
    • Doença física e específica
      • Doença infecciosa: os agentes etiológicos são patógenos (vírus, bactérias, fungos, protozoários, vermes etc)
      • Doença disfuncional: os agentes etiológicos são disfunções internas (imunodeficiência ou hipersensibilidade – alergia)
      • Doença carencial: os agentes etiológicos são deficiências de absorção de vitaminas e minerais (hipovitaminose e avitaminose)
      • Doença genética, hereditária ou congênita: os agentes etiológicos são genes disfuncionais por modificação, danificação ou herança
  • Illness
    • Perspectiva do paciente
    • Doença geral: uma doença não infecciosa ou assintomática física (como câncer, cardiopatia, doença genética) ou mental (como depressão, apneia, transtornos psíquicos)
  • Sickness
    • Perspectiva social e relacional da doença
    • Moléstia, mal, estado de mal-estar
  • Infirmity
    • Enfermidade, fraqueza física ou mental, debilidade
  • Morbidity
    • Morbidez, estar doente, incapacidade, falta de saúde
  • Pestilence
    • Epidemia
  • Injury
    • Agravo, acidente ou trauma
    • Agravo significa qualquer dano à integridade física, mental e social dos indivíduos provocado por circunstâncias nocivas, como acidentes, intoxicações, abuso de drogas e lesões auto ou heteroinfligidas. (Portaria nº 104/MS/GM, 25/01/2011)
    • Segundo o documento Seleção das Doenças de Notificação Compulsória: Critérios e Recomendações para as Três Esferas de Governo (CENEPI-FUNASA/MS, maio de 1998), os agravos são outros problemas de saúde pública além das doenças transmissíveis, sendo portanto um termo mais abrangente do que doença.

Objetivo da EFA

O objetivo da análise fatorial é transformar um grande número de variáveis observadas em termos de um número pequeno e interpretável de fatores comuns.

A análise fatorial é uma técnica estatística multivariada descritiva exploratória (EFA) e confirmatória (CFA) para obtenção de fatores comuns, validação de construto de escala de avaliação e pontuação (escoragem) dos respondentes.

Aconselha-se o uso da matriz de correlação dos itens da escala para EFA, pois usar matriz de correlação equivale a padronizar os itens. É aconselhável o uso da matriz de covariância qpara CFA.

Os itens são variáveis manifestas, que podem ser nominais dicotômicos ou politômicos, ordinais e/ou intervalares. As variáveis latentes ou fatores comuns são variáveis não observáveis e intervalares.

As observações são independentes num arquivo no formato wide (cada unidade experimental numa linha com o valor obtido em cada um dos itens). Para a análise ser possível, a matriz de correlação obtida a partir dos itens deve ser não-homogênea.

A matriz de covariância é computada com os itens não-padronizados (variâncias não-homogeneizadas). Se os itens não são medidos com as mesmas unidades de medida ou não são comparáveis, utilizar a matriz de correlação (variâncias homogeneizadas) irá padronizá-los de forma a torná-los cotejáveis.

Áreas de aplicação de EFA

Conforme Kaplunovsky (2004):

Depressão maior

Brown (2015) Confirmatory Factor Analysis for Applied Research
Angelos Markos: CFA for Applied Research in R package lavaan

No capítulo 2: The common factor model and exploratory factor analysis de Brown (2015), há um exemplo em que apenas a matriz de correlação de Pearson foi fornecida. Porém, isto é o suficiente para EFA.

Esta matriz de correlação foi obtida a partir das respostas de 300 indivíduos internados em uma ala psiquiátrica a um questionário de quatro itens do tipo Likert, desenvolvido para avaliar sintomas de depressão maior.

Os dados estão em Depressao.xlsx, lidos a partir de readxl::read_excel() como um data frame e convertidos em matriz para serem usados na análise. Os itens são denominados O1, O2, O3 e O4.

Note que esta matriz de correlação é quadrada, simétrica, com valores iguais a 1 na diagonal principal. A correlação de uma variável consigo própria é unitária, a qual também é igual aos desvios-padrão e variâncias dos itens padronizados. A variância total dos dados é o traço da matriz (a soma desta diagonal principal) que, neste caso, coincide com o número de itens.

Implementamos em demo_Depressao.R, cuja saída completa (discutida adiante) é:

source("eiras.bartitle.R")

cat(bartitle("Data: correlation matrix"))
n <- 300
Matriz <- as.data.frame(readxl::read_excel("Depressao.xlsx"))
Matriz <- as.matrix(Matriz[-1])            # remove a primeira coluna
print(Matriz)

cat(bartitle("Singular values"))
sv <- svd(Matriz)$d
dt <- data.frame(1:length(sv),format(as.numeric(sv), digits=2, nsmall=2))
names(dt) <- c("component","value")
print(dt)
plot(sv, 
     xlab="Component", ylab="Singular value", 
     type="o", pch=16, axes=FALSE)
axis(1, at=1:length(sv))
axis(2)
abline(h=1,col="darkgray",lty=2)

cat(bartitle("Model heuristic"))
sv1maior <- sv[1]
sv2maior <- sv[2]
H <- NA
if(sv2maior>0) {H <- sv1maior/sv2maior}
cat("FirstSV/SecondSV = H = ",round(sv1maior,2),"/",round(sv2maior,2)," ~ ",round(H,2),"\n",sep="")
cat("\t- if < 2: first order\n")
cat("\t- if > 3: unifactor\n")
cat("\t- otherwise: bifactor\n")
if (H <= 2) {txt <- "\tpossible first order model, sv1/sv2 <= 2"}
if (H > 2 & H <= 3) {txt <- "\tpossible bifactor model, 2 < sv1/sv2 <= 3"}
if (H > 3) {txt <- "\tpossible unifactor model, sv1/sv2 > 3"}
cat(txt)

cat(bartitle("Condition index"))
sv.maior <- sv[1]
sv.menor <- sv[length(sv)]
IC <- NA
if(sv.menor>0) {IC <- sqrt(sv.maior/sv.menor)}
cat("(MaxSV/MinSV)^0.5 = CI = (",round(sv.maior,2),"/",round(sv.menor,2),")^0.5 ~ ",round(IC,1),"\n",sep="")
cat("(analysis may be jeopardized if index > 30)\n",sep="")

cat(bartitle("Exploratory Common Factor Analysis (EFA)"))
cat(bartitle("suggested number of common factors",2))
print(psych::fa.parallel(x=Matriz, n.obs=n,
                         plot=FALSE)$p)
# print(psych::VSS(x=Matriz,
#                  n.obs=n,
#                  plot=FALSE))

cat(bartitle("usefulness of correlation matrix",2))
print(psych::KMO(Matriz))

cat(bartitle("EFA",2))
num.factors <- 1
fa.fit <- psych::fa(r=Matriz,
                    n.obs=n,
                    nfactors=num.factors)
print(fa.fit, sort=TRUE,digits=2,cut=.3)
psych::fa.diagram(fa.fit, 
                        main="Depression Scale",
                        cut=0,
                        digits=2,
                        sort=TRUE)
cat(bartitle("Heuristic for model rejection:",2))
cat("X^2 = ",fa.fit$chi,"\n",sep="")
cat("df = ",fa.fit$dof,"\n",sep="")
cat("X^2/df = ",fa.fit$chi/fa.fit$dof,"\n",sep="")
cat("(model may possibly be rejected when X^2/df >  2)\n",sep="")

------------------------
Data: correlation matrix
------------------------
       O1   O2   O3   O4
[1,] 1.00 0.70 0.65 0.62
[2,] 0.70 1.00 0.66 0.63
[3,] 0.65 0.66 1.00 0.60
[4,] 0.62 0.63 0.60 1.00

---------------
Singular values
---------------
  component value
1         1  2.93
2         2  0.41
3         3  0.36
4         4  0.30


---------------
Model heuristic
---------------
FirstSV/SecondSV = H = 2.93/0.41 ~ 7.14
    - if < 2: first order
    - if > 3: unifactor
    - otherwise: bifactor
    possible unifactor model, sv1/sv2 > 3
---------------
Condition index
---------------
(MaxSV/MinSV)^0.5 = CI = (2.93/0.3)^0.5 ~ 3.1
(analysis may be jeopardized if index > 30)

----------------------------------------
Exploratory Common Factor Analysis (EFA)
----------------------------------------

    ----------------------------------
    suggested number of common factors
    ----------------------------------
Parallel analysis suggests that the number of factors =  1  and the number of components =  1 
NULL

    --------------------------------
    usefulness of correlation matrix
    --------------------------------
Kaiser-Meyer-Olkin factor adequacy
Call: psych::KMO(r = Matriz)
Overall MSA =  0.84
MSA for each item = 
  O1   O2   O3   O4 
0.82 0.81 0.85 0.87 

    ---
    EFA
    ---
Factor Analysis using method =  minres
Call: psych::fa(r = Matriz, nfactors = num.factors, n.obs = n)
Standardized loadings (pattern matrix) based upon correlation matrix
   V  MR1   h2   u2 com
O2 2 0.84 0.71 0.29   1
O1 1 0.83 0.68 0.32   1
O3 3 0.79 0.62 0.38   1
O4 4 0.75 0.57 0.43   1

                MR1
SS loadings    2.58
Proportion Var 0.64

Mean item complexity =  1
Test of the hypothesis that 1 factor is sufficient.

df null model =  6  with the objective function =  2.05 with Chi Square =  607.23
df of  the model are 2  and the objective function was  0 

The root mean square of the residuals (RMSR) is  0 
The df corrected root mean square of the residuals is  0.01 

The harmonic n.obs is  300 with the empirical chi square  0.05  with prob <  0.97 
The total n.obs was  300  with Likelihood Chi Square =  0.21  with prob <  0.9 

Tucker Lewis Index of factoring reliability =  1.009
RMSEA index =  0  and the 90 % confidence intervals are  0 0.049
BIC =  -11.2
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                   MR1
Correlation of (regression) scores with factors   0.94
Multiple R square of scores with factors          0.88
Minimum correlation of possible factor scores     0.77


    ------------------------------
    Heuristic for model rejection:
    ------------------------------
X^2 = 0.05427865
df = 2
X^2/df = 0.02713933
(model may possibly be rejected when X^2/df >  2)

Valor singular

A variância total pode ser particionada por meio da função svd() em autovalores (eigenvalues) robustos, chamados de valores singulares. Valor singular é um número positivo. Sua utilidade é sugerir o número de fatores comuns subjacentes aos itens.

Os valores singulares são uma medida da relação entre o número de fatores comuns e parcela da variância total explicada por eles. Dado que cada item tem variância padronizada unitária, esperamos que a inclusão de mais um fator contribua para o modelo se ele vier a adicionar mais do que um item poderia explicar isoladamente. Assim, sugere-se selecionar quanto valores singulares estão acima de 1, o que nos sugere quantos fatores comuns esta análise sugere. Neste exemplo, com apenas um fator comum, capturamos 2.93 da variância total de 4 (cerca de 73.3%).

Os valores singulares são variâncias explicadas pelas componentes. A relação entre a primeira e a segunda componentes parecem prenunciar qual tipo de modelo deverá ser a melhor representação para os dados observados.

Assim, a heurística é dada por

\[ H = {{\text{sv}_1}\over{\text{sv}_2}} \] em que \(sv_1\) e \(sv_2\) são os dois maiores valores singulares.

Para:

  • \(H > 3\): modelo unifatorial,
  • 2 < \(H \le 3\): modelo hierárquico (segunda ordem ou bifatorial),
  • \(H \le 2\): modelo de primeira ordem.

A lógica desta heurística é que \(H > 3\) indica que a primeira componente captura muito mais do que a próxima (e portanto todas as outras) componentes, de forma que possivelmente um modelo com um único fator será suficiente. No extremo oposto, quando \(H \le 2\), há equilíbrio entre as componentes e, então, vários fatores trabalhando conjuntamente podem ser necessários para compor um bom modelo. Na situação intermediária temos um modelo bifatorial, um modelo que tem um fator geral e fatores secundários.

sv1 = 2.93
sv2 = 0.41
H = 7.14

Nesta heurística são mencionados três tipos de modelo: de primeira ordem (first order), bifatorial (bifactor) e unifatorial (unifactor):

Neste exemplo, a heurística do modelo resultou em \(H=\) 7.14, sugerindo que um modelo com um único fator pode ser adequado.

Índice de condição

O determinante da matriz de correlações é o produtório dos valores singulares, um valor positivo porque esperamos que todos os valores singulares calculados de forma robusta sejam positivos, correspondendo a uma variabilidade generalizada, resumindo toda a informação da matriz de correlações dos itens par-a-par com um único número.

Os cálculos psicométricos precisam do inverso do determinante da matriz de correlações. No entanto, se algum dos valores singulares for muito menor do que o maior, o valor do determinante ficará muito próximo a zero e seu inverso muito grande e a solução pode apresentar instabilidade numérica.

O índice de condição é:

\[ \text{CI} = {\sqrt{ {\max(\text{sv})} \over {\min(\text{sv})} }} \] i.e, a raiz quadrada do maior valor singular sobre o menor valor singular.

Caso este índice seja maior que 30, prenuncia-se a instabilidade numérica, invalidando a EFA.

No exemplo da Depressão maior, obtivemos índice igual a \(CI=3.1\). Desta forma, podemos prosseguir com EFA.

Número de fatores comuns

EFA inicia com estimativas do número adequado de fatores que os dados sugerem. Aqui escolhemos duas funções do pacote psych, desenvolvido por William Revelle. A primeira é a análise paralela feita com psych::fa.parallel(). Neste exemplo, coerentemente com o que vimos anterioremente, sugere-se um fator comum (number of factors).

Neste exemplo, escolheremos utilizar apenas 1 e, portanto, podemos dar-lhe um nome melhor que “fator 1”. Vamos chamá-lo aqui de “Depressão maior”.

Usabilidade da matriz de correlação

KMO (MSA global) e os MSA (measure of sampling adequacy) para cada item são índices de quanto as correlações entre os pares de itens são não correlacionadas com os demais itens, ou seja, será tão mais alto quanto menor for a redundância informacional da matriz de correlação. KMO maior ou igual a 0.8 parece produzir boa análise fatorial (Kaiser, 1970). MSA do item avalia o grau de pertinência ao grupo de itens considerados. O valor mínimo de KMO e MSA é, em geral, 0.5.

Como é possível perceber, são medidas relativas de tamanho de efeito. Analogamente ao procedimento da obtenção do \(\eta^2_{\text{global}}\) quando há controle através dos \(\eta^2_{\text{parcial}}\) em Análise de Correlação, KMO é computado pela composição deste processo para todas as combinações de pares de itens possíveis, sendo que o \(\eta^2_{\text{global}}\) é calculado cada par e os demais itens funcionam como controles fornecendo o \(\eta^2_{\text{parcial}}\):

\[ KMO = { { \text{Soma de } \eta^2_{\text{global}} } \over { \text{Soma de } \eta^2_{\text{global}} + \text{Soma de } \eta^2_{\text{parcial}} } } \] Portanto, KMO aproxima-se de 1 se a magnitude da influência dos controles aproxima-se de 0, indicando que existe “pureza” na correlação dos pares de itens.

Saída da EFA

Esta é EFA propriamente dita. Neste código precisamos definir quantos fatores comuns queremos postular, o que fizemos em num.factors <- 1. Sua saída tem algumas partes.

Na primeira tabela, a coluna MR1 (o fator Depressão maior) contém as cargas fatoriais padronizadas, que é a inclinação das retas de regressão padronizadas utilizando como VE o fator comum e como VD o item. Como vimos no capítulo de Regressão Linear Simples, em regressões feitas com valores padronizados, a inclinação da reta é numericamente igual à correlação de Pearson. Podemos, portanto, pensar nas cargas fatorias como a intensidade da associação linear do fator com o item. São, neste exemplo, grandes e positivas. R^2 está na coluna h2 e u2 é seu complemento (a variância do resíduo). As funções de Revelle ainda mostram as cargas fatoriais em um diagrama, que é a estrutura do modelo.

Outra parte importante desta saída é Proportion Var 0.64, que é a parcela da variância total explicada pelo modelo.

Adicionamos uma heurística para a rejeição do modelo psicométrico. Temos interesse em rejeitar a hipótese nula do modelo ser coerente com os dados representados pela matriz de correlação. A estatística de teste qui-quadrado da EFA (fa.fit$chi) dividida pelos graus de liberdade deve exceder o valor 2.

O número de graus de liberdade estão em fa.fit$dof. O cálculo é dividido em duas partes. A primeira é o número de dados que, neste exemplo, são 10 (\(k (k+1)/2\), sendo que \(k\) é o número de itens). Os 10 dados são as 4 variâncias unitárias e as 6 correlações.

A segunda parte é o número de parâmetros que o modelo deve estimar, que neste caso são 8 (\(2 \times k\) no modelo unifatorial): 4 cargas fatoriais e 4 variâncias residuais. O número de graus de liberdade é a diferença entre esta quantidade de dados (10) e a quantidade de parâmetros do modelo (8), igual a 2, neste exemplo.

Exemplo: Escala de Felicidade

Conforme Stevenson & Haberman (2005), no confucionismo:

“O sucesso social é uma questão de Destino. Confúcio conclui, portanto, que é fútil buscá-lo. Mas a integridade moral está sujeita ao controle de cada um, e é na verdade a única coisa que vale a pena buscar. Podemos nos empenhar em compreender os desígnios do Céu, mas é claro que devemos agir humanisticamente, não obstante o que o Céu nos mande. Mais uma vez, o importante é o cultivo de si mesmo, não o reconhecimento social. ‘O cavalheiro se perturba com sua própria falta de habilidade, não com a incapacidade alheia de admirá-lo.’ (XV.19)”

Felicidade = Bem-estar subjetivo

Eudaimonia (do grego antigo: εὐδαιμονία) é um termo grego que literalmente significa ‘o estado de ser habitado por um bom daemon, um bom gênio’, e, em geral, é traduzido como felicidade ou bem-estar.

Estar de bem com a vida e consigo mesmo; paz interior; estado anímico ou de satisfação e de bem-estar; estado durável de equilíbrio físico e psíquico que varia do contentamento ao júbilo.

Um pesquisador criou um novo questionário para medir felicidade. O questionário criado tem 10 itens respondidos por 200 participantes. Não há dados faltantes (missing values). São itens Likert de concordância de 5 pontos (1: discordância total a 5: concordância total):

  1. Sinto-me entusiasmado
  2. Tenho muitos amigos
  3. Adoro encontrar-me com pessoas
  4. Sinto-me repleto de energia
  5. Tenho várias coisas interessantes para fazer
  6. Espero ansiosamente por várias coisas
  7. Quero contatar amigos e parentes
  8. Quero sair para uma festa
  9. As pessoas do trabalho inspiram-me
  10. Sinto-me animado para iniciar cada dia

Os dados são aqueles do arquivo Felicidade.rds que já utilizamos anteriormente. Diferente do exemplo anterior, temos os dados individualizados, em vez da matriz de correlação.

Consideraremos todos os itens como variáveis intervalares, e usaremos o método que existe na rotina disponível em demo_Correlacao.R para gerar a matriz de correlação e então podemos utilizá-la em código similar ao do exemplo da Depressão maior (o único ajuste necessário, devido à sessão “suggested number of common factors”, foi alterar para num.factors <- 2). Implantado em demo_Felicidade.R, a saída é:

suppressMessages(suppressWarnings(
  invisible(Sys.setlocale("LC_ALL", "pt_BR.UTF-8"))))
source("eiras.showdataframe.R")
source("eiras.bartitle.R")

cat(bartitle("Data"))
Dados <- readRDS("Felicidade.rds")
showdataframe(Dados, head=4, tail=3)
n <- nrow(Dados) # number of observations

# todas as colunas tratadas como ordinais
Dados[,] <- lapply(Dados[,],as.ordered)

cat(bartitle("Correlation matrix"))
r <- polycor::hetcor(Dados, use="complete.obs", pd=TRUE)
print(r, digits=1)
r.hetcor <- r$correlations

cat(bartitle("assumindo variaveis como ordinais",2))
ro <- qgraph::cor_auto(Dados, 
                       detectOrdinal=TRUE, 
                       forcePD=TRUE)
print (
  GGally::ggcorr(data=NULL,
                 name="Felicidade: ordinal",
                 cor_matrix=ro,
                 geom="tile",
                 min_size=0,
                 max_size=10, 
                 nbreaks=6,
                 digits=2,
                 label=FALSE,
                 label_round=2,
                 label_size=4)
)

cat(bartitle("Network (pacote qgraph)"))
n <- nrow(na.omit(Dados))
cat(bartitle("graph=\"cor\""),2)
qgraph::qgraph(ro, 
               graph="cor", 
               sampleSize=n,
               minimum="sig",
               bonf=TRUE,
               layout="spring", 
               shape="rectangle",
               vsize=5,
               label.cex=2,
               labels=colnames(ro),
               label.prop=0,
               theme="gray",
               title="Escala de Felicidade: ordinal (cor)",
               details=FALSE)
cat(bartitle("graph=\"glasso\""),2)
qgraph::qgraph(ro, 
               graph="glasso", 
               sampleSize=n,
               layout="spring",
               shape="rectangle",
               vsize=5,
               label.cex=2,
               labels=colnames(ro),
               label.prop=0,
               theme="gray",
               title="Escala de Felicidade: ordinal (glasso)", 
               details=FALSE)

cat(bartitle("Frequencias (pacote likert)"))
cat(bartitle("Verifica numero de niveis observados em cada item",2))
print(sapply(Dados,function(x){length(levels(x))}))
# usa a funcao preparatoria
lkt <- likert::likert(as.data.frame(Dados))
cat(bartitle("Frequencia das respostas",2))
print(lkt)
print(plot(lkt, type="heat", low.color="lightgray", high.color="darkgray"))
print(summary(lkt))
print(plot(lkt, low.color="lightgray", high.color="black"))

cat(bartitle("Dendrograma (pacote pvclust)"))
cat("\n(so funciona assumido itens intervalares)\n")
Dados_num <- Dados
Dados_num[,] <- lapply(Dados_num[,],as.numeric)
res.pv <- pvclust::pvclust(Dados_num, 
                           method.dist="correlation",
                           method.hclust="ward.D2", 
                           nboot = 5e2)
plot(res.pv)

cat(bartitle("Singular values"))
sv <- svd(r.hetcor)$d
dt <- data.frame(1:length(sv),format(as.numeric(sv), 
                                     digits=2, 
                                     nsmall=2))
names(dt) <- c("component","value")
print(dt)
plot(sv, 
     xlab="Component", ylab="Singular value", 
     type="o", pch=16, axes=FALSE)
axis(1, at=1:length(sv))
axis(2)
abline(h=1,col="darkgray",lty=2)

cat(bartitle("Model heuristic"))
sv1maior <- sv[1]
sv2maior <- sv[2]
H <- NA
if(sv2maior>0) {H <- sv1maior/sv2maior}
cat("FirstSV/SecondSV = H = ",round(sv1maior,2),"/",round(sv2maior,2)," ~ ",round(H,2),"\n",sep="")
cat("\t- if < 2: first order\n")
cat("\t- if > 3: unifactor\n")
cat("\t- otherwise: bifactor\n")
if (H <= 2) {txt <- "\tpossible first order model, sv1/sv2 <= 2"}
if (H > 2 & H <= 3) {txt <- "\tpossible bifactor model, 2 < sv1/sv2 <= 3"}
if (H > 3) {txt <- "\tpossible unifactor model, sv1/sv2 > 3"}
cat(txt)

cat(bartitle("Condition index"))
sv.maior <- sv[1]
sv.menor <- sv[length(sv)]
IC <- NA
if(sv.menor>0) {IC <- sqrt(sv.maior/sv.menor)}
cat("(MaxSV/MinSV)^0.5 = CI = (",round(sv.maior,2),"/",round(sv.menor,2),")^0.5 ~ ",round(IC,1),"\n",sep="")
cat("\t(analysis may be jeopardized if index > 30)\n",sep="")

cat(bartitle("Exploratory Common Factor Analysis (EFA)"))
cat(bartitle("suggested number of common factors",2))
print(psych::fa.parallel(x=r.hetcor, n.obs=n, plot=FALSE)$p)

cat(bartitle("usefulness of correlation matrix",2))
print(psych::KMO(r.hetcor))

cat(bartitle("EFA",2))
num.factors <- 2
fa.fit <- psych::fa(r=r.hetcor,
                    n.obs=n,
                    nfactors=num.factors)
print(fa.fit, sort=TRUE,digits=2,cut=.3)
psych::fa.diagram(fa.fit, 
                  main="Felicidade",
                  cut=0,
                  digits=2,
                  sort=TRUE)
cat(bartitle("Heuristic for model rejection):",2))
cat("X^2 = ",round(fa.fit$chi,2),"\n",sep="")
cat("df = ",fa.fit$dof,"\n",sep="")
cat("X^2/df = ",round(fa.fit$chi/fa.fit$dof,2),"\n",sep="")
cat("(model may possibly be relected when X^2/df > 2)\n",sep="")

----
Data
----
 Q1  Q2  Q3  Q4  Q5  Q6  Q7  Q8  Q9  Q10
 1   2   4   2   4   1   3   2   2   1  
 1   3   4   1   1   1   3   3   3   1  
 1   4   3   1   1   1   4   4   4   1  
 1   2   3   1   1   1   1   1   1   1  
 ... ... ... ... ... ... ... ... ... ...
 1   3   3   1   1   1   2   3   3   1  
 1   4   3   1   1   1   3   2   2   1  
 1   4   5   1   1   1   4   4   3   1  

------------------
Correlation matrix
------------------

Two-Step Estimates

Correlations/Type of Correlation:
      Q1         Q2         Q3         Q4         Q5         Q6         Q7
Q1     1 Polychoric Polychoric Polychoric Polychoric Polychoric Polychoric
Q2  0.07          1 Polychoric Polychoric Polychoric Polychoric Polychoric
Q3  0.05        0.5          1 Polychoric Polychoric Polychoric Polychoric
Q4   0.6      -0.05      -0.02          1 Polychoric Polychoric Polychoric
Q5   0.5      -0.05      -0.09        0.5          1 Polychoric Polychoric
Q6   0.6        0.1      -0.02        0.8        0.5          1 Polychoric
Q7  0.09        0.5        0.5      -0.08       0.01       0.06          1
Q8  0.05        0.7        0.6      -0.02      0.009        0.1        0.8
Q9   0.1        0.5        0.5       -0.1      -0.03       0.02        0.7
Q10  0.6       0.05      -0.09        0.7        0.5        0.8        0.2
            Q8         Q9        Q10
Q1  Polychoric Polychoric Polychoric
Q2  Polychoric Polychoric Polychoric
Q3  Polychoric Polychoric Polychoric
Q4  Polychoric Polychoric Polychoric
Q5  Polychoric Polychoric Polychoric
Q6  Polychoric Polychoric Polychoric
Q7  Polychoric Polychoric Polychoric
Q8           1 Polychoric Polychoric
Q9         0.6          1 Polychoric
Q10        0.1       0.06          1

Standard Errors:
      Q1   Q2   Q3   Q4   Q5   Q6   Q7   Q8  Q9
Q1                                             
Q2  0.09                                       
Q3  0.09 0.06                                  
Q4  0.07 0.09 0.09                             
Q5  0.07 0.09 0.09 0.08                        
Q6  0.08  0.1  0.1 0.06 0.08                   
Q7  0.09 0.05 0.06 0.09 0.09  0.1              
Q8  0.09 0.03 0.05 0.09 0.09  0.1 0.03         
Q9  0.09 0.06 0.05 0.09 0.09  0.1 0.04 0.04    
Q10 0.08  0.1  0.1 0.07 0.09 0.06  0.1  0.1 0.1

n = 200 

P-values for Tests of Bivariate Normality:
      Q1   Q2  Q3   Q4  Q5   Q6   Q7  Q8 Q9
Q1                                         
Q2   0.5                                   
Q3   0.8  0.3                              
Q4   0.1 0.01 0.9                          
Q5  0.08 0.06 0.3 0.09                     
Q6   0.5  0.6 0.5  0.3 0.3                 
Q7   0.7 0.03 0.3  0.7 0.3  0.3            
Q8   0.9    1 0.8  0.4 0.2  0.7 0.07       
Q9  0.09  0.3 0.4  0.5 0.6  0.4  0.5 0.2   
Q10  0.4  0.7 0.5  0.5 0.1 0.06  0.6 0.4  1

    ---------------------------------
    assumindo variaveis como ordinais
    ---------------------------------


-----------------------
Network (pacote qgraph)
-----------------------

-----------
graph="cor"
-----------
 2


--------------
graph="glasso"
--------------
 2


---------------------------
Frequencias (pacote likert)
---------------------------

    -------------------------------------------------
    Verifica numero de niveis observados em cada item
    -------------------------------------------------
 Q1  Q2  Q3  Q4  Q5  Q6  Q7  Q8  Q9 Q10 
  5   5   5   5   5   5   5   5   5   5 

    ------------------------
    Frequencia das respostas
    ------------------------
   Item    1    2    3    4    5
1    Q1 67.0 19.5  6.0  7.0  0.5
2    Q2  6.5 14.0 36.5 36.0  7.0
3    Q3  6.0 15.5 29.0 32.5 17.0
4    Q4 68.0 17.5  8.0  4.0  2.5
5    Q5 63.0 23.5  9.0  2.5  2.0
6    Q6 84.5  9.0  2.0  3.0  1.5
7    Q7  6.0 12.0 29.5 37.5 15.0
8    Q8  5.5 17.5 34.5 30.5 12.0
9    Q9  4.5 17.0 34.0 33.0 11.5
10  Q10 83.0 11.5  3.5  1.5  0.5

   Item  low neutral high  mean        sd
7    Q7 18.0    29.5 52.5 3.435 1.0730949
3    Q3 21.5    29.0 49.5 3.390 1.1198977
9    Q9 21.5    34.0 44.5 3.300 1.0272665
2    Q2 20.5    36.5 43.0 3.230 0.9960222
8    Q8 23.0    34.5 42.5 3.260 1.0573504
1    Q1 86.5     6.0  7.5 1.545 0.9231664
4    Q4 85.5     8.0  6.5 1.555 0.9755684
5    Q5 86.5     9.0  4.5 1.570 0.9050945
6    Q6 93.5     2.0  4.5 1.280 0.7775752
10  Q10 94.5     3.5  2.0 1.250 0.6399592


----------------------------
Dendrograma (pacote pvclust)
----------------------------

(so funciona assumido itens intervalares)
Bootstrap (r = 0.5)... Done.
Bootstrap (r = 0.6)... Done.
Bootstrap (r = 0.7)... Done.
Bootstrap (r = 0.8)... Done.
Bootstrap (r = 0.9)... Done.
Bootstrap (r = 1.0)... Done.
Bootstrap (r = 1.1)... Done.
Bootstrap (r = 1.2)... Done.
Bootstrap (r = 1.3)... Done.
Bootstrap (r = 1.4)... Done.


---------------
Singular values
---------------
   component value
1          1  3.53
2          2  3.29
3          3  0.67
4          4  0.64
5          5  0.55
6          6  0.45
7          7  0.31
8          8  0.27
9          9  0.18
10        10  0.12


---------------
Model heuristic
---------------
FirstSV/SecondSV = H = 3.53/3.29 ~ 1.08
    - if < 2: first order
    - if > 3: unifactor
    - otherwise: bifactor
    possible first order model, sv1/sv2 <= 2
---------------
Condition index
---------------
(MaxSV/MinSV)^0.5 = CI = (3.53/0.12)^0.5 ~ 5.4
    (analysis may be jeopardized if index > 30)

----------------------------------------
Exploratory Common Factor Analysis (EFA)
----------------------------------------

    ----------------------------------
    suggested number of common factors
    ----------------------------------
Parallel analysis suggests that the number of factors =  2  and the number of components =  2 
NULL

    --------------------------------
    usefulness of correlation matrix
    --------------------------------
Kaiser-Meyer-Olkin factor adequacy
Call: psych::KMO(r = r.hetcor)
Overall MSA =  0.78
MSA for each item = 
  Q1   Q2   Q3   Q4   Q5   Q6   Q7   Q8   Q9  Q10 
0.81 0.77 0.85 0.78 0.86 0.76 0.73 0.71 0.83 0.80 

    ---
    EFA
    ---
Carregando namespace exigido: GPArotation
Factor Analysis using method =  minres
Call: psych::fa(r = r.hetcor, nfactors = num.factors, n.obs = n)
Standardized loadings (pattern matrix) based upon correlation matrix
    item   MR1   MR2   h2   u2 com
Q6     6  0.89       0.81 0.19   1
Q10   10  0.83       0.70 0.30   1
Q4     4  0.81       0.66 0.34   1
Q1     1  0.71       0.51 0.49   1
Q5     5  0.63       0.39 0.61   1
Q8     8        0.93 0.87 0.13   1
Q7     7        0.84 0.70 0.30   1
Q9     9        0.74 0.54 0.46   1
Q2     2        0.72 0.52 0.48   1
Q3     3        0.62 0.39 0.61   1

                       MR1  MR2
SS loadings           3.05 3.05
Proportion Var        0.31 0.30
Cumulative Var        0.31 0.61
Proportion Explained  0.50 0.50
Cumulative Proportion 0.50 1.00

 With factor correlations of 
     MR1  MR2
MR1 1.00 0.06
MR2 0.06 1.00

Mean item complexity =  1
Test of the hypothesis that 2 factors are sufficient.

df null model =  45  with the objective function =  6.14 with Chi Square =  1196.7
df of  the model are 26  and the objective function was  0.64 

The root mean square of the residuals (RMSR) is  0.04 
The df corrected root mean square of the residuals is  0.06 

The harmonic n.obs is  200 with the empirical chi square  33.2  with prob <  0.16 
The total n.obs was  200  with Likelihood Chi Square =  124.72  with prob <  7.3e-15 

Tucker Lewis Index of factoring reliability =  0.851
RMSEA index =  0.138  and the 90 % confidence intervals are  0.114 0.163
BIC =  -13.03
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy             
                                                   MR1  MR2
Correlation of (regression) scores with factors   0.95 0.96
Multiple R square of scores with factors          0.91 0.93
Minimum correlation of possible factor scores     0.82 0.85


    -------------------------------
    Heuristic for model rejection):
    -------------------------------
X^2 = 33.2
df = 26
X^2/df = 1.28
(model may possibly be relected when X^2/df > 2)

A saída é a quase a mesma do exemplo anterior. Leia e interprete. A diferença é um gráfico adicional que mostra as cargas fatoriais dos itens nos dois fatores comuns extraídos, os quais o pacote denomina MR1 e MR2: perceba que dois grupos distintos claramente se formam neste caso. Os dois grupos são:

1 - Sinto-me entusiasmado
4 - Sinto-me repleto de energia
5 - Tenho várias coisas interessantes para fazer
6 - Espero ansiosamente por várias coisas
10 - Sinto-me animado para iniciar cada dia

que, agora, podemos entender como “Felicidade intrínseca” ou “Felicidade confuciana”.

2 - Tenho muitos amigos
3 - Adoro encontrar-me com pessoas
7 - Quero contatar amigos e parentes
8 - Quero sair para uma festa
9 - As pessoas do trabalho inspiram-me

que podemos entender como “Felicidade extrínseca” ou “Felicidade não confuciana”.

Neste exemplo, como temos os dados brutos, ainda podemos calcular os escores (pontuações) dos respondentes.

Para isto, precisaremos usar a função psych::fa com outros parâmetros:

fa.fit <- psych::fa(r=Dados_brutos,
                    scores="regression",
                    nfactors=num.factors)

Está implementada em demo_Felicidade_DadosBrutos.R, resultando em:

source("eiras.bartitle.R")

cat(bartitle("Data"))
Dados_brutos <- readRDS("Felicidade.rds")
showdataframe(Dados_brutos, head=4, tail=3)

cat(bartitle("EFA"))
num.factors <- 2
fa.fit <- psych::fa(r=Dados_brutos,
                    scores="regression",
                    nfactors=num.factors)
print(fa.fit, sort=TRUE,digits=2,cut=.3)

cat(bartitle("Scores"))
Dados_brutos$MR1 <- fa.fit$scores[,1]
Dados_brutos$MR2 <- fa.fit$scores[,2]
print(head(Dados_brutos), digits=3)
print(tail(Dados_brutos), digits=3)
print(summary(Dados_brutos[11:12], digits=2))
GGally::ggpairs(Dados_brutos[11:12])+ggplot2::theme_bw()+
  ggplot2::theme(panel.grid = ggplot2::element_blank())

----
Data
----
 Q1  Q2  Q3  Q4  Q5  Q6  Q7  Q8  Q9  Q10
 1   2   4   2   4   1   3   2   2   1  
 1   3   4   1   1   1   3   3   3   1  
 1   4   3   1   1   1   4   4   4   1  
 1   2   3   1   1   1   1   1   1   1  
 ... ... ... ... ... ... ... ... ... ...
 1   3   3   1   1   1   2   3   3   1  
 1   4   3   1   1   1   3   2   2   1  
 1   4   5   1   1   1   4   4   3   1  

---
EFA
---
Factor Analysis using method =  minres
Call: psych::fa(r = Dados_brutos, nfactors = num.factors, scores = "regression")
Standardized loadings (pattern matrix) based upon correlation matrix
    item   MR1   MR2   h2   u2 com
Q8     8  0.90       0.82 0.18   1
Q7     7  0.80       0.64 0.36   1
Q9     9  0.70       0.49 0.51   1
Q2     2  0.67       0.45 0.55   1
Q3     3  0.59       0.35 0.65   1
Q6     6        0.79 0.62 0.38   1
Q4     4        0.75 0.56 0.44   1
Q10   10        0.75 0.56 0.44   1
Q1     1        0.66 0.44 0.56   1
Q5     5        0.54 0.29 0.71   1

                       MR1  MR2
SS loadings           2.76 2.46
Proportion Var        0.28 0.25
Cumulative Var        0.28 0.52
Proportion Explained  0.53 0.47
Cumulative Proportion 0.53 1.00

 With factor correlations of 
     MR1  MR2
MR1 1.00 0.03
MR2 0.03 1.00

Mean item complexity =  1
Test of the hypothesis that 2 factors are sufficient.

df null model =  45  with the objective function =  4.21 with Chi Square =  819.75
df of  the model are 26  and the objective function was  0.34 

The root mean square of the residuals (RMSR) is  0.04 
The df corrected root mean square of the residuals is  0.05 

The harmonic n.obs is  200 with the empirical chi square  26.87  with prob <  0.42 
The total n.obs was  200  with Likelihood Chi Square =  65.87  with prob <  2.6e-05 

Tucker Lewis Index of factoring reliability =  0.91
RMSEA index =  0.087  and the 90 % confidence intervals are  0.062 0.114
BIC =  -71.89
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy             
                                                   MR1  MR2
Correlation of (regression) scores with factors   0.95 0.92
Multiple R square of scores with factors          0.90 0.84
Minimum correlation of possible factor scores     0.79 0.69

------
Scores
------
  Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10    MR1    MR2
1  1  2  4  2  4  1  3  2  2   1 -1.066  0.107
2  1  3  4  1  1  1  3  3  3   1 -0.222 -0.569
3  1  4  3  1  1  1  4  4  4   1  0.628 -0.556
4  1  2  3  1  1  1  1  1  1   1 -2.132 -0.589
5  1  3  3  1  1  1  3  3  1   1 -0.657 -0.585
6  1  4  4  1  1  1  4  4  4   1  0.729 -0.561
    Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10    MR1    MR2
195  1  4  4  1  1  1  4  4  4   1  0.729 -0.561
196  1  1  2  1  1  1  1  1  2   1 -2.156 -0.564
197  1  3  2  1  1  1  1  2  3   1 -1.292 -0.576
198  1  3  3  1  1  1  2  3  3   1 -0.500 -0.574
199  1  4  3  1  1  1  3  2  2   1 -0.914 -0.581
200  1  4  5  1  1  1  4  4  3   1  0.662 -0.577
      MR1              MR2       
 Min.   :-2.474   Min.   :-0.59  
 1st Qu.:-0.527   1st Qu.:-0.56  
 Median : 0.017   Median :-0.35  
 Mean   : 0.000   Mean   : 0.00  
 3rd Qu.: 0.693   3rd Qu.: 0.18  
 Max.   : 1.788   Max.   : 4.59  

Os escores fatoriais estimados dos respondentes nos dois fatores comuns extraídos são valores padronizados (escore-z). E.g., o primeiro respondente tem escores fatoriais estimados nos fatores comuns de felicidade extrínseca e intrínseca iguais a -1.07 e 0.11 desvios-padrão, respectivamente. Observar que os escores fatoriais têm correlação de Pearson não significante igual a 0.035.

Exemplo: WHOQOL

Retomando o exemplo do WHOQOL-BREF com os dados disponíveis em WHOQOL.rds, verificaremos o que podemos obter inicialmente com EFA, implementada em demo_EFA_WHOQOL.R.

source("eiras.showdataframe.R")
source("eiras.bartitle.R")
Dados <- readRDS("WHOQOL.rds")
n <- nrow(Dados)

# todas as colunas tratadas como ordinais
Dados[,-1] <- lapply(Dados[,-1],as.ordered)

r <- polycor::hetcor(Dados[-1], 
                     use="complete.obs", 
                     pd=TRUE)
print(r, digits=2)
r.hetcor <- r$correlations

cat(bartitle("Singular values"))
sv <- svd(r.hetcor)$d
dt <- data.frame(1:length(sv),format(as.numeric(sv), digits=2, nsmall=2))
names(dt) <- c("component","value")
print(dt)
plot(sv, 
     xlab="Component", ylab="Singular value", 
     type="o", pch=16, axes=FALSE)
axis(1, at=1:length(sv))
axis(2)
abline(h=1,col="darkgray",lty=2)

cat(bartitle("Model heuristic"))
sv1maior <- sv[1]
sv2maior <- sv[2]
H <- NA
if(sv2maior>0) {H <- sv1maior/sv2maior}
cat("FirstSV/SecondSV = H = ",round(sv1maior,2),"/",round(sv2maior,2)," ~ ",round(H,2),"\n",sep="")
cat("\t- if < 2: first order\n")
cat("\t- if > 3: unifactor\n")
cat("\t- otherwise: bifactor\n")
if (H <= 2) {txt <- "\tpossible first order model, sv1/sv2 <= 2"}
if (H > 2 & H <= 3) {txt <- "\tpossible bifactor model, 2 < sv1/sv2 <= 3"}
if (H > 3) {txt <- "\tpossible unifactor model, sv1/sv2 > 3"}
cat(txt)

cat(bartitle("Condition index"))
sv.maior <- sv[1]
sv.menor <- sv[length(sv)]
IC <- NA
if(sv.menor>0) {IC <- sqrt(sv.maior/sv.menor)}
cat("(MaxSV/MinSV)^0.5 = CI = (",round(sv.maior,2),"/",round(sv.menor,2),")^0.5 ~ ",round(IC,1),"\n",sep="")
cat("\t(analysis may be jeopardized if index > 30)\n",sep="")

cat(bartitle("Exploratory Common Factor Analysis (EFA)"))
cat(bartitle("suggested number of common factors",2))
print(psych::fa.parallel(x=r.hetcor, n.obs=n, plot=FALSE)$p)

cat(bartitle("usefulness of correlation matrix",2))
print(psych::KMO(r.hetcor))

cat(bartitle("EFA",2))

cat(bartitle("tentando como unifatorial",3))
num.factors <- 1
fa.fit <- psych::fa(r=r.hetcor,
                    n.obs=n,
                    nfactors=num.factors)
print(fa.fit, sort=TRUE, digits=2, cut=.3)
psych::fa.diagram(fa.fit, 
                  main="WHOQOL",
                  cut=0.3,
                  digits=1,
                  sort=TRUE)
cat(bartitle("Heuristic for model rejection:",2))
cat("X^2 = ",fa.fit$chi,"\n",sep="")
cat("df = ",fa.fit$dof,"\n",sep="")
cat("X^2/df = ",fa.fit$chi/fa.fit$dof,"\n",sep="")
cat("(model may possibly be rejected when X^2/df > 2)\n",sep="")

cat(bartitle("primeira ordem com 4 fatores comuns (seguindo WHO)",3))
num.factors <- 4
fa.fit <- psych::fa(r=r.hetcor,
                    n.obs=n,
                    nfactors=num.factors)
print(fa.fit, sort=TRUE, digits=2, cut=.3)
psych::fa.diagram(fa.fit, 
                  main="WHOQOL",
                  cut=0.3,
                  digits=1,
                  sort=TRUE)
cat(bartitle("Heuristic for model rejection:",2))
cat("X^2 = ",fa.fit$chi,"\n",sep="")
cat("df = ",fa.fit$dof,"\n",sep="")
cat("X^2/df = ",fa.fit$chi/fa.fit$dof,"\n",sep="")
cat("(model may possibly be rejected when X^2/df > 2)\n",sep="")

cat(bartitle("tentando como bifatorial com 4 fatores especificos e 1 geral",3))
num.factors <- 4
fabi.fit <- psych::omega(m=r.hetcor,
                         n.obs=n,
                         nfactors=num.factors,
                         cut=0.3)
print(fabi.fit, sort=FALSE, digits=2, cut=0.3)
print(psych::omega.diagram(fabi.fit,main="WHOQOL",
                           cut=0.3,
                           gcut=0.3,
                           sort=TRUE))

cat(bartitle("Heuristic for model rejection:",2))
cat("X^2 = ",fabi.fit$stats$chi,"\n",sep="")
cat("df = ",fabi.fit$stats$dof,"\n",sep="")
cat("X^2/df = ",fabi.fit$stats$chi/fabi.fit$stats$dof,"\n",sep="")
cat("(model may possibly be rejected when X^2/df > 2)\n",sep="")

Two-Step Estimates

Correlations/Type of Correlation:
       Q3         Q4         Q5         Q6         Q7         Q8         Q9
Q3      1 Polychoric Polychoric Polychoric Polychoric Polychoric Polychoric
Q4   0.44          1 Polychoric Polychoric Polychoric Polychoric Polychoric
Q5   -0.2      -0.23          1 Polychoric Polychoric Polychoric Polychoric
Q6  -0.18      -0.23        0.5          1 Polychoric Polychoric Polychoric
Q7  -0.19      -0.26       0.35       0.41          1 Polychoric Polychoric
Q8  -0.23      -0.28       0.47       0.54       0.52          1 Polychoric
Q9  -0.22      -0.21       0.28       0.23       0.29       0.33          1
Q10 -0.29      -0.34       0.49        0.4       0.55       0.53       0.33
Q11 -0.22      -0.27       0.35       0.39        0.3       0.45        0.2
Q12 -0.21       -0.2       0.32       0.22       0.21       0.24       0.27
Q13 -0.19      -0.22       0.29       0.29       0.27       0.33       0.31
Q14 -0.18      -0.19        0.6       0.25       0.26       0.31       0.27
Q15 -0.23      -0.21       0.24       0.23        0.2       0.21       0.27
Q16 -0.22      -0.25       0.37       0.25       0.37       0.34       0.29
Q17 -0.26      -0.32       0.46       0.42       0.54       0.52       0.31
Q18 -0.25       -0.3       0.41       0.45       0.56       0.52       0.27
Q19 -0.23      -0.29       0.51       0.56       0.51       0.61       0.29
Q20 -0.19      -0.25       0.49       0.44       0.33       0.45       0.28
Q21  -0.1      -0.16       0.35       0.35       0.23        0.3       0.16
Q22 -0.15      -0.18       0.38       0.35       0.26       0.33        0.2
Q23 -0.13      -0.15       0.29       0.26       0.18       0.23       0.37
Q24 -0.17      -0.17       0.25       0.17       0.12       0.19       0.25
Q25  -0.1      -0.11        0.2       0.15      0.094       0.18       0.22
Q26  0.25       0.36      -0.41      -0.46      -0.39      -0.54      -0.24
           Q10        Q11        Q12        Q13        Q14        Q15
Q3  Polychoric Polychoric Polychoric Polychoric Polychoric Polychoric
Q4  Polychoric Polychoric Polychoric Polychoric Polychoric Polychoric
Q5  Polychoric Polychoric Polychoric Polychoric Polychoric Polychoric
Q6  Polychoric Polychoric Polychoric Polychoric Polychoric Polychoric
Q7  Polychoric Polychoric Polychoric Polychoric Polychoric Polychoric
Q8  Polychoric Polychoric Polychoric Polychoric Polychoric Polychoric
Q9  Polychoric Polychoric Polychoric Polychoric Polychoric Polychoric
Q10          1 Polychoric Polychoric Polychoric Polychoric Polychoric
Q11       0.43          1 Polychoric Polychoric Polychoric Polychoric
Q12       0.27       0.29          1 Polychoric Polychoric Polychoric
Q13        0.3       0.28        0.4          1 Polychoric Polychoric
Q14       0.41       0.23       0.35       0.39          1 Polychoric
Q15       0.24       0.18       0.34       0.34       0.23          1
Q16       0.52       0.25       0.22       0.22       0.38        0.2
Q17       0.66       0.38       0.25       0.32       0.36       0.29
Q18       0.62       0.38       0.23       0.32       0.32       0.24
Q19       0.56       0.55       0.25       0.31       0.31       0.22
Q20       0.38       0.36       0.24       0.29       0.35       0.24
Q21       0.27       0.37       0.18       0.18       0.24       0.15
Q22       0.26       0.25       0.22       0.25       0.25        0.2
Q23       0.16       0.22        0.4       0.29       0.25       0.34
Q24       0.17       0.16       0.39       0.34       0.29       0.29
Q25       0.11       0.16       0.38       0.23       0.21       0.56
Q26       -0.5      -0.37      -0.19      -0.19      -0.27      -0.14
           Q16        Q17        Q18        Q19        Q20        Q21
Q3  Polychoric Polychoric Polychoric Polychoric Polychoric Polychoric
Q4  Polychoric Polychoric Polychoric Polychoric Polychoric Polychoric
Q5  Polychoric Polychoric Polychoric Polychoric Polychoric Polychoric
Q6  Polychoric Polychoric Polychoric Polychoric Polychoric Polychoric
Q7  Polychoric Polychoric Polychoric Polychoric Polychoric Polychoric
Q8  Polychoric Polychoric Polychoric Polychoric Polychoric Polychoric
Q9  Polychoric Polychoric Polychoric Polychoric Polychoric Polychoric
Q10 Polychoric Polychoric Polychoric Polychoric Polychoric Polychoric
Q11 Polychoric Polychoric Polychoric Polychoric Polychoric Polychoric
Q12 Polychoric Polychoric Polychoric Polychoric Polychoric Polychoric
Q13 Polychoric Polychoric Polychoric Polychoric Polychoric Polychoric
Q14 Polychoric Polychoric Polychoric Polychoric Polychoric Polychoric
Q15 Polychoric Polychoric Polychoric Polychoric Polychoric Polychoric
Q16          1 Polychoric Polychoric Polychoric Polychoric Polychoric
Q17       0.55          1 Polychoric Polychoric Polychoric Polychoric
Q18       0.47       0.82          1 Polychoric Polychoric Polychoric
Q19        0.4       0.68       0.67          1 Polychoric Polychoric
Q20        0.3       0.44       0.41       0.54          1 Polychoric
Q21       0.22       0.28       0.29       0.41       0.43          1
Q22       0.21       0.29       0.29       0.35        0.6       0.36
Q23       0.13       0.21       0.22       0.26        0.3       0.22
Q24       0.15       0.18       0.19        0.2       0.23       0.14
Q25       0.14       0.16       0.14       0.15       0.17       0.14
Q26      -0.37      -0.45      -0.46      -0.54      -0.45       -0.3
           Q22        Q23        Q24        Q25        Q26
Q3  Polychoric Polychoric Polychoric Polychoric Polychoric
Q4  Polychoric Polychoric Polychoric Polychoric Polychoric
Q5  Polychoric Polychoric Polychoric Polychoric Polychoric
Q6  Polychoric Polychoric Polychoric Polychoric Polychoric
Q7  Polychoric Polychoric Polychoric Polychoric Polychoric
Q8  Polychoric Polychoric Polychoric Polychoric Polychoric
Q9  Polychoric Polychoric Polychoric Polychoric Polychoric
Q10 Polychoric Polychoric Polychoric Polychoric Polychoric
Q11 Polychoric Polychoric Polychoric Polychoric Polychoric
Q12 Polychoric Polychoric Polychoric Polychoric Polychoric
Q13 Polychoric Polychoric Polychoric Polychoric Polychoric
Q14 Polychoric Polychoric Polychoric Polychoric Polychoric
Q15 Polychoric Polychoric Polychoric Polychoric Polychoric
Q16 Polychoric Polychoric Polychoric Polychoric Polychoric
Q17 Polychoric Polychoric Polychoric Polychoric Polychoric
Q18 Polychoric Polychoric Polychoric Polychoric Polychoric
Q19 Polychoric Polychoric Polychoric Polychoric Polychoric
Q20 Polychoric Polychoric Polychoric Polychoric Polychoric
Q21 Polychoric Polychoric Polychoric Polychoric Polychoric
Q22          1 Polychoric Polychoric Polychoric Polychoric
Q23       0.33          1 Polychoric Polychoric Polychoric
Q24       0.29       0.45          1 Polychoric Polychoric
Q25       0.16       0.42       0.38          1 Polychoric
Q26      -0.31      -0.15      -0.16     -0.062          1

Standard Errors:
       Q3    Q4    Q5    Q6    Q7    Q8    Q9   Q10   Q11   Q12   Q13   Q14
Q3                                                                         
Q4  0.019                                                                  
Q5  0.022 0.022                                                            
Q6  0.022 0.022 0.017                                                      
Q7  0.022 0.021 0.019 0.019                                                
Q8  0.021 0.021 0.017 0.016 0.016                                          
Q9  0.021 0.022  0.02 0.021  0.02 0.019                                    
Q10 0.021  0.02 0.017 0.019 0.015 0.016  0.02                              
Q11 0.021 0.021 0.019 0.019  0.02 0.017 0.021 0.018                        
Q12 0.021 0.021 0.019 0.021 0.021  0.02  0.02  0.02 0.019                  
Q13 0.022 0.022  0.02 0.021 0.021  0.02  0.02 0.021  0.02 0.018            
Q14 0.022 0.022 0.014 0.021  0.02  0.02  0.02 0.018 0.021 0.019 0.019      
Q15 0.023 0.023 0.022 0.023 0.023 0.023 0.022 0.023 0.023 0.021 0.021 0.023
Q16 0.021 0.021 0.018 0.021 0.018 0.019  0.02 0.016  0.02  0.02 0.021 0.018
Q17 0.021  0.02 0.017 0.018 0.015 0.015 0.019 0.013 0.018  0.02  0.02 0.019
Q18 0.021  0.02 0.018 0.018 0.015 0.016  0.02 0.013 0.018  0.02  0.02 0.019
Q19 0.021  0.02 0.016 0.015 0.016 0.014  0.02 0.015 0.015  0.02  0.02 0.019
Q20 0.022 0.021 0.016 0.018 0.019 0.017  0.02 0.019 0.018  0.02  0.02 0.019
Q21 0.022 0.022 0.019 0.019  0.02 0.019 0.021  0.02 0.018 0.021 0.021  0.02
Q22 0.022 0.022 0.019  0.02  0.02 0.019 0.021 0.021  0.02 0.021 0.021  0.02
Q23 0.023 0.023  0.02 0.021 0.022 0.021 0.019 0.022 0.021 0.018 0.021 0.021
Q24 0.022 0.022  0.02 0.022 0.022 0.021  0.02 0.022 0.021 0.018 0.019  0.02
Q25 0.023 0.022 0.021 0.022 0.022 0.021 0.021 0.022 0.021 0.018 0.021 0.021
Q26 0.021  0.02 0.018 0.017 0.018 0.015 0.021 0.016 0.018 0.021 0.021  0.02
      Q15   Q16    Q17   Q18   Q19   Q20   Q21   Q22   Q23   Q24   Q25
Q3                                                                    
Q4                                                                    
Q5                                                                    
Q6                                                                    
Q7                                                                    
Q8                                                                    
Q9                                                                    
Q10                                                                   
Q11                                                                   
Q12                                                                   
Q13                                                                   
Q14                                                                   
Q15                                                                   
Q16 0.023                                                             
Q17 0.022 0.015                                                       
Q18 0.023 0.016 0.0071                                                
Q19 0.023 0.018  0.011 0.012                                          
Q20 0.022 0.019  0.017 0.018 0.015                                    
Q21 0.023  0.02  0.019  0.02 0.018 0.017                              
Q22 0.023 0.021   0.02  0.02 0.019 0.014 0.018                        
Q23 0.021 0.022  0.021 0.021 0.021  0.02 0.021  0.02                  
Q24 0.021 0.021  0.021 0.021 0.021  0.02 0.021  0.02 0.017            
Q25 0.016 0.021  0.021 0.022 0.021 0.021 0.021 0.021 0.018 0.018      
Q26 0.023 0.018  0.017 0.017 0.015 0.017 0.019  0.02 0.022 0.021 0.022

n = 2680 

P-values for Tests of Bivariate Normality:
         Q3     Q4      Q5      Q6      Q7      Q8      Q9     Q10     Q11
Q3                                                                        
Q4  6.4e-05                                                               
Q5    0.043  0.069                                                        
Q6    0.033  0.046 4.3e-11                                                
Q7   0.0073   0.26 3.6e-05 5.1e-06                                        
Q8    0.062   0.15 2.4e-07 2.6e-05 1.6e-17                                
Q9     0.14   0.15   0.029    0.23 0.00057  0.0067                        
Q10    0.16   0.18    0.12 0.00071 4.2e-06 0.00058    0.11                
Q11    0.34  0.025 6.5e-05  0.0022 1.8e-07   8e-04  0.0041    0.11        
Q12    0.51   0.22 2.5e-05  0.0088  0.0036 8.8e-05   0.003 3.6e-05 8.1e-07
Q13 0.00044  0.001 0.00044  0.0022   0.028  0.0076   0.012  0.0015   0.048
Q14   0.083  0.037 1.2e-07 0.00045   0.013 0.00033  0.0061  0.0047 7.9e-07
Q15    0.02   0.35    0.56    0.48   0.053    0.79  0.0011    0.23  0.0019
Q16    0.68  0.039  0.0097     0.2  0.0047 4.7e-05  0.0031 2.4e-06   0.027
Q17   0.018   0.97 1.2e-05 8.9e-07 0.00018 0.00011    0.29   0.028  0.0049
Q18  0.0055   0.13 1.6e-06 5.5e-09 5.3e-09 0.00026   0.017    0.01 0.00066
Q19   0.089  0.025 6.6e-06   2e-09 3.2e-07 0.00014   0.024   0.034 5.1e-09
Q20    0.61   0.31 1.1e-06   0.018 7.8e-06 4.9e-05    0.13 0.00023  0.0088
Q21   0.038   0.04    0.17   5e-05 0.00012   0.002    0.38    0.34   0.003
Q22   0.026  0.067   0.013 0.00056 0.00045   0.083    0.06  0.0047   2e-05
Q23    0.29 0.0013   0.046    0.55    0.15   0.097 8.9e-07   0.031   0.064
Q24   0.058  0.097    0.24     0.2     0.2  0.0042   0.048       1   0.013
Q25  0.0037  0.013    0.37    0.92   0.038    0.16   0.013  0.0055   0.093
Q26     0.5   0.71  0.0082   7e-06 1.6e-06 7.9e-07    0.15 1.6e-06   0.023
        Q12     Q13     Q14     Q15     Q16     Q17     Q18     Q19     Q20
Q3                                                                         
Q4                                                                         
Q5                                                                         
Q6                                                                         
Q7                                                                         
Q8                                                                         
Q9                                                                         
Q10                                                                        
Q11                                                                        
Q12                                                                        
Q13   0.023                                                                
Q14 0.00079 6.9e-09                                                        
Q15  0.0091    0.17    0.16                                                
Q16 0.00062    0.23   0.016    0.42                                        
Q17  0.0018 0.00012  0.0013  0.0057 1.7e-06                                
Q18    0.27  0.0019  0.0012 0.00079 7.9e-05 1.9e-39                        
Q19   0.016    0.12    0.25    0.19   0.019 8.3e-08 8.6e-14                
Q20   0.029    0.26   0.077   0.016  0.0038 1.5e-06 4.1e-05 5.5e-06        
Q21   0.009    0.11  0.0048   0.092  0.0011 0.00026 6.2e-06 1.2e-07 1.4e-11
Q22    0.18  0.0074    0.13  0.0065    0.13 9.4e-05  0.0045 2.8e-09   7e-14
Q23 3.8e-05 1.5e-05    0.16 1.8e-05  0.0012 6.6e-05  0.0017 0.00059   0.021
Q24   0.046   0.077  0.0024  0.0071   0.011    0.24  0.0055   0.013   0.022
Q25 0.00014   0.052    0.18 6.9e-28    0.01   0.021 0.00043  0.0011     0.2
Q26 0.00055  0.0065 0.00058    0.55 2.2e-07 2.5e-06   4e-06 2.6e-05   0.023
        Q21     Q22     Q23     Q24   Q25
Q3                                       
Q4                                       
Q5                                       
Q6                                       
Q7                                       
Q8                                       
Q9                                       
Q10                                      
Q11                                      
Q12                                      
Q13                                      
Q14                                      
Q15                                      
Q16                                      
Q17                                      
Q18                                      
Q19                                      
Q20                                      
Q21                                      
Q22 3.1e-05                              
Q23 4.1e-05 5.6e-08                      
Q24  0.0021 0.00028   6e-19              
Q25   0.027  0.0029 6.9e-09 1.2e-07      
Q26   0.009 0.00012     0.1    0.42 0.014

---------------
Singular values
---------------
   component value
1          1  8.31
2          2  2.22
3          3  1.41
4          4  1.13
5          5  1.04
6          6  0.88
7          7  0.86
8          8  0.76
9          9  0.75
10        10  0.72
11        11  0.60
12        12  0.59
13        13  0.58
14        14  0.54
15        15  0.52
16        16  0.48
17        17  0.44
18        18  0.42
19        19  0.37
20        20  0.35
21        21  0.32
22        22  0.31
23        23  0.25
24        24  0.16


---------------
Model heuristic
---------------
FirstSV/SecondSV = H = 8.31/2.22 ~ 3.75
    - if < 2: first order
    - if > 3: unifactor
    - otherwise: bifactor
    possible unifactor model, sv1/sv2 > 3
---------------
Condition index
---------------
(MaxSV/MinSV)^0.5 = CI = (8.31/0.16)^0.5 ~ 7.2
    (analysis may be jeopardized if index > 30)

----------------------------------------
Exploratory Common Factor Analysis (EFA)
----------------------------------------

    ----------------------------------
    suggested number of common factors
    ----------------------------------
Parallel analysis suggests that the number of factors =  7  and the number of components =  4 
NULL

    --------------------------------
    usefulness of correlation matrix
    --------------------------------
Kaiser-Meyer-Olkin factor adequacy
Call: psych::KMO(r = r.hetcor)
Overall MSA =  0.92
MSA for each item = 
  Q3   Q4   Q5   Q6   Q7   Q8   Q9  Q10  Q11  Q12  Q13  Q14  Q15  Q16  Q17  Q18 
0.88 0.91 0.91 0.95 0.96 0.95 0.94 0.95 0.93 0.93 0.91 0.88 0.85 0.95 0.90 0.91 
 Q19  Q20  Q21  Q22  Q23  Q24  Q25  Q26 
0.95 0.92 0.95 0.89 0.90 0.90 0.80 0.95 

    ---
    EFA
    ---

        -------------------------
        tentando como unifatorial
        -------------------------
Factor Analysis using method =  minres
Call: psych::fa(r = r.hetcor, nfactors = num.factors, n.obs = n)
Standardized loadings (pattern matrix) based upon correlation matrix
     V   MR1   h2   u2 com
Q19 17  0.78 0.61 0.39   1
Q17 15  0.76 0.58 0.42   1
Q18 16  0.73 0.54 0.46   1
Q10  8  0.72 0.52 0.48   1
Q8   6  0.71 0.50 0.50   1
Q5   3  0.67 0.45 0.55   1
Q20 18  0.65 0.42 0.58   1
Q6   4  0.63 0.39 0.61   1
Q26 24 -0.62 0.38 0.62   1
Q7   5  0.61 0.37 0.63   1
Q11  9  0.56 0.31 0.69   1
Q16 14  0.55 0.30 0.70   1
Q14 12  0.53 0.28 0.72   1
Q22 20  0.50 0.25 0.75   1
Q13 11  0.49 0.24 0.76   1
Q21 19  0.46 0.21 0.79   1
Q9   7  0.46 0.21 0.79   1
Q12 10  0.45 0.21 0.79   1
Q4   2 -0.43 0.19 0.81   1
Q23 21  0.43 0.18 0.82   1
Q15 13  0.41 0.17 0.83   1
Q24 22  0.38 0.14 0.86   1
Q3   1 -0.37 0.13 0.87   1
Q25 23  0.32 0.10 0.90   1

                MR1
SS loadings    7.70
Proportion Var 0.32

Mean item complexity =  1
Test of the hypothesis that 1 factor is sufficient.

df null model =  276  with the objective function =  10.6 with Chi Square =  28346.72
df of  the model are 252  and the objective function was  3.27 

The root mean square of the residuals (RMSR) is  0.09 
The df corrected root mean square of the residuals is  0.09 

The harmonic n.obs is  2684 with the empirical chi square  10720.83  with prob <  0 
The total n.obs was  2684  with Likelihood Chi Square =  8754.1  with prob <  0 

Tucker Lewis Index of factoring reliability =  0.668
RMSEA index =  0.112  and the 90 % confidence intervals are  0.11 0.114
BIC =  6764.55
Fit based upon off diagonal values = 0.93
Measures of factor score adequacy             
                                                   MR1
Correlation of (regression) scores with factors   0.96
Multiple R square of scores with factors          0.93
Minimum correlation of possible factor scores     0.86


    ------------------------------
    Heuristic for model rejection:
    ------------------------------
X^2 = 10720.83
df = 252
X^2/df = 42.54298
(model may possibly be rejected when X^2/df > 2)

        --------------------------------------------------
        primeira ordem com 4 fatores comuns (seguindo WHO)
        --------------------------------------------------
Factor Analysis using method =  minres
Call: psych::fa(r = r.hetcor, nfactors = num.factors, n.obs = n)
Standardized loadings (pattern matrix) based upon correlation matrix
    item   MR1   MR2   MR3   MR4   h2   u2 com
Q17   15  0.85                   0.73 0.27 1.0
Q18   16  0.84                   0.68 0.32 1.0
Q10    8  0.75                   0.65 0.35 1.1
Q7     5  0.63                   0.44 0.56 1.0
Q19   17  0.61        0.37       0.70 0.30 1.7
Q16   14  0.54                   0.39 0.61 1.4
Q8     6  0.51        0.30       0.53 0.47 1.6
Q26   24 -0.47       -0.30       0.44 0.56 1.8
Q4     2 -0.39                   0.20 0.80 1.3
Q11    9  0.34                   0.34 0.66 2.2
Q3     1 -0.34                   0.16 0.84 1.7
Q25   23        0.72             0.47 0.53 1.0
Q15   13        0.64             0.43 0.57 1.2
Q23   21        0.59             0.44 0.56 1.3
Q24   22        0.54             0.36 0.64 1.2
Q12   10        0.52             0.39 0.61 1.2
Q13   11        0.37             0.31 0.69 1.9
Q9     7        0.32             0.25 0.75 2.0
Q20   18              0.64       0.59 0.41 1.1
Q22   20              0.58       0.42 0.58 1.2
Q21   19              0.49       0.31 0.69 1.1
Q6     4  0.31        0.45       0.46 0.54 1.8
Q14   12                    0.87 0.80 0.20 1.0
Q5     3              0.34  0.47 0.58 0.42 2.1

                       MR1  MR2  MR3  MR4
SS loadings           4.78 2.47 2.34 1.48
Proportion Var        0.20 0.10 0.10 0.06
Cumulative Var        0.20 0.30 0.40 0.46
Proportion Explained  0.43 0.22 0.21 0.13
Cumulative Proportion 0.43 0.66 0.87 1.00

 With factor correlations of 
     MR1  MR2  MR3  MR4
MR1 1.00 0.32 0.52 0.43
MR2 0.32 1.00 0.31 0.37
MR3 0.52 0.31 1.00 0.31
MR4 0.43 0.37 0.31 1.00

Mean item complexity =  1.4
Test of the hypothesis that 4 factors are sufficient.

df null model =  276  with the objective function =  10.6 with Chi Square =  28346.72
df of  the model are 186  and the objective function was  1.13 

The root mean square of the residuals (RMSR) is  0.04 
The df corrected root mean square of the residuals is  0.04 

The harmonic n.obs is  2684 with the empirical chi square  1842.26  with prob <  4.2e-270 
The total n.obs was  2684  with Likelihood Chi Square =  3031.96  with prob <  0 

Tucker Lewis Index of factoring reliability =  0.849
RMSEA index =  0.076  and the 90 % confidence intervals are  0.073 0.078
BIC =  1563.48
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy             
                                                   MR1  MR2  MR3  MR4
Correlation of (regression) scores with factors   0.96 0.89 0.89 0.91
Multiple R square of scores with factors          0.92 0.80 0.80 0.83
Minimum correlation of possible factor scores     0.83 0.59 0.60 0.67


    ------------------------------
    Heuristic for model rejection:
    ------------------------------
X^2 = 1842.265
df = 186
X^2/df = 9.90465
(model may possibly be rejected when X^2/df > 2)

        ------------------------------------------------------------
        tentando como bifatorial com 4 fatores especificos e 1 geral
        ------------------------------------------------------------

Omega 
Call: omegah(m = m, nfactors = nfactors, fm = fm, key = key, flip = flip, 
    digits = digits, title = title, sl = sl, labels = labels, 
    plot = plot, n.obs = n.obs, rotate = rotate, Phi = Phi, option = option, 
    covar = covar, cut = 0.3)
Alpha:                 0.91 
G.6:                   0.93 
Omega Hierarchical:    0.67 
Omega H asymptotic:    0.72 
Omega Total            0.93 

Schmid Leiman Factor loadings greater than  0.3 
         g   F1*   F2*   F3*   F4*    h2   h2   u2   p2  com
Q3-   0.30                               0.16 0.84 0.56 2.54
Q4-   0.35                               0.20 0.80 0.61 2.18
Q5    0.61                    0.38  0.58 0.58 0.42 0.63 2.19
Q6    0.53        0.35              0.46 0.46 0.54 0.61 2.11
Q7    0.50  0.42                    0.44 0.44 0.56 0.58 1.96
Q8    0.59  0.34                    0.53 0.53 0.47 0.65 1.99
Q9    0.39                               0.25 0.75 0.60 2.25
Q10   0.61  0.50                    0.65 0.65 0.35 0.58 2.04
Q11   0.47                          0.34 0.34 0.66 0.64 2.08
Q12   0.40              0.45        0.39 0.39 0.61 0.42 2.19
Q13   0.42              0.32        0.31 0.31 0.69 0.57 2.26
Q14   0.54                    0.71  0.80 0.80 0.20 0.36 1.87
Q15   0.35              0.55        0.43 0.43 0.57 0.29 1.85
Q16   0.47  0.36                    0.39 0.39 0.61 0.58 2.27
Q17   0.64  0.57                    0.73 0.73 0.27 0.56 2.00
Q18   0.61  0.56                    0.68 0.68 0.32 0.55 1.99
Q19   0.65  0.41                    0.70 0.70 0.30 0.61 2.13
Q20   0.57        0.50              0.59 0.59 0.41 0.55 2.08
Q21   0.40        0.38              0.31 0.31 0.69 0.52 2.06
Q22   0.44        0.45              0.42 0.42 0.58 0.47 2.23
Q23   0.38              0.51        0.44 0.44 0.56 0.32 2.13
Q24   0.34              0.47        0.36 0.36 0.64 0.31 2.00
Q25                     0.62        0.47 0.47 0.53 0.17 1.41
Q26-  0.52  0.32                    0.44 0.44 0.56 0.61 2.14

With Sums of squares  of:
   g  F1*  F2*  F3*  F4*   h2 
5.68 1.86 1.09 1.63 0.78 5.75 

general/max  0.99   max/min =   7.37
mean percent general =  0.51    with sd =  0.13 and cv of  0.26 
Explained Common Variance of the general factor =  0.51 

The degrees of freedom are 186  and the fit is  1.13 
The number of observations was  2684  with Chi Square =  3031.96  with prob <  0
The root mean square of the residuals is  0.04 
The df corrected root mean square of the residuals is  0.04
RMSEA index =  0.076  and the 90 % confidence intervals are  0.073 0.078
BIC =  1563.48

Compare this with the adequacy of just a general factor and no group factors
The degrees of freedom for just the general factor are 252  and the fit is  3.67 
The number of observations was  2684  with Chi Square =  9813.62  with prob <  0
The root mean square of the residuals is  0.12 
The df corrected root mean square of the residuals is  0.13 

RMSEA index =  0.119  and the 90 % confidence intervals are  0.117 0.121
BIC =  7824.06 

Measures of factor score adequacy             
                                                 g  F1*  F2*  F3*  F4*
Correlation of scores with factors            0.83 0.73 0.75 0.81 0.81
Multiple R square of scores with factors      0.69 0.54 0.57 0.66 0.66
Minimum correlation of factor score estimates 0.39 0.08 0.14 0.33 0.31

 Total, General and Subset omega for each subset
                                                 g  F1*  F2*  F3*  F4*
Omega total for total scores and subscales    0.93 0.88 0.74 0.78 0.78
Omega general for total scores and subscales  0.67 0.56 0.45 0.31 0.41
Omega group for total scores and subscales    0.16 0.32 0.29 0.47 0.37

NULL

    ------------------------------
    Heuristic for model rejection:
    ------------------------------
X^2 = 2141.171
df = 166
X^2/df = 12.89862
(model may possibly be rejected when X^2/df > 2)

Explained Common Variance (ECV)

A importância do fator geral g em relação ao modelo bifatorial como um todo (calculada pelo eigenvalue do fator geral em relação à somatória dos eigenvalues) dá uma noção da unidimensionalidade de uma possível solução (se for um valor muito alto, talvez o modelo unifatorial seja o melhor candidato; se for muito baixo, talvez o modelo de primeira ordem seja o mais indicado). Este valor aparece na saída como Explained Common Variance of the general factor (ECV).

Explained Common Variance of the general factor =  0.51 

Ômega

Os valores de ômega que aparecem na saída são medidas de tamanho de efeito e, portanto, de significância prática do modelo. Análogo ao alfa de Cronbach, o ômega total é seu análogo escolhido por vários autores.

O ômega hierárquico é similar ao ECV (a proporção da variância total explicada pelo fator comum geral), e portanto dá indicações sobre a uni ou multidimensionalidade do modelo.

O ômega assintótico é a proporção entre o ômega hierárquico e o total, complementando esta interpretação.

Omega Total            0.93 
Omega Hierarchical:    0.67 
Omega H asymptotic:    0.72 

Neste exemplo, 93% da variância total é explicada pelo modelo adotado pelos fatores geral e específicos e 67% (72% de 93%) da variância total é explicada apenas pelo fator geral. Assim, o fator geral parece contribuir importantemente para o modelo, mas cerca de outros 30% dependem de considerarmos os fatores específicos, justificando experimentarmos o ajuste com o modelo bifatorial.

A análise de valores singulares sugere 4 ou 5 domínios (para 5 está no limite). Por parcimônia e para comparar com a proposta da WHO, ensaiamos os modelos de primeira ordem com 4 fatores comuns e bifatorial com um fator comum geral e 4 específicos.

Recorde a proposta para o WHOQOL-BREF (Manual do Projeto VERAS (2011)):

No entanto, os quatro domínios divergem daqueles propostos pela WHO: físico (F), psicológico (P), relações sociais (S) e ambiente (A).

Q20, Q21 e Q22 (relações sociais) foram juntadas a Q6 (psicológico):

      1. Quão satisfeito(a) você está com suas relações pessoais (amigos, parentes, conhecidos, colegas)?
      1. Quão satisfeito(a) você está com sua vida sexual?
      1. Quão satisfeito(a) você está com o apoio que você recebe de seus amigos?
      1. Em que medida você acha que a sua vida tem sentido?

Q5 (psicológico) e Q14 (ambiente) formaram um domínio pequeno:

      1. O quanto você aproveita a vida?
      1. Em que medida você tem oportunidades de atividade de lazer?

Apareceram dois domínios maiores:

Uma mistura majoritariamene dos domínios originais físico e psicológico Q17, Q18, Q10, Q7, Q19, Q16, Q8 (a única do ambiente), Q26, Q4, Q11 e Q3:

      1. Quão satisfeito(a) você está com sua capacidade de desempenhar as atividades do seu dia-a-dia?
      1. Quão satisfeito(a) você está com sua capacidade para o trabalho?
      1. Você tem energia suficiente para seu dia-a-dia?
      1. O quanto você consegue se concentrar?
      1. Quão satisfeito(a) você está consigo mesmo?
      1. Quão satisfeito(a) você está com o seu sono?
      1. Quão seguro(a) você se sente em sua vida diária?
      1. Com que freqüência você tem sentimentos negativos tais como mau humor, desespero, ansiedade, depressão?
      1. O quanto você precisa de algum tratamento médico para levar sua vida diária?
      1. Você é capaz de aceitar sua aparência física?
      1. Em que medida você acha que sua dor (física) impede você de fazer o que você precisa?

e o outro quase que exclusivamente do domínio ambiental Q25, Q15, Q23, Q24, Q12, Q13 e Q9:

      1. Quão satisfeito(a) você está com o seu meio de transporte?
      1. Quão bem você é capaz de se locomover?
      1. Quão satisfeito(a) você está com as condições do local onde mora?
      1. Quão satisfeito(a) você está com o seu acesso aos serviços de saúde?
      1. Você tem dinheiro suficiente para satisfazer suas necessidades?
      1. Quão disponíveis para você estão as informações que precisa no seu dia-a-dia?
      1. Quão saudável é o seu ambiente físico (clima, barulho, poluição, atrativos)?

Duas observações:

(1) Os diagramas da EFA que mostramos aqui exibem apenas as conexões com carga fatorial igual ou superior a um determinado valor (escolhemos 0.3 nestas saídas), o que é enganoso. Na EFA, todos os fatores comuns apontam para todos os itens. O diagrama, a rigor, deveria ser apresentado completamente, mas torna-se ilegível e não ajuda a definir a quais itens um fator comum pode ser proposto na análise confirmatória.

(2) A heurística do modelo que computamos

---------------
Model heuristic
---------------
FirstSV/SecondSV = H = 8.31/2.21 ~ 3.75
    - if < 2: first order
    - if > 3: unifactor
    - otherwise: bifactor
    possible bifactor model, 2 < sv1/sv2 <= 3

sugeriu um modelo bifatorial e, portanto, também experimentamos com ele. Há duas saídas gráficas: considere somente a segunda. A primeira vem da função psych::omega que emite seu gráfico e não encontramos parâmetro para suprimi-lo. A solução rotacionada é a segunda, exibida por psych::omega.diagram, na qual usamos os parâmetros cut=0.3 e gcut=0.3, gerando:

print(psych::omega.diagram(fabi.fit,
                           main="WHOQOL",
                           cut=0.3,
                           gcut=0.3,
                           sort=TRUE))

NULL

Um aspecto notável na EFA (e CFA) é que não necessitamos inverter as questões Q3, Q4 e Q26. Questões com valência negativa naturalmente associam-se com correlações negativas às demais, aparecendo como setas pontilhadas em vermelho nestas saídas.

O diagrama completo é exibido deixando-se os pontos de corte com valor nulo:

print(psych::omega.diagram(fabi.fit,
                           main="WHOQOL",
                           cut=0,
                           gcut=0,
                           sort=TRUE))

NULL

Ilegível, como mencionamos, mas este é o diagrama que EFA considera.

O modelo de primeira ordem proposto pela EFA (considerando as correlações mais fortes) criou fatores comuns com número de itens desiguais. Para finalizar, vamos analisar o modelo bifatorial produzido pela EFA, conforme sugerido pela heurística do modelo, considerando 4 fatores comuns secundários similares.

Com o ponto de corte de 0.3, algumas questões não foram ligadas ao fator comum secundário, mas esta ligação existe e vamos verificar qual a maior carga fatorial para propor sua inclusão em algum fator comum. A tabela completa (sem o ponto de corte de 0.3) é acessível dentro do objeto que psych::omega retorna:

print(fabi.fit$schmid$sl, digits=2)
        g     F1*      F2*     F3*     F4*   h2   u2   p2 com
Q3-  0.30  0.2240 -0.05251  0.1666 -0.0026 0.16 0.84 0.56 2.5
Q4-  0.35  0.2610 -0.00142  0.1361 -0.0218 0.20 0.80 0.61 2.2
Q5   0.61  0.1035  0.26597  0.0067  0.3811 0.58 0.42 0.63 2.2
Q6   0.53  0.2076  0.34900  0.0445 -0.0170 0.46 0.54 0.61 2.1
Q7   0.50  0.4226  0.04123  0.0115 -0.0115 0.44 0.56 0.58 2.0
Q8   0.59  0.3433  0.23528  0.0440 -0.0142 0.53 0.47 0.65 2.0
Q9   0.39  0.1604  0.00664  0.2752  0.0617 0.25 0.75 0.60 2.2
Q10  0.61  0.4988 -0.03256 -0.0250  0.1377 0.65 0.35 0.58 2.0
Q11  0.47  0.2265  0.23305  0.0887 -0.0361 0.34 0.66 0.64 2.1
Q12  0.40  0.0415 -0.00016  0.4460  0.1334 0.39 0.61 0.42 2.2
Q13  0.42  0.1123  0.02245  0.3170  0.1341 0.31 0.69 0.57 2.3
Q14  0.54  0.0087  0.00355  0.0302  0.7088 0.80 0.20 0.36 1.9
Q15  0.35  0.1060 -0.06949  0.5493 -0.0408 0.43 0.57 0.29 1.8
Q16  0.47  0.3572 -0.07989  0.0128  0.1837 0.39 0.61 0.58 2.3
Q17  0.64  0.5700 -0.04479  0.0294  0.0284 0.73 0.27 0.56 2.0
Q18  0.61  0.5577 -0.00804  0.0267 -0.0274 0.68 0.32 0.55 2.0
Q19  0.65  0.4054  0.28779  0.0049 -0.0518 0.70 0.30 0.61 2.1
Q20  0.57  0.0545  0.49916  0.0478  0.1081 0.59 0.41 0.55 2.1
Q21  0.40  0.0361  0.38140  0.0253  0.0547 0.31 0.69 0.52 2.1
Q22  0.44 -0.0460  0.45303  0.1235  0.0781 0.42 0.58 0.47 2.2
Q23  0.38 -0.0627  0.17155  0.5121  0.0124 0.44 0.56 0.32 2.1
Q24  0.34 -0.0531  0.06781  0.4682  0.0962 0.36 0.64 0.31 2.0
Q25  0.28 -0.0255 -0.03786  0.6241 -0.0333 0.47 0.53 0.17 1.4
Q26- 0.52  0.3151  0.23484 -0.0598  0.0179 0.44 0.56 0.61 2.1

Assim, ligaremos:

  • Q4 com F1 (carga fatorial de 0.26)
  • Q3 com F1 (carga fatorial de 0.22)
  • Q11 com F2 (carga fatorial de 0.23)
  • Q9 com F3 (carga fatorial de 0.28)

Embora um pouco mais balanceados que o modelo de primeira ordem, o modelo bifatorial produziu solução similar. Em comparação com os domínios propostos pela WHO, claramente também há proximidade entre os modelos:

F1:

      1. Quão satisfeito(a) você está com sua capacidade de desempenhar as atividades do seu dia-a-dia?
      1. Quão satisfeito(a) você está com sua capacidade para o trabalho?
      1. Você tem energia suficiente para seu dia-a-dia?
      1. O quanto você consegue se concentrar?
      1. Quão satisfeito(a) você está com o seu sono?
      1. Quão seguro(a) você se sente em sua vida diária?
      1. Com que freqüência você tem sentimentos negativos tais como mau humor, desespero, ansiedade, depressão?
      1. O quanto você precisa de algum tratamento médico para levar sua vida diária?
      1. Em que medida você acha que sua dor (física) impede você de fazer o que você precisa?

F2:

      1. Quão satisfeito(a) você está com suas relações pessoais (amigos, parentes, conhecidos, colegas)?
      1. Quão satisfeito(a) você está com o apoio que você recebe de seus amigos?
      1. Quão satisfeito(a) você está com sua vida sexual?
      1. Em que medida você acha que a sua vida tem sentido?
      1. Você é capaz de aceitar sua aparência física?

F3:

      1. Quão satisfeito(a) você está com o seu meio de transporte?
      1. Quão bem você é capaz de se locomover?
      1. Quão satisfeito(a) você está com as condições do local onde mora?
      1. Quão satisfeito(a) você está com o seu acesso aos serviços de saúde?
      1. Você tem dinheiro suficiente para satisfazer suas necessidades?
      1. Quão disponíveis para você estão as informações que precisa no seu dia-a-dia?
      1. Quão saudável é o seu ambiente físico (clima, barulho, poluição, atrativos)?

F4:

      1. Em que medida você tem oportunidades de atividade de lazer?
      1. O quanto você aproveita a vida?

A análise foi feita sem que o modelo interpretasse o conteúdo das questões, nomeando os fatores como F1, F2, F3 e F4. Caso fôssemos prosseguir com CFA, poderíamos escolher nomes para os fatores. Por exemplo:

  • F1: felicidade intrínseca,
  • F2: felicidade extrínseca,
  • F3: infraestrutura ou condições físicas,
  • F4: lazer.

A proposta da WHO, independentemente dos detalhes de como foi alcançada, poder ter tido base em critérios teóricos, proposta de especialistas ou análise com populações diversas da amostra que utilizamos aqui.

No entanto a formação de fatores comuns proposta pela WHO não é (modelo nenhum é) a solução única. Em uma análise na qual os pesquisadores não tivessem referenciais teóricos ou proposta para a formação de fatores comuns, EFA pode auxiliar bastante, buscando obter um modelo a partir dos dados e verificando junto aos pesquisadores da área quais agrupamentos fazem sentido para suas perguntas de pesquisa. É óbvio que os domínios propostos não são estanques e não tão claramente definidos neste questionário e nada impediria a adoção de outros domínios, com outros enfoques, caso não fosse esta a proposta escolhida pela WHO.

Finalmente, é importante enfatizar que EFA não é uma etapa obrigatória que precede obrigatoriamente a CFA. Nada impede que, com base em conhecimento dos pesquisadores, uma CFA seja proposta diretamente. Aliás, EFA não deve ser usada para a decisão estatística final devido à ligação dos fatores comuns com todos os itens, de certa forma misturando os efeitos dos domínios.

EFA pode ser vista como uma análise descritiva, exploratória e multivariada. É na CFA, abordada em disciplina de Psicometria, que validamos modelos explicativos com a decisão inferencial estatística.

Para saber mais, dois textos que auxiliam para o uso de R em análise fatorial são Rosseel & Vidal (2025), Lou et al. (2019) e Beaujean (2013).

Referências

  • BEAUJEAN, AA (2013) Factor analysis using R. Practical assessment, research & evaluation 18(4). DOI: https://doi.org/10.7275/z8wr-4j42
  • BEAUJEAN, AA (2014) Latent variable modeling using R. NY: Routledge.
  • BROWN, TA (2015) Confirmatory factor analysis for applied research. 2nd ed. NY: Guilford.
  • CARIFIO, J & PERLA, R (2008) Resolving the 50-year debate around using and misusing Likert scales. Medical Education 42: 1150-1152.
  • CRONBACH, LJ (1996) Fundamentos de testagem psicológica. 5a ed. Porto Alegre: Artes Médicas.
  • ENNS, SC et al. (2016) Medical Students’ Perception of Their Educational Environment and Quality of Life: Is There a Positive Association? Academic Medicine 91(3). https://doi.org/10.1097/ACM.0000000000000952
  • FINCH Jr, HW; FRENCH, BF (2015) Latent variable modeling with R. NY: Routledge.
  • FRIBORG, O et al. (2006) Likert-based vs. semantic differential-based scorings of positive psychological constructs: A psychometric comparison of two versions of a scale measuring resilience. Personality and Individual Differences 40(5): 873–884. https://doi.org/10.1016/j.paid.2005.08.015
  • GANA, K & BROC, G (2019) Structural equation modeling with lavaan. NJ: Wiley.
  • HOWELL, D (2013) Statistical Methods for Psychology. 8th ed. USA: CENGAGE.
  • JAMIESON, S (2004) Likert scales: how to (ab)use them. Medical Education 38: 1212-1218.
  • KAISER, HF (1970) A second generation little jiffy. Psychometrika 35(4): 401-415.
  • KAPLUNOVSKY, AS (2004) Why using factor analysis? (dedicated to the centenary of factor analysis). http://www.magniel.com/fa/data
  • LEE, SY & SONG, XY (2012) Basic and Advanced Bayesian Structural Equation Modeling: With Applications in the Medical and Behavioral Sciences. NJ: Wiley. DOI: 10.1002/9781118358887
  • LUO, L et al. (2019) Exploratory fator analysis (EFA) programs in R. Structural equation modeling: A multidisciplinar journal, 0: 1-8.
  • MAIR, P (2018) Modern Psychometrics with R. USA: Springer.
  • PARO, HBMS et al. (2014) Empathy among medical students: Is there a relation with quality of life and burnout? PLoS ONE 9(4). https://doi.org/10.1371/journal.pone.0094133
  • PASQUALI, L. (2010) Psicometria: teoria dos testes na Psicologia e Educação. RJ: Vozes.
  • RENCHER, AC (2012) Methods of Multivariate Analysis. 2nd ed. NJ: Wiley.
  • REVELLE, W Personality Project. http://www.personality-project.org/
  • Rosseel, Y & Vidal, M (2025) A tutorial for understanding SEM using R: Where do all the numbers come from? British Journal of Mathematical and Statistical Psychology 00: 1–38. https://doi.org/10.1111/bmsp.70003
  • SEGRE, M &; FERRAZ, FC (1997) O conceito de saúde. Rev Saúde Pública 31(5):538-42.
  • Silveira PSP, Tempski PZ, Mayer FB, Enns SC, Peleias M, Martins MdA, Siqueira JO (2025) Comparison between random and convenience samples in a multicenter survey to evaluate medical students’ quality of life. PLoS One 20(10): e0332850. https://doi.org/10.1371/journal.pone.0332850
  • STEVENSON, L & HABERMAN, L (2005) Dez teorias da natureza humana. SP: Martins Fontes, p. 46-7.
  • Takayanagi, JFGB, Siqueira, JO, Silveira, PSP, Valentova, JV (2024) What Do Different People Look for in a Partner? Effects of Sex, Sexual Orientation, and Mating Strategies on Partner Preferences. Arch Sex Behav 53, 981–1000 (2024). https://doi.org/10.1007/s10508-023-02767-4. Dados e código R: https://osf.io/pc6rn/?view%2520only=38097a82dd274d34bbddc8dcc2258bb9
  • TEMPSKY, P et al. (2015) Relationship among medical student resilience, educational environment and quality of life. PLoS ONE 10(6). https://doi.org/10.1371/journal.pone.0131535
  • THAKKAR, JJ (2020) Structural equation modelling: Application for research and practice (with AMOS and R). EUA: Springer.