options(warn=-1)
suppressMessages(library(knitr, warn.conflicts=FALSE))
suppressMessages(library(readxl, warn.conflicts=FALSE))
suppressMessages(library(psych, warn.conflicts=FALSE))
suppressMessages(library(GGally, warn.conflicts=FALSE))
suppressMessages(library(car, warn.conflicts=FALSE))
suppressMessages(library(polycor, warn.conflicts=FALSE))
suppressMessages(library(likert, warn.conflicts=FALSE))
source("eiras.showdataframe.R")
source("eiras.bartitle.R")
alfa <- 0.05
ECGnet::EGA
corrplot::corrplot
RPubs
“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.”
O questionário em português do Brasil está disponível aqui.
Alguns exemplos de questões do WHOQOL-BREF:
…
…
As questões são agrupadas em domínios:
Manual do Projeto VERAS (2011)
As questões 3, 4 e 26 são consideradas as únicas que perguntam com valência negativa, e a WHO as inverte (tornando as respostas de 1 a 5 em valores 5 a 1) para colocá-las no mesmo sentido das demais.
A WHO sugere a forma de computar os escores de cada respondente nos domínios, através da somatória das respostas dos itens Likert (de 1 a 5, após inverter os valores das questões 3, 4 e 26), utilizando-os como intervalares embora sejam claramente variáveis ordinais (multiplicados por 4 para serem próximos aos valores da versão plena do WHOQOL com 100 questões, além de procedimentos para transformar em porcentagem devido ao tamanho desigual dos domínios).
Note que as questões 1 e 2 não são incluídas nos domínios porque são consideradas questões sobre a percepção geral do indivíduo, respectivamente sobre sua qualidade de vida e saúde. Portanto, para podermos comparar a proposta da WHOQOL com a análise feita adiante, também as 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 é muito usado em testes / escalas / questionários / inventários / baterias. As distâncias entre as categorias do item Likert não são necessariamente iguais/ equidistantes: são variáveis ordinais.
Quando somamos itens Likert (ordinais) obtemos uma escala somatória Likert (intervalar):
“Likert scales [o autor refere-se a individual Likert items] fall within the ordinal level of measurement.”
Jamieson (2004)
“…Likert scales (collections of items [o autor refere-se a individual Likert items]) as opposed to individual Likert items are not ordinal in character, but rather are interval in nature…”
Carifio & Perla (2008)
Itens Likert devem ser diferenciados de itens de diferencial semântico:
Friborg et al. (2006)
Um texto didático sobre as medidas de correlação está em Howell (2013) no capítulo 10. Muito do texto de Dancey & Reidy (2019) foi baseado neste livro.
Em R, podemos usar polycor::hetcor()
para obter
correlações Pearson, policórica e poliserial.
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))
# todas as colunas tratadas como intervalares
Dados[,] <- lapply(Dados[,],as.numeric)
# Correlacoes heterogeneas
print(polycor::hetcor(Dados, use="pairwise.complete.obs"), digits=1)
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 Q10
Q1 1 Pearson Pearson Pearson Pearson Pearson Pearson Pearson Pearson Pearson
Q2 0.02 1 Pearson Pearson Pearson Pearson Pearson Pearson Pearson Pearson
Q3 0.05 0.4 1 Pearson Pearson Pearson Pearson Pearson Pearson Pearson
Q4 0.5 -0.05 -0.001 1 Pearson Pearson Pearson Pearson Pearson Pearson
Q5 0.4 -0.05 -0.05 0.4 1 Pearson Pearson Pearson Pearson Pearson
Q6 0.5 0.06 0.02 0.6 0.4 1 Pearson Pearson Pearson Pearson
Q7 0.07 0.5 0.4 -0.06 -0.01 0.01 1 Pearson Pearson Pearson
Q8 0.02 0.7 0.5 -0.03 -0.02 0.09 0.7 1 Pearson Pearson
Q9 0.1 0.4 0.5 -0.08 -0.006 -0.01 0.6 0.6 1 Pearson
Q10 0.5 0.004 -0.04 0.5 0.4 0.6 0.1 0.04 0.06 1
Standard Errors/Numbers of Observations:
Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10
Q1 200 200 200 200 200 200 200 200 200 200
Q2 0.07 200 200 200 200 200 200 200 200 200
Q3 0.07 0.06 200 200 200 200 200 200 200 200
Q4 0.05 0.07 0.07 200 200 200 200 200 200 200
Q5 0.06 0.07 0.07 0.06 200 200 200 200 200 200
Q6 0.06 0.07 0.07 0.04 0.06 200 200 200 200 200
Q7 0.07 0.06 0.06 0.07 0.07 0.07 200 200 200 200
Q8 0.07 0.04 0.05 0.07 0.07 0.07 0.03 200 200 200
Q9 0.07 0.06 0.06 0.07 0.07 0.07 0.04 0.05 200 200
Q10 0.05 0.07 0.07 0.05 0.06 0.04 0.07 0.07 0.07 200
P-values for Tests of Bivariate Normality:
Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9
Q1
Q2 6e-66
Q3 1e-40 9e-26
Q4 1e-79 2e-66 5e-41
Q5 6e-78 9e-63 2e-37 8e-79
Q6 1e-114 3e-101 2e-75 1e-110 3e-112
Q7 4e-43 2e-29 2e-05 5e-44 1e-40 6e-80
Q8 7e-64 4e-47 1e-24 8e-65 1e-61 8e-100 9e-33
Q9 5e-67 3e-47 6e-25 3e-66 4e-61 2e-101 1e-30 3e-46
Q10 2e-111 7e-99 8e-74 5e-112 7e-111 4e-144 2e-77 1e-97 1e-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
):
source("eiras.showdataframe.R")
Dados <- readRDS("Felicidade.rds")
showdataframe(Dados, head=4, tail=3)
# todas as colunas tratadas como intervalares
Dados[,] <- lapply(Dados[,],as.numeric)
# 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
print(sapply(Dados,class))
showdataframe(Dados, head=4, tail=3)
# matriz de correlacoes
print(polycor::hetcor(Dados, use="pairwise.complete.obs"), digits=1)
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
$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"
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
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.05 0.5 1 Polychoric Polyserial Polyserial Polyserial
Q4 0.6 -0.05 -0.02 1 Polyserial Polyserial Polyserial
Q5 0.4 -0.05 -0.05 0.4 1 Pearson Pearson
Q6 0.4 0.08 0.02 0.5 0.4 1 Pearson
Q7 0.08 0.5 0.5 -0.08 -0.01 0.01 1
Q8 0.05 0.7 0.5 -0.03 -0.02 0.09 0.7
Q9 0.1 0.5 0.5 -0.1 -0.006 -0.01 0.6
Q10 0.4 0.01 -0.04 0.5 0.4 0.6 0.1
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.6 1 Pearson
Q10 0.04 0.06 1
Standard Errors/Numbers of Observations:
Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10
Q1 200 200 200 200 200 200 200 200 200 200
Q2 0.09 200 200 200 200 200 200 200 200 200
Q3 0.09 0.06 200 200 200 200 200 200 200 200
Q4 0.07 0.09 0.09 200 200 200 200 200 200 200
Q5 0.06 0.07 0.07 0.07 200 200 200 200 200 200
Q6 0.06 0.07 0.07 0.05 0.06 200 200 200 200 200
Q7 0.09 0.05 0.05 0.08 0.07 0.07 200 200 200 200
Q8 0.09 0.03 0.05 0.09 0.07 0.07 0.03 200 200 200
Q9 0.09 0.06 0.05 0.09 0.07 0.07 0.04 0.05 200 200
Q10 0.06 0.08 0.07 0.06 0.06 0.04 0.07 0.07 0.07 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 2e-55 7e-36 2e-35 2e-56
Q6 3e-94 3e-73 4e-73 5e-98 3e-112
Q7 3e-16 1e-05 6e-04 4e-21 1e-40 6e-80
Q8 1e-36 5e-22 1e-21 2e-41 1e-61 8e-100 9e-33
Q9 2e-39 2e-22 3e-22 1e-42 4e-61 2e-101 1e-30 3e-46
Q10 7e-94 3e-71 2e-71 9e-94 7e-111 4e-144 2e-77 1e-97 1e-98
Usamos a função print(sapply(Dados,class)) para conferir o
tipo adotado pelas variáveis.
|
Finalmente, em demo_Correlacao_Dicotomica.R
,
dicotomizamos vários itens (Q3 em diante) com métodos variados,
obtendo:
source("eiras.showdataframe.R")
Dados <- readRDS("Felicidade.rds")
showdataframe(Dados, head=4, tail=3)
# todas as colunas tratadas como 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
print(sapply(Dados,class))
showdataframe(Dados, head=4, tail=3)
# matriz de correlacoes
print(polycor::hetcor(Dados, use="pairwise.complete.obs"), digits=1)
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
$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"
Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10
1 2 1 0 1 0 1 0 FALSE FALSE
1 3 1 0 0 0 1 1 TRUE FALSE
1 4 1 0 0 0 1 1 TRUE FALSE
1 2 1 0 0 0 0 0 FALSE FALSE
... ... ... ... ... ... ... ... ... ...
1 3 1 0 0 0 0 1 TRUE FALSE
1 4 1 0 0 0 1 0 FALSE FALSE
1 4 1 0 0 0 1 1 TRUE FALSE
Two-Step Estimates
Correlations/Type of Correlation:
Q1 Q2 Q3 Q4 Q5 Q6 Q7
Q1 1 Polyserial Polyserial Polyserial Polyserial Polyserial Pearson
Q2 0.03 1 Polychoric Polychoric Polychoric Polychoric Polyserial
Q3 0.09 0.5 1 Polychoric Polychoric Polychoric Polyserial
Q4 0.5 -0.1 -0.06 1 Polychoric Polychoric Polyserial
Q5 0.3 -0.04 0.07 0.4 1 Polychoric Polyserial
Q6 0.5 0.02 0.3 0.8 0.4 1 Polyserial
Q7 0.04 0.3 0.4 -0.04 -0.2 -0.1 1
Q8 0.01 0.5 0.4 -0.1 -0.2 0.1 0.6
Q9 0.3 0.4 0.5 -0.06 -0.02 -0.1 0.4
Q10 <NA> -0.1 0.3 0.8 0.4 0.9 -0.002
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.5 1 Polychoric
Q10 -0.05 0.3 1
Standard Errors/Numbers of Observations:
Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10
Q1 200 200 200 200 200 200 200 200 200 200
Q2 0.07 200 200 200 200 200 200 200 200 200
Q3 0.1 0.08 200 200 200 200 200 200 200 200
Q4 0.07 0.1 0.2 200 200 200 200 200 200 200
Q5 0.08 0.1 0.2 0.1 200 200 200 200 200 200
Q6 0.08 0.1 0.2 0.09 0.2 200 200 200 200 200
Q7 0.07 0.06 0.07 0.1 0.09 0.1 200 200 200 200
Q8 0.07 0.05 0.07 0.1 0.1 0.1 0.04 200 200 200
Q9 0.1 0.09 0.1 0.2 0.2 0.2 0.07 0.06 200 200
Q10 <NA> 0.1 0.2 0.09 0.2 0.06 0.1 0.1 0.2 200
P-values for Tests of Bivariate Normality:
Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9
Q1
Q2 2e-38
Q3 3e-44 0.4
Q4 1e-44 0.01 <NA>
Q5 2e-44 0.4 <NA> <NA>
Q6 6e-49 0.4 <NA> <NA> <NA>
Q7 2e-114 3e-70 3e-77 6e-77 5e-77 6e-77
Q8 1e-108 3e-65 3e-71 4e-71 4e-71 4e-71 1e-136
Q9 1e-45 0.9 <NA> <NA> <NA> <NA> 3e-77 3e-71
Q10 <NA> 0.6 <NA> <NA> <NA> <NA> 6e-77 4e-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.
No exemplo do WHOQOL, os dados dos estudos do VERAS estão disponíveis em:
Dados <- data.frame(readxl::read_excel("WHOQOL.xlsx"))
Dados[,] <- lapply(Dados[,],as.numeric)
saveRDS(Dados, "WHOQOL.rds")
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[,4:27], detectOrdinal=FALSE,
forcePD=TRUE, missing="fiml")
print (
GGally::ggcorr(data=NULL,
name="WHOQOL-BREF",
cor_matrix=r,
geom="tile",
min_size=0,
max_size=10,
nbreaks=6,
digits=2,
label=FALSE,
label_round=2,
label_size=4)
)
O mesmo, forçando os itens serem tratados como variáveis ordinais
está implementado em demo_ggcorr_WHOQOL_ord.R
:
Dados <- readRDS("WHOQOL.rds")
ro <- qgraph::cor_auto(Dados[,4:27], detectOrdinal=TRUE,
forcePD=TRUE, missing="pairwise")
print (
GGally::ggcorr(data=NULL,
name="WHOQOL-BREF",
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:
Manual do Projeto VERAS (2011)
Deste mesmo pacote existem funções que procuram agrupar os itens. Por
exemplo, demo_ggcorr_WHOQOL_qgraph.R
, utilizando
dois métodos diferentes (veja graph=“glasso”
e
graph=“cor”
no código):
Dados <- readRDS("WHOQOL.rds")
ro <- qgraph::cor_auto(Dados[,4:27], detectOrdinal=TRUE,
forcePD=TRUE, missing="pairwise")
n <- nrow(na.omit(Dados))
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 (glasso)",
details=FALSE)
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 (cor)",
details=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
Note: Network with lowest lambda selected as best network: assumption of sparsity might be violated.
Aqui, pela primeira vez, aparece uma tentativa de agrupamento das questões. Recorde a proposta para o WHOQOL:
Manual do Projeto VERAS (2011)
No primeiro 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:
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:
Q21 liga-se principalmente a Q11 (psicológico), ambas obviamente conectadas aos relacionamentos sexuais:
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:
Outra ligação forte aparece entre Q5 (psicológico) e Q14 (ambiente). Seus conteúdos são ligados ao 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:
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 óptica, 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:
Dados <- readRDS("WHOQOL.rds")
cat("\nTransformando respostas em dados ordinais\n")
Dados[,4:27] <- lapply(Dados[,4:27],as.ordered)
cat("\n\t- verificando com class:\n")
print(sapply(Dados[,4:27],class))
cat("\n\t- verificando com str:\n")
print(str(Dados[,4:27]))
# esta funcao precisa que todos os itens tenham o mesmo numero de niveis
# descritiva com o pacote likert
cat("\nUsando o pacote likert\n")
cat("\nVerifica quantos niveis cada item tem\n")
print(sapply(Dados[,4:27],function(x){length(levels(x))}))
# usa a funcao preparatoria
lkt <- likert::likert(Dados[,4:27])
cat("\nFrequencia das respostas\n")
print(lkt, digits=1)
print(plot(lkt, type="heat", low.color="lightgray", high.color="darkgray"))
cat("\nFrequencia das respostas\n")
print(summary(lkt), digits=2)
print(plot(lkt, low.color="lightgray", high.color="black"))
Transformando respostas em dados ordinais
- verificando com class:
Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 Q12 Q13 Q14 Q15 Q16 Q17 Q18 Q19 Q20 Q21 Q22 Q23 Q24 Q25 Q26
[1,] "ordered" "ordered" "ordered" "ordered" "ordered" "ordered" "ordered" "ordered" "ordered" "ordered" "ordered" "ordered" "ordered" "ordered" "ordered" "ordered" "ordered" "ordered" "ordered" "ordered" "ordered" "ordered" "ordered" "ordered"
[2,] "factor" "factor" "factor" "factor" "factor" "factor" "factor" "factor" "factor" "factor" "factor" "factor" "factor" "factor" "factor" "factor" "factor" "factor" "factor" "factor" "factor" "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
Usando o pacote likert
Verifica quantos niveis cada item tem
Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 Q12 Q13 Q14 Q15 Q16 Q17 Q18 Q19 Q20 Q21 Q22 Q23 Q24 Q25 Q26
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
Frequencia 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
Frequencia 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
precisa de dados
ordinais 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 suas correlações, mas a ordem
que sugere também não coincide completamente (como sempre) com aquela
proposta pela Organização Mundial da Saúde para o WHOQOL.
Recorde a proposta para o WHOQOL:
Manual do Projeto VERAS (2011)
Finalmente, um dendrograma (propondo ainda outra combinação de
questões) pode ser feito com a função pvclust::pvclust
implementada em demo_pvclust_WHOQOL.R
:
Dados <- readRDS("WHOQOL.rds")
Dados[,4:27] <- lapply(Dados[,4:27],as.numeric)
res.pv <- pvclust::pvclust(Dados[4:27],
method.dist="abscor",
method.hclust="average",
nboot = 5e2)
plot(res.pv)
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.
Recorde a proposta para o WHOQOL:
Manual do Projeto VERAS (2011)
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 ou de covariâncias entre diversos pares de variáveis simultaneamente. Uma forma 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.
A 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
). O primeiro passo
é encontrar quantos são os fatores comuns subjacentes à configuração
adotada pelas matrizes.
Esta análise fatorial tem duas partes:
Dancey & Reidy (2019) apresentam o seguinte exemplo no item 6.3:
Dancey & Reidy (2019)
Por inspeção visual detecta-se dois fatores comuns (correlações em negrito). Depois que os fatores são encontrados, podemos atribuir nomes significativos para eles, tais como “relações humanas” e “tristeza” neste exemplo.
Veremos, adiante, que é crítico para a análise fatorial construir a
matriz de correlações adequada, o que é feito pela função
polycor::hetcor()
exemplificada anteriormente, que tem
algorítmos 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 ou manifestas (aquelas que estão em seus dados) são runny nose (coriza), cough (tosse), sneeze (espirro), sore throat (dor de garganta). O fator comum é cold (resfriado), variável latente que é a causa destes sintomas.
Como o resfriado (fator comum) é tido como “causa” dos sintomas (itens), este modelo é chamado de reflexivo.
Exemplos de traços latentes:
|
|
Qualquer fenômeno não diretamente observável ou conceito para o qual não há método operacional para mensuração direta.
O que é tamanho do pássaro?
O que é quilograma?
“A constante de Planck (\(6.62607004 \cdot 10^{-34} m^2kg/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.”
O que é saúde?
“Health is a state of complete physical, mental and social well-being and not merely the absence of disease or infirmity.”
Então o que é uma doença? Não encontramos definição da OMS, mas existe uma extensa classificação, o CID-11 (https://www.who.int/standards/classifications/classification-of-diseases).
“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.”
Segre & Ferraz (1997)
O objetivo da análise fatorial é expressar um grande número de variáveis observadas em termos de um número mínimo 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 e para validação de construto de escala de avaliação.
Aconselha-se o uso da matriz de correlações dos itens da escala quando executar a análise fatorial exploratória, pois trabalhar com matriz de correlações equivale a padronizar os itens. É aconselhável o uso da matriz de covariância quando executar a análise fatorial confirmatória.
Os itens são as variáveis manifestas, que podem ser nominais dicotômicos ou politômicos, ordinais 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 observacional em uma 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 computa com os indicadores não-padronizados (variâncias não-homogeneizadas). Se os indicadores não são medidos com as mesmas unidades de medida ou não são comparáveis, utilizar a matriz de correlações (variâncias homogeneizadas) irá padronizá-los de forma a torná-los comparáveis.
Brown (2015): http://sites.bu.edu/tabrown/cfabook/;
http://www.amarkos.gr/cfa-lavaan/
No capítulo 2 de Brown (2015, The common factor model and exploratory factor analysis) há um exemplo em que apenas a matriz de correlação de Pearson foi fornecida, mas isto é o suficiente para fazer a análise fatorial exploratória.
Esta matriz de correlação foi obtida a partir de um questionário com 4 itens Likert aplicado a 300 indivíduos internados em uma ala psiquiátrica para avaliar depressão.
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 # number of observations
Matriz <- data.frame(readxl::read_excel("Depressao.xlsx"))
Matriz_tmp <- data.matrix(Matriz)
rownames(Matriz_tmp) <- as.character(unlist(Matriz[1:(ncol(Matriz)-1),1]))
Matriz_tmp <- Matriz_tmp[,-1]
Matriz <- Matriz_tmp
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="Components", ylab="Singular values",
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
O1 1.00 0.70 0.65 0.62
O2 0.70 1.00 0.66 0.63
O3 0.65 0.66 1.00 0.60
O4 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)
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%).
Esta heurística é própria.
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 = {{sv_1}\over{sv_2}}\] em que \(sv_1\) e \(sv_2\) são os dois maiores valores singulares.
Para:
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 7.14, sugerindo que um modelo com um único fator pode ser adequado.
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(sv)} \over {\min(sv)} }}\] (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.
No exemplo da Depressão obtivemos índice igual a 3.1 e podemos prosseguir a análise.
A análise exploratória 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”.
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 boas 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, 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 um quando a magnitude da influência dos controles aproxima-se de zero, indicando que existe “pureza” na correlação dos pares de itens.
Esta é a análise propriamente dita. Neste código precisamos definir
quantos fatores comuns queremos postular, o que fizemos em
num.factors <- 1
. Sua saída tem várias partes.
Na primeira tabela, a coluna MR1
(o fator Depressão)
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 correlação do fator com o item. São,
neste exemplo, grandes e positivas. O 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.
Os 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 \cdot (k+1)]/2\),
onde \(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 \cdot 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 e a quantidade de parâmetros do modelo, igual a 2 neste exemplo.
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)”
Stevenson & Haberman (2005)
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):
Os dados são aqueles do arquivo Felicidade.rds
que já utilizamos
acima. 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 (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 é:
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="pairwise.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, missing="pairwise")
print (
GGally::ggcorr(data=NULL,
name="Felicidade",
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=\"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",
details=FALSE)
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",
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="abscor",
method.hclust="average",
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="Components", ylab="Singular values",
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 = ",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 relected when X^2/df > 2)\n",sep="")
options(warn=0)
----
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/Numbers of Observations:
Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10
Q1 200 200 200 200 200 200 200 200 200 200
Q2 0.09 200 200 200 200 200 200 200 200 200
Q3 0.09 0.06 200 200 200 200 200 200 200 200
Q4 0.07 0.09 0.09 200 200 200 200 200 200 200
Q5 0.07 0.09 0.09 0.08 200 200 200 200 200 200
Q6 0.08 0.1 0.1 0.06 0.08 200 200 200 200 200
Q7 0.09 0.05 0.06 0.09 0.09 0.1 200 200 200 200
Q8 0.09 0.03 0.05 0.09 0.09 0.1 0.03 200 200 200
Q9 0.09 0.06 0.05 0.09 0.09 0.1 0.04 0.04 200 200
Q10 0.08 0.1 0.1 0.07 0.09 0.06 0.1 0.1 0.1 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="glasso"
--------------
2
-----------
graph="cor"
-----------
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.20375
df = 26
X^2/df = 1.277067
(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”.
Neste exemplo, como temos os dados brutos, ainda podemos calcular os escores dos respondentes.
Para isto precisaremos usar a função fa.fit <-
psych::fa()
com outros parâmetros:
Está implementada em demo_Felicidade_DadosBrutos.R
,
resultando em:
source("eiras.showdataframe.R")
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]
showdataframe(Dados_brutos, head=4, tail=3)
----
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 2 4 2 4 1 3 2 2 1 -1.06567260965783 0.106855547678851
1 3 4 1 1 1 3 3 3 1 -0.221568204339216 -0.569288984979641
1 4 3 1 1 1 4 4 4 1 0.628310477195119 -0.555747968486246
1 2 3 1 1 1 1 1 1 1 -2.13246375797838 -0.589494111847742
... ... ... ... ... ... ... ... ... ... ... ...
1 3 3 1 1 1 2 3 3 1 -0.499618658717026 -0.574099223955546
1 4 3 1 1 1 3 2 2 1 -0.913825252790432 -0.580694500442478
1 4 5 1 1 1 4 4 3 1 0.661904600761249 -0.577236213305773
Os escores fatoriais estimados dos respondentes nos dois fatores comuns extraídos são escores-z. E.g., o primeiro respondente tem escores fatoriais estimados nos fatores comuns de felicidade extrínseca e de felicidade intrínseca iguais a -1.07 e 0.11 desvios-padrão, respectivamente.
Retomando o exemplo do WHOQOL com os dados disponíveis em WHOQOL.rds
,
verificaremos o que podemos obter inicialmente com uma EFA, implementada
em demo_EFA_WHOQOL.R
.
source("eiras.showdataframe.R")
source("eiras.bartitle.R")
options(warn=-1)
Dados <- readRDS("WHOQOL.rds")
n <- nrow(Dados)
# todas as colunas tratadas como ordinais
Dados[,4:27] <- lapply(Dados[,4:27],as.ordered)
r <- polycor::hetcor(Dados[,4:27], use="pairwise.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="Components", ylab="Singular values",
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 a 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="")
options(warn=0)
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.49 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.22 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.25 0.27
Q13 -0.19 -0.22 0.29 0.29 0.27 0.32 0.3
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.26 -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.11 -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.2 0.25
Q25 -0.11 -0.11 0.2 0.15 0.095 0.18 0.22
Q26 0.25 0.36 -0.41 -0.46 -0.4 -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.23 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.28 0.37 0.18 0.18 0.24 0.15
Q22 0.27 0.25 0.22 0.25 0.25 0.2
Q23 0.16 0.22 0.39 0.29 0.25 0.34
Q24 0.17 0.16 0.39 0.34 0.29 0.3
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.23 0.28 0.29 0.41 0.44 1
Q22 0.21 0.29 0.29 0.35 0.6 0.37
Q23 0.13 0.21 0.22 0.26 0.3 0.22
Q24 0.15 0.18 0.2 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.3 0.45 1 Polychoric Polychoric
Q25 0.16 0.41 0.38 1 Polychoric
Q26 -0.31 -0.15 -0.16 -0.063 1
Standard Errors/Numbers of Observations:
Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 Q12 Q13 Q14
Q3 2684 2683 2684 2684 2684 2684 2683 2684 2684 2683 2683 2683
Q4 0.019 2683 2683 2683 2683 2683 2682 2683 2683 2682 2682 2682
Q5 0.022 0.022 2684 2684 2684 2684 2683 2684 2684 2683 2683 2683
Q6 0.022 0.022 0.017 2684 2684 2684 2683 2684 2684 2683 2683 2683
Q7 0.022 0.021 0.019 0.018 2684 2684 2683 2684 2684 2683 2683 2683
Q8 0.021 0.021 0.017 0.016 0.016 2684 2683 2684 2684 2683 2683 2683
Q9 0.021 0.022 0.02 0.021 0.02 0.019 2683 2683 2683 2682 2682 2682
Q10 0.021 0.02 0.017 0.019 0.015 0.016 0.02 2684 2684 2683 2683 2683
Q11 0.021 0.021 0.019 0.019 0.02 0.017 0.021 0.018 2684 2683 2683 2683
Q12 0.021 0.021 0.019 0.021 0.021 0.02 0.02 0.02 0.019 2683 2683 2683
Q13 0.022 0.022 0.02 0.021 0.021 0.02 0.02 0.021 0.02 0.018 2683 2683
Q14 0.022 0.022 0.014 0.021 0.02 0.02 0.02 0.018 0.02 0.019 0.019 2683
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 Q26
Q3 2683 2683 2683 2683 2683 2683 2683 2682 2683 2683 2683 2683
Q4 2682 2682 2682 2682 2682 2682 2682 2681 2682 2682 2682 2682
Q5 2683 2683 2683 2683 2683 2683 2683 2682 2683 2683 2683 2683
Q6 2683 2683 2683 2683 2683 2683 2683 2682 2683 2683 2683 2683
Q7 2683 2683 2683 2683 2683 2683 2683 2682 2683 2683 2683 2683
Q8 2683 2683 2683 2683 2683 2683 2683 2682 2683 2683 2683 2683
Q9 2682 2682 2682 2682 2682 2682 2682 2681 2682 2682 2682 2682
Q10 2683 2683 2683 2683 2683 2683 2683 2682 2683 2683 2683 2683
Q11 2683 2683 2683 2683 2683 2683 2683 2682 2683 2683 2683 2683
Q12 2683 2683 2683 2683 2683 2683 2683 2682 2683 2683 2683 2683
Q13 2683 2683 2683 2683 2683 2683 2683 2682 2683 2683 2683 2683
Q14 2683 2683 2683 2683 2683 2683 2683 2682 2683 2683 2683 2683
Q15 2683 2683 2683 2683 2683 2683 2683 2682 2683 2683 2683 2683
Q16 0.023 2683 2683 2683 2683 2683 2683 2682 2683 2683 2683 2683
Q17 0.022 0.015 2683 2683 2683 2683 2683 2682 2683 2683 2683 2683
Q18 0.023 0.016 0.0071 2683 2683 2683 2683 2682 2683 2683 2683 2683
Q19 0.023 0.018 0.011 0.012 2683 2683 2683 2682 2683 2683 2683 2683
Q20 0.022 0.019 0.017 0.018 0.015 2683 2683 2682 2683 2683 2683 2683
Q21 0.023 0.02 0.019 0.02 0.018 0.017 2683 2682 2683 2683 2683 2683
Q22 0.023 0.021 0.02 0.02 0.019 0.014 0.018 2682 2682 2682 2682 2682
Q23 0.021 0.022 0.021 0.021 0.021 0.02 0.021 0.02 2683 2683 2683 2683
Q24 0.021 0.021 0.021 0.021 0.021 0.02 0.021 0.02 0.017 2683 2683 2683
Q25 0.016 0.021 0.021 0.022 0.021 0.021 0.021 0.021 0.018 0.018 2683 2683
Q26 0.023 0.018 0.017 0.017 0.015 0.017 0.019 0.02 0.022 0.021 0.022 2683
P-values for Tests of Bivariate Normality:
Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11
Q3
Q4 6.2e-05
Q5 0.045 0.072
Q6 0.033 0.045 3.5e-11
Q7 0.0071 0.25 3.8e-05 5.7e-06
Q8 0.061 0.15 2.3e-07 2.9e-05 1.4e-17
Q9 0.15 0.15 0.026 0.23 0.00059 0.0065
Q10 0.15 0.18 0.082 0.00094 4.3e-06 0.00072 0.085
Q11 0.34 0.025 6.7e-05 0.002 1.9e-07 0.00081 0.0039 0.12
Q12 0.51 0.21 2.6e-05 0.0088 0.0034 8.5e-05 0.0028 3.2e-05 7.3e-07
Q13 0.00041 0.001 0.00048 0.0024 0.027 0.0078 0.012 0.0015 0.041
Q14 0.086 0.036 1.4e-07 0.00044 0.013 3e-04 0.0061 0.0046 7e-07
Q15 0.024 0.37 0.52 0.48 0.045 0.79 0.001 0.21 0.0035
Q16 0.69 0.04 0.0092 0.21 0.0047 4.8e-05 0.0031 2.4e-06 0.026
Q17 0.017 0.97 1.2e-05 8.6e-07 0.00019 0.00011 0.28 0.029 0.0052
Q18 0.0052 0.14 1.9e-06 5.9e-09 5e-09 0.00028 0.018 0.011 0.00059
Q19 0.086 0.026 7e-06 1.8e-09 3.1e-07 0.00013 0.024 0.034 4.9e-09
Q20 0.59 0.31 1.3e-06 0.019 6.7e-06 4.8e-05 0.13 2e-04 0.0087
Q21 0.039 0.04 0.18 5.7e-05 9.5e-05 0.0021 0.39 0.33 0.0036
Q22 0.026 0.068 0.013 0.00059 0.00046 0.085 0.059 0.0049 2e-05
Q23 0.28 0.0014 0.047 0.55 0.15 0.1 9.2e-07 0.031 0.063
Q24 0.059 0.095 0.25 0.2 0.21 0.0042 0.046 1 0.011
Q25 0.0034 0.012 0.37 0.92 0.044 0.17 0.013 0.0062 0.09
Q26 0.49 0.72 0.008 7.1e-06 1.4e-06 8.1e-07 0.15 1.6e-06 0.025
Q12 Q13 Q14 Q15 Q16 Q17 Q18 Q19 Q20
Q3
Q4
Q5
Q6
Q7
Q8
Q9
Q10
Q11
Q12
Q13 0.024
Q14 0.00076 6.3e-09
Q15 0.0067 0.22 0.15
Q16 0.00063 0.24 0.016 0.39
Q17 0.0018 0.00013 0.0013 0.005 1.6e-06
Q18 0.26 0.002 0.0015 0.0018 7.9e-05 4e-39
Q19 0.014 0.11 0.26 0.21 0.017 7.9e-08 6e-14
Q20 0.029 0.29 0.079 0.02 0.0037 1.7e-06 2.9e-05 4.7e-06
Q21 0.0077 0.11 0.0045 0.089 0.0011 0.00024 7.4e-06 1.4e-07 1.6e-11
Q22 0.19 0.0082 0.14 0.0087 0.14 0.00011 0.004 2.3e-09 7.2e-14
Q23 3.9e-05 2e-05 0.16 1.7e-05 0.0013 6.8e-05 0.0014 0.00053 0.017
Q24 0.043 0.08 0.0023 0.0077 0.011 0.25 0.0043 0.012 0.018
Q25 0.00015 0.052 0.18 1.1e-27 0.0099 0.022 0.00035 0.00094 0.2
Q26 0.00046 0.0065 0.00061 0.51 2.1e-07 2.4e-06 3.7e-06 2.7e-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.8e-05
Q23 3.2e-05 5.3e-08
Q24 0.0022 0.00028 3.8e-19
Q25 0.03 0.0029 7.1e-09 1.2e-07
Q26 0.0092 0.00014 0.099 0.42 0.016
---------------
Singular values
---------------
component value
1 1 8.31
2 2 2.21
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.58
13 13 0.58
14 14 0.54
15 15 0.52
16 16 0.48
17 17 0.44
18 18 0.43
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.21 ~ 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.92 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.74 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.32 0.68 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.14 0.86 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 = 28337.74
df of the model are 252 and the objective function was 3.27
The root mean square of the residuals (RMSR) is 0.08
The df corrected root mean square of the residuals is 0.09
The harmonic n.obs is 2684 with the empirical chi square 10691.62 with prob < 0
The total n.obs was 2684 with Likelihood Chi Square = 8738.03 with prob < 0
Tucker Lewis Index of factoring reliability = 0.669
RMSEA index = 0.112 and the 90 % confidence intervals are 0.11 0.114
BIC = 6748.48
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 = 10691.62
df = 252
X^2/df = 42.42708
(model may possibly be rejected when X^2/df > 2)
----------------------------------------------------
primeira ordem com 4 fatores comuns (seguindo a 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.64 0.36 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.45 0.55 1.8
Q4 2 -0.39 0.20 0.80 1.3
Q11 9 0.34 0.30 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.65 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 = 28337.74
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 1837.27 with prob < 4e-269
The total n.obs was 2684 with Likelihood Chi Square = 3023.67 with prob < 0
Tucker Lewis Index of factoring reliability = 0.85
RMSEA index = 0.075 and the 90 % confidence intervals are 0.073 0.078
BIC = 1555.18
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.9 0.91
Multiple R square of scores with factors 0.92 0.80 0.8 0.84
Minimum correlation of possible factor scores 0.83 0.59 0.6 0.67
------------------------------
Heuristic for model rejection:
------------------------------
X^2 = 1837.267
df = 186
X^2/df = 9.87778
(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.57 2.53
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.10
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.98
Q9 0.39 0.25 0.75 0.60 2.24
Q10 0.61 0.50 0.64 0.64 0.36 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.41 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 1.99
Q18 0.61 0.56 0.68 0.68 0.32 0.55 1.99
Q19 0.65 0.40 0.70 0.70 0.30 0.61 2.12
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.14
Q24 0.34 0.47 0.36 0.36 0.64 0.32 2.00
Q25 0.62 0.47 0.47 0.53 0.17 1.41
Q26- 0.52 0.32 0.45 0.45 0.55 0.61 2.14
With Sums of squares of:
g F1* F2* F3* F4* h2
5.69 1.86 1.10 1.63 0.78 5.75
general/max 0.99 max/min = 7.35
mean percent general = 0.52 with sd = 0.13 and cv of 0.25
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 = 3023.67 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.075 and the 90 % confidence intervals are 0.073 0.078
BIC = 1555.18
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.66
The number of observations was 2684 with Chi Square = 9795.59 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 = 7806.03
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.32
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 = 2136.268
df = 166
X^2/df = 12.86908
(model may possibly be rejected when X^2/df > 2)
A importância de 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
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:
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):
Q5 (psicológico) e Q14 (ambiente) formaram um domínio pequeno:
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:
e o outro quase que exclusivamente do domínio ambiental Q25, Q15, Q23, Q24, Q12, Q13 e Q9:
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. (1) 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
Um aspecto notável na EFA (e na 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:
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:
g F1* F2* F3* F4* h2 u2 p2 com
Q3- 0.30 0.2237 -0.05137 0.1674 -0.0037 0.16 0.84 0.57 2.5
Q4- 0.35 0.2604 -0.00041 0.1364 -0.0223 0.20 0.80 0.61 2.2
Q5 0.61 0.1031 0.26641 0.0062 0.3808 0.58 0.42 0.63 2.2
Q6 0.53 0.2069 0.34922 0.0437 -0.0162 0.46 0.54 0.61 2.1
Q7 0.50 0.4225 0.04126 0.0121 -0.0117 0.44 0.56 0.58 2.0
Q8 0.59 0.3427 0.23513 0.0435 -0.0135 0.53 0.47 0.65 2.0
Q9 0.39 0.1599 0.00677 0.2753 0.0618 0.25 0.75 0.60 2.2
Q10 0.61 0.4984 -0.03311 -0.0242 0.1369 0.64 0.36 0.58 2.0
Q11 0.47 0.2259 0.23356 0.0886 -0.0360 0.34 0.66 0.64 2.1
Q12 0.40 0.0415 -0.00049 0.4465 0.1331 0.39 0.61 0.41 2.2
Q13 0.42 0.1123 0.02137 0.3167 0.1344 0.31 0.69 0.57 2.3
Q14 0.54 0.0083 0.00321 0.0295 0.7118 0.80 0.20 0.36 1.9
Q15 0.35 0.1060 -0.06997 0.5491 -0.0409 0.43 0.57 0.29 1.9
Q16 0.47 0.3574 -0.08007 0.0133 0.1832 0.39 0.61 0.58 2.3
Q17 0.64 0.5697 -0.04470 0.0290 0.0287 0.73 0.27 0.56 2.0
Q18 0.61 0.5571 -0.00697 0.0269 -0.0279 0.68 0.32 0.55 2.0
Q19 0.65 0.4047 0.28828 0.0042 -0.0512 0.70 0.30 0.61 2.1
Q20 0.57 0.0548 0.49906 0.0481 0.1075 0.59 0.41 0.55 2.1
Q21 0.40 0.0366 0.38034 0.0260 0.0545 0.31 0.69 0.52 2.1
Q22 0.44 -0.0458 0.45344 0.1237 0.0773 0.42 0.58 0.47 2.2
Q23 0.38 -0.0634 0.17237 0.5100 0.0132 0.44 0.56 0.32 2.1
Q24 0.34 -0.0528 0.06895 0.4684 0.0949 0.36 0.64 0.32 2.0
Q25 0.28 -0.0254 -0.03676 0.6235 -0.0336 0.47 0.53 0.17 1.4
Q26- 0.52 0.3151 0.23466 -0.0596 0.0178 0.45 0.55 0.61 2.1
Assim, ligaremos:
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:
F2:
F3:
F4:
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 para uma CFA, poderíamos escolher nomes para os fatores. Por exemplo:
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, vista em disciplina de Psicometria, que firmamos modelos explicativos com a decisão inferencial estatística.
Para saber mais, dois artigos que auxiliam para o uso do R em análise fatorial são Lou et al. (2019) e Beaujean (2013).