Oficina de Psicometria — Grupo Soberba

Disciplina MPS5839 — Fundamentos de Psicometria

Authors

André Cardoso Campello

Antonio Igor Duarte Braz

Cirilo Liberatori Tissot

Dangela Layne Silva Lassi

Fabiana Campos

Fernanda Rodrigues Lima

Gabriela Akemi Takeda

Published

April 7, 2026

Introdução

Este documento apresenta uma Análise Fatorial Exploratória (AFE) de uma escala do tipo Likert composta por 20 itens (q1 a q20), com cinco opções de resposta: Discordo Totalmente (1), Discordo em partes (2), Nem concordo, nem discordo (3), Concordo em partes (4) e Concordo totalmente (5).

Os itens q5, q6, q11, q12, q13, q19 e q20 possuem pontuação reversa e foram recodificados antes da análise.

Preparação dos Dados

Carregamento de pacotes

library(dplyr)
library(readxl)
library(psych)
library(ggplot2)

Importação e inspeção dos dados

df <- read_excel("df.xlsx")
head(df)
# A tibble: 6 × 26
  `Carimbo de data/hora` Consentimento   `Qual sua profissão?` `Qual sua idade?`
  <dttm>                 <chr>           <chr>                 <chr>            
1 2026-03-31 04:45:27    Aceito partici… Enfermeira            29               
2 2026-03-31 07:55:37    Aceito partici… Médico                32               
3 2026-03-31 10:41:00    Aceito partici… Não sou da área da s… <NA>             
4 2026-03-31 10:44:32    Aceito partici… Médico                34               
5 2026-03-31 10:57:56    Aceito partici… Nutricionista         27               
6 2026-03-31 11:01:29    Aceito partici… TI                    45               
# ℹ 22 more variables: `Com qual gênero se identifica?` <chr>,
#   `Qual a sua formação?` <chr>, q1 <chr>, q2 <chr>, q3 <chr>, q4 <chr>,
#   q5 <chr>, q6 <chr>, q7 <chr>, q8 <chr>, q9 <chr>, q10 <chr>, q11 <chr>,
#   q12 <chr>, q13 <chr>, q14 <chr>, q15 <chr>, q16 <chr>, q17 <chr>,
#   q18 <chr>, q19 <chr>, q20 <chr>

Conversão das respostas para valores numéricos

As respostas em texto foram convertidas para uma escala numérica de 1 a 5. Em seguida, os casos com valores ausentes (NA) foram removidos.

df <- df %>%
  mutate(across(q1:q20, ~ case_match(
    .,
    "Concordo totalmente"        ~ 5,
    "Concordo em partes"         ~ 4,
    "Nem concordo, nem discordo" ~ 3,
    "Discordo em partes"         ~ 2,
    "Discordo Totalmente"        ~ 1
  )))

df <- na.omit(df)

Inversão dos itens reversos

Para os itens com pontuação reversa (q5, q6, q11, q12, q13, q19 e q20), a pontuação foi invertida pela fórmula \(6 - x\), de modo que um valor original de 5 passa a 1 e vice-versa.

df <- df %>%
  mutate(across(c(q5, q6, q11, q12, q13, q19, q20), ~ 6 - .))

Verificação da estrutura dos dados

head(df)
# A tibble: 6 × 26
  `Carimbo de data/hora` Consentimento   `Qual sua profissão?` `Qual sua idade?`
  <dttm>                 <chr>           <chr>                 <chr>            
1 2026-03-31 07:55:37    Aceito partici… Médico                32               
2 2026-03-31 10:44:32    Aceito partici… Médico                34               
3 2026-03-31 10:57:56    Aceito partici… Nutricionista         27               
4 2026-03-31 11:01:29    Aceito partici… TI                    45               
5 2026-03-31 11:10:34    Aceito partici… Biólogo               26               
6 2026-03-31 11:13:27    Aceito partici… Educador físico       24               
# ℹ 22 more variables: `Com qual gênero se identifica?` <chr>,
#   `Qual a sua formação?` <chr>, q1 <dbl>, q2 <dbl>, q3 <dbl>, q4 <dbl>,
#   q5 <dbl>, q6 <dbl>, q7 <dbl>, q8 <dbl>, q9 <dbl>, q10 <dbl>, q11 <dbl>,
#   q12 <dbl>, q13 <dbl>, q14 <dbl>, q15 <dbl>, q16 <dbl>, q17 <dbl>,
#   q18 <dbl>, q19 <dbl>, q20 <dbl>
str(df %>% select(q1:q20))
tibble [64 × 20] (S3: tbl_df/tbl/data.frame)
 $ q1 : num [1:64] 5 3 4 3 4 2 2 3 4 4 ...
 $ q2 : num [1:64] 5 2 1 2 2 2 4 1 4 2 ...
 $ q3 : num [1:64] 5 2 3 2 3 1 1 2 2 5 ...
 $ q4 : num [1:64] 5 3 1 1 3 1 1 1 2 5 ...
 $ q5 : num [1:64] 1 2 1 1 2 1 2 2 2 1 ...
 $ q6 : num [1:64] 1 4 1 1 2 2 2 1 1 2 ...
 $ q7 : num [1:64] 5 2 1 3 3 3 2 2 3 5 ...
 $ q8 : num [1:64] 5 3 1 3 3 2 1 3 4 5 ...
 $ q9 : num [1:64] 5 3 2 1 3 1 1 1 1 4 ...
 $ q10: num [1:64] 5 4 2 2 4 1 1 1 3 4 ...
 $ q11: num [1:64] 1 2 2 4 3 4 5 5 4 4 ...
 $ q12: num [1:64] 1 1 1 1 2 1 2 1 1 2 ...
 $ q13: num [1:64] 1 3 5 1 3 2 2 1 2 5 ...
 $ q14: num [1:64] 5 3 1 3 4 4 1 2 4 2 ...
 $ q15: num [1:64] 5 3 1 1 4 1 1 1 1 1 ...
 $ q16: num [1:64] 5 4 1 1 3 1 1 1 1 2 ...
 $ q17: num [1:64] 5 4 3 2 4 4 3 1 4 3 ...
 $ q18: num [1:64] 5 2 2 3 4 4 2 5 4 3 ...
 $ q19: num [1:64] 1 2 3 1 3 1 2 2 2 2 ...
 $ q20: num [1:64] 1 4 4 2 3 1 2 1 2 1 ...
 - attr(*, "na.action")= 'omit' Named int [1:11] 1 3 9 25 36 37 38 41 44 46 ...
  ..- attr(*, "names")= chr [1:11] "1" "3" "9" "25" ...
cat("Número de observações:", nrow(df), "\n")
Número de observações: 64 
cat("Número de itens:", 20, "\n")
Número de itens: 20 
cat("Razão observações/itens:", round(nrow(df) / 20, 1))
Razão observações/itens: 3.2

Análise Fatorial Exploratória

Etapa 1 — Matriz de correlações policóricas

Como os itens são ordinais (escala Likert), utilizamos correlações policóricas em vez de correlações de Pearson. A correlação policórica estima a associação entre duas variáveis latentes contínuas subjacentes às categorias observadas, sendo mais adequada para dados ordinais.

cor_poly <- polychoric(df %>% select(q1:q20))

Etapa 2 — Verificação da fatorabilidade

Antes de extrair fatores, é necessário verificar se a matriz de correlações é adequada para fatoração. Para isso, utilizamos dois indicadores:

  • KMO (Kaiser-Meyer-Olkin): avalia a proporção da variância dos itens que pode ser explicada por fatores latentes. Valores acima de 0.70 são considerados aceitáveis; acima de 0.80, bons.
  • Teste de esfericidade de Bartlett: testa se a matriz de correlações é significativamente diferente de uma matriz identidade (i.e., se há correlações a serem exploradas). Espera-se \(p < 0.05\).
KMO(cor_poly$rho)
Kaiser-Meyer-Olkin factor adequacy
Call: KMO(r = cor_poly$rho)
Overall MSA =  0.07
MSA for each item = 
  q1   q2   q3   q4   q5   q6   q7   q8   q9  q10  q11  q12  q13  q14  q15  q16 
0.04 0.05 0.11 0.13 0.07 0.07 0.09 0.06 0.11 0.09 0.03 0.04 0.03 0.07 0.10 0.10 
 q17  q18  q19  q20 
0.04 0.03 0.05 0.06 
cortest.bartlett(cor_poly$rho, n = nrow(df))
$chisq
[1] 1856.356

$p.value
[1] 7.323473e-271

$df
[1] 190

Nota: O valor de KMO obtido foi muito baixo, o que é esperado em amostras reduzidas (n = r nrow(df), correspondendo a uma razão de aproximadamente r round(nrow(df)/20, 1) observações por item). A literatura recomenda um mínimo de 5 a 10 observações por item para estimativas estáveis. Cabe ressaltar que o objetivo desta análise é primariamente didático e metodológico, a ênfase recai sobre a compreensão e aplicação correta dos procedimentos da AFE, e não sobre a generalização dos resultados. Ainda assim, os achados devem ser interpretados com cautela diante dessa limitação amostral.

Etapa 3 — Determinação do número de fatores

Utilizamos dois métodos complementares para determinar o número de fatores a serem extraídos:

  • Análise Paralela: compara os autovalores observados com autovalores obtidos de dados aleatórios. Retemos apenas os fatores cujos autovalores excedem os simulados.
  • MAP de Velicer (Minimum Average Partial): identifica o número de fatores que minimiza a correlação parcial média residual.
fa.parallel(cor_poly$rho, n.obs = nrow(df), fa = "fa", cor = "poly",
            main = "Análise Paralela")

Análise Paralela — Scree Plot com autovalores simulados
Parallel analysis suggests that the number of factors =  3  and the number of components =  NA 
vss(cor_poly$rho, n.obs = nrow(df), rotate = "oblimin")


Very Simple Structure
Call: vss(x = cor_poly$rho, rotate = "oblimin", n.obs = nrow(df))
VSS complexity 1 achieves a maximimum of 0.65  with  2  factors
VSS complexity 2 achieves a maximimum of 0.73  with  2  factors

The Velicer MAP achieves a minimum of 0.04  with  2  factors 
BIC achieves a minimum of  873.61  with  2  factors
Sample Size adjusted BIC achieves a minimum of  1091.42  with  8  factors

Statistics by number of factors 
  vss1 vss2   map dof chisq     prob sqresid  fit RMSEA BIC SABIC complex
1 0.51 0.00 0.049 170  1626 7.6e-236    23.8 0.51  0.37 919  1454     1.0
2 0.65 0.72 0.043 151  1502 5.6e-221    13.4 0.72  0.37 874  1349     1.2
3 0.53 0.70 0.046 133  1436 3.1e-217    12.4 0.74  0.39 883  1301     1.5
4 0.56 0.73 0.048 116  1367 1.5e-212    10.4 0.79  0.41 885  1250     1.6
5 0.43 0.66 0.054 100  1318 1.4e-211    10.9 0.77  0.44 902  1217     2.0
6 0.44 0.62 0.062  85  1250 2.2e-206    10.7 0.78  0.46 896  1164     2.3
7 0.47 0.63 0.067  71  1211 7.5e-207     9.4 0.81  0.50 915  1139     2.5
8 0.36 0.54 0.079  58  1150 1.2e-202    10.3 0.79  0.54 909  1091     2.6
  eChisq  SRMR eCRMS eBIC
1    341 0.118 0.125 -366
2    139 0.076 0.085 -489
3     97 0.063 0.075 -457
4     64 0.051 0.065 -419
5     46 0.044 0.060 -369
6     34 0.038 0.056 -319
7     24 0.031 0.051 -271
8     15 0.025 0.045 -226

Ambos os métodos convergiram para uma solução de 2 fatores.

Etapa 4 — Extração dos fatores e rotação

Extraímos 2 fatores utilizando o método Weighted Least Squares (WLS), adequado para matrizes policóricas, com rotação oblíqua (oblimin), que permite correlação entre os fatores.

afe <- fa(cor_poly$rho,
          nfactors = 2,
          rotate = "oblimin",
          fm = "wls",
          n.obs = nrow(df))

print(afe, cut = 0.40, sort = TRUE)
Factor Analysis using method =  wls
Call: fa(r = cor_poly$rho, nfactors = 2, n.obs = nrow(df), rotate = "oblimin", 
    fm = "wls")
Standardized loadings (pattern matrix) based upon correlation matrix
    item  WLS1  WLS2    h2   u2 com
q4     4  0.79       0.616 0.38 1.0
q3     3  0.73       0.534 0.47 1.0
q9     9  0.70       0.482 0.52 1.0
q10   10  0.66       0.443 0.56 1.1
q16   16  0.65       0.421 0.58 1.0
q15   15  0.64       0.444 0.56 1.1
q7     7  0.62       0.440 0.56 1.2
q2     2  0.50       0.271 0.73 1.3
q8     8  0.48       0.283 0.72 1.4
q1     1             0.202 0.80 1.8
q17   17             0.119 0.88 1.3
q6     6        0.67 0.454 0.55 1.1
q5     5        0.65 0.439 0.56 1.0
q20   20        0.58 0.338 0.66 1.0
q14   14       -0.57 0.387 0.61 1.3
q19   19        0.53 0.330 0.67 1.5
q12   12        0.50 0.251 0.75 1.0
q13   13        0.43 0.198 0.80 1.1
q11   11             0.113 0.89 1.3
q18   18             0.092 0.91 1.2

                      WLS1 WLS2
SS loadings           4.19 2.66
Proportion Var        0.21 0.13
Cumulative Var        0.21 0.34
Proportion Explained  0.61 0.39
Cumulative Proportion 0.61 1.00

 With factor correlations of 
      WLS1  WLS2
WLS1  1.00 -0.06
WLS2 -0.06  1.00

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

df null model =  190  with the objective function =  33.45 with Chi Square =  1856.36
df of  the model are 151  and the objective function was  27.86 

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  64 with the empirical chi square  145.87  with prob <  0.6 
The total n.obs was  64  with Likelihood Chi Square =  1509.34  with prob <  1.7e-222 

Tucker Lewis Index of factoring reliability =  -0.054
RMSEA index =  0.375  and the 90 % confidence intervals are  0.361 0.395
BIC =  881.35
Fit based upon off diagonal values = 0.92
Measures of factor score adequacy             
                                                  WLS1 WLS2
Correlation of (regression) scores with factors   0.94 0.90
Multiple R square of scores with factors          0.89 0.80
Minimum correlation of possible factor scores     0.77 0.61

Nota: A solução com dois fatores explicou 34% da variância total, sendo 21% pelo Fator 1 e 13% pelo Fator 2. O Fator 1 agrupou nove itens diretos da escala — q4, q3, q9, q10, q16, q15, q7, q2 e q8 — com cargas variando de 0.48 a 0.79. São os itens que mais contribuíram para a estrutura fatorial, com comunalidades entre 0.27 e 0.62. O Fator 2 agrupou sete itens, a maioria com pontuação reversa: q6, q5, q20, q19, q12 e q13, com cargas entre 0.43 e 0.67. O item q14 também apareceu neste fator, porém com carga negativa (-0.57), o que indica que ele funciona na direção oposta aos demais, provavelmente por ser um item direto que compartilha variância de método com os reversos. Quatro itens não se encaixaram bem em nenhum dos fatores: q1, q17, q11 e q18. Todos apresentaram comunalidades muito baixas (abaixo de 0.20) e nenhuma carga acima de 0.40, o que significa que contribuem pouco para a estrutura da escala. Em versões futuras do instrumento, esses itens seriam candidatos a revisão ou exclusão. A correlação entre os dois fatores ficou próxima de zero (r = -0.06), o que sugere que a divisão em dois fatores não reflete necessariamente dois construtos distintos, mas sim um efeito de método ou seja, um artefato comum em escalas que combinam itens diretos e reversos. Quanto ao ajuste do modelo, o RMSR (0.08) e o índice de ajuste baseado em valores off-diagonal (0.92) foram satisfatórios. Já o TLI e o RMSEA ficaram fora dos parâmetros ideais, mas esses indicadores são reconhecidamente pouco confiáveis em amostras pequenas como a nossa (n = 64), de modo que não devem ser tomados como evidência definitiva de mau ajuste.

Etapa 5 — Avaliação da solução fatorial

Diagrama fatorial

fa.diagram(afe, simple = TRUE, main = "Estrutura Fatorial — 2 Fatores")

Diagrama da estrutura fatorial com 2 fatores

Comunalidades

A comunalidade (\(h^2\)) indica a proporção da variância de cada item explicada pelos fatores. Valores abaixo de 0.20 sugerem itens com baixa representação na solução fatorial.

comunalidades <- data.frame(
  Item = names(afe$communalities),
  h2 = round(afe$communalities, 3)
)
comunalidades[order(comunalidades$h2), ]
    Item    h2
q16  q16 0.107
q9    q9 0.132
q5    q5 0.173
q14  q14 0.183
q11  q11 0.208
q19  q19 0.213
q4    q4 0.255
q3    q3 0.278
q10  q10 0.280
q6    q6 0.301
q7    q7 0.315
q12  q12 0.327
q20  q20 0.347
q18  q18 0.352
q15  q15 0.386
q13  q13 0.389
q17  q17 0.424
q8    q8 0.501
q2    q2 0.535
q1    q1 0.559

Correlação entre fatores

round(afe$Phi, 3)
       WLS1   WLS2
WLS1  1.000 -0.058
WLS2 -0.058  1.000

Uma correlação próxima de zero entre os fatores sugere que a separação em dois fatores pode refletir um efeito de método (method effect) decorrente dos itens reversos, e não dois construtos substantivamente distintos.

Etapa 6 — Confiabilidade

Ômega (escala total)

O coeficiente ômega é mais robusto que o alfa para dados ordinais e estruturas multidimensionais.

omega(df %>% select(q1:q20), nfactors = 2)

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)
Alpha:                 0.77 
G.6:                   0.85 
Omega Hierarchical:    0.13 
Omega H asymptotic:    0.17 
Omega Total            0.81 

Schmid Leiman Factor loadings greater than  0.2 
         g   F1*   F2*    h2   h2   u2   p2  com
q1          0.29 -0.21       0.16 0.84 0.16 2.43
q2          0.35             0.13 0.87 0.07 1.19
q3    0.21  0.70        0.53 0.53 0.47 0.08 1.19
q4    0.24  0.76        0.63 0.63 0.37 0.09 1.19
q5-   0.23       -0.67  0.51 0.51 0.49 0.10 1.24
q6-              -0.63  0.43 0.43 0.57 0.07 1.19
q7    0.24  0.53 -0.21  0.38 0.38 0.62 0.14 1.72
q8          0.41        0.23 0.23 0.77 0.15 1.79
q9          0.67        0.49 0.49 0.51 0.08 1.18
q10         0.58        0.36 0.36 0.64 0.07 1.19
q11-             -0.20       0.05 0.95 0.13 1.54
q12-             -0.52  0.31 0.31 0.69 0.10 1.25
q13-             -0.32       0.12 0.88 0.13 1.41
q14              -0.47  0.27 0.27 0.73 0.13 1.46
q15         0.46        0.25 0.25 0.75 0.12 1.35
q16         0.51        0.28 0.28 0.72 0.10 1.22
q17         0.21             0.07 0.93 0.16 2.14
q18              -0.23       0.06 0.94 0.11 1.29
q19-       -0.23 -0.43  0.24 0.24 0.76 0.02 1.58
q20-             -0.50  0.28 0.28 0.72 0.08 1.19

With Sums of squares  of:
   g  F1*  F2*   h2 
0.56 3.09 2.12 2.21 

general/max  0.18   max/min =   1.46
mean percent general =  0.1    with sd =  0.04 and cv of  0.34 
Explained Common Variance of the general factor =  0.1 

The degrees of freedom are 151  and the fit is  2.87 
The number of observations was  64  with Chi Square =  155.36  with prob <  0.39
The root mean square of the residuals is  0.06 
The df corrected root mean square of the residuals is  0.07
RMSEA index =  0.014  and the 90 % confidence intervals are  0 0.063
BIC =  -472.63

Compare this with the adequacy of just a general factor and no group factors
The degrees of freedom for just the general factor are 170  and the fit is  5.72 
The number of observations was  64  with Chi Square =  313.48  with prob <  1.4e-10
The root mean square of the residuals is  0.14 
The df corrected root mean square of the residuals is  0.15 

RMSEA index =  0.114  and the 90 % confidence intervals are  0.095 0.136
BIC =  -393.53 

Measures of factor score adequacy             
                                                  g  F1*  F2*
Correlation of scores with factors             0.37 0.89 0.85
Multiple R square of scores with factors       0.14 0.79 0.72
Minimum correlation of factor score estimates -0.72 0.58 0.43

 Total, General and Subset omega for each subset
                                                 g  F1*  F2*
Omega total for total scores and subscales    0.81 0.81 0.71
Omega general for total scores and subscales  0.13 0.09 0.07
Omega group for total scores and subscales    0.60 0.72 0.65

Nota: O alfa (0.77) e o ômega total (0.81) mostram boa consistência interna. No entanto, o ômega hierárquico foi muito baixo (0.13), indicando que não há um fator geral forte por trás dos 20 itens. A variância confiável está nos fatores de grupo, não em um construto comum

Discussão

A análise fatorial exploratória identificou uma estrutura de dois fatores. O Fator 1 agrupou predominantemente os itens diretos da escala, enquanto o Fator 2 agrupou os itens com pontuação reversa. A correlação praticamente nula entre os fatores (r ≈ 0.06) sugere que essa separação reflete um efeito de método. Os itens q1, q11, q17 e q18 apresentaram comunalidades muito baixas (\(h^2\) < 0.20), indicando fraca representação na solução fatorial. Em análises futuras, esses itens podem ser candidatos a revisão ou exclusão.

É importante ressaltar que o tamanho amostral (n = 64) representa uma limitação significativa desta análise. Com uma razão de aproximadamente 3.2 observações por item, os resultados devem ser considerados preliminares e interpretados com cautela. Recomenda-se a replicação com amostras maiores para validação da estrutura fatorial.

Referências

  • Fabrigar, L. R., Wegener, D. T., MacCallum, R. C., & Strahan, E. J. (1999). Evaluating the use of exploratory factor analysis in psychological research. Psychological Methods, 4(3), 272–299.
  • Hair, J. F., Black, W. C., Babin, B. J., & Anderson, R. E. (2019). Multivariate data analysis (8th ed.). Cengage.
  • Podsakoff, P. M., MacKenzie, S. B., Lee, J. Y., & Podsakoff, N. P. (2003). Common method biases in behavioral research. Journal of Applied Psychology, 88(5), 879–903.
  • Weijters, B., Baumgartner, H., & Schillewaert, N. (2013). Reversed item bias: An integrative model. Psychological Methods, 18(3), 320–334.