6  Análise Psicométrica

6.1 Introdução à Psicometria

A psicometria é uma especialidade dentro das ciências comportamentais e sociais dedicada à mensuração de fenômenos psicológicos e sociais. Em pesquisas de saúde, a psicometria é fundamental para validar instrumentos que avaliam construtos como qualidade de vida, satisfação do paciente, literacia em saúde, sintomas psicológicos, entre outros.

6.1.1 Por que fazer um estudo antes de fazer um estudo?

Esta é a pergunta central da análise psicométrica. Antes de utilizar um questionário ou escala em uma pesquisa substantiva, é essencial validar o instrumento para garantir que ele mede o que realmente pretende medir.

6.1.2 O Custo de Medidas Inadequadas

Usar instrumentos que não avaliam corretamente o que propõem leva a decisões erradas baseadas em dados não confiáveis. Enquanto uma medida imperfeita pode ser melhor que nenhuma medida, pesquisadores devem reconhecer quando os procedimentos são falhos e moderar suas conclusões adequadamente.

Princípio fundamental: Medidas adequadas são uma condição necessária para pesquisa válida.

6.1.3 Aplicações em Saúde

  • Validação transcultural de instrumentos (adaptação entre idiomas e culturas)
  • Desenvolvimento de escalas (criação de novos instrumentos)
  • Avaliação de propriedades psicométricas de questionários existentes
  • Garantia de qualidade dos instrumentos antes da pesquisa principal

Exemplo: Adaptação do Questionário SF-8 para Swahili (Tanzânia) para populações com lesão cerebral traumática.

6.2 Preparação dos Dados Psicométricos

Neste capítulo, utilizaremos o dataset literacia_data.csv, que contém respostas de uma pesquisa sobre literacia digital, incluindo dados demográficos e 10 itens de escala (L1 a L10).

6.2.1 Carregando Pacotes

library(tidyverse)    # Manipulação de dados
library(psych)        # Análise psicométrica (Alpha, Omega, EFA)
library(corrplot)     # Visualização de correlações
library(lavaan)       # Análise Fatorial Confirmatória (CFA)
library(lavaanPlot)   # Visualização de modelos SEM
library(qgraph)       # Análise de redes
library(GGally)       # Gráficos de correlação

# Remover notação científica
options(scipen = 999)

6.2.2 Importando e Explorando os Dados

# Importar dados de literacia digital
dados <- read_csv("data/literacia_data.csv")

# Visualizar primeiras linhas
head(dados)
# Estrutura do dataframe
str(dados)
spc_tbl_ [431 × 26] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
 $ sexo        : num [1:431] 1 1 1 1 1 2 2 1 2 1 ...
 $ etnia       : num [1:431] 1 1 1 1 1 3 1 1 1 1 ...
 $ idade       : num [1:431] 30 39 57 67 28 30 37 32 45 26 ...
 $ estcivil    : num [1:431] 2 2 2 2 2 1 2 1 2 2 ...
 $ cidade      : chr [1:431] "Faxinal Pr" "Faxinal" "Londrina" "Londrina" ...
 $ escolaridade: num [1:431] 5 5 3 3 2 4 4 5 4 2 ...
 $ economia    : num [1:431] 3 3 3 3 3 2 4 2 1 2 ...
 $ profissao   : chr [1:431] "Enfermeira" "Enfermeira" "Vendedora" "Professora Municipal" ...
 $ renda       : num [1:431] 4 4 3 3 2 3 3 2 2 3 ...
 $ beneficio   : num [1:431] 9 9 9 9 1 9 9 9 9 9 ...
 $ comunicacao : chr [1:431] "Internet" "Internet" "Internet" "Internet" ...
 $ celular     : num [1:431] 1 1 1 1 1 1 1 1 2 1 ...
 $ internet    : num [1:431] 1 1 1 1 1 1 1 1 1 1 ...
 $ acesso      : chr [1:431] "Computador, Celular" "Celular" "Celular" "Tablet, Celular" ...
 $ L1          : num [1:431] 4 5 3 4 5 5 5 4 3 4 ...
 $ L2          : num [1:431] 4 5 4 5 5 4 4 4 4 5 ...
 $ L3          : num [1:431] 4 4 4 4 4 3 4 3 4 5 ...
 $ L4          : num [1:431] 4 4 4 4 4 3 4 2 3 5 ...
 $ L5          : num [1:431] 4 4 4 4 4 3 4 3 4 5 ...
 $ L6          : num [1:431] 5 5 4 4 4 4 4 3 1 5 ...
 $ L7          : num [1:431] 4 4 4 4 4 4 5 3 1 5 ...
 $ L8          : num [1:431] 4 4 4 4 4 3 4 2 1 5 ...
 $ L9          : num [1:431] 4 4 4 4 4 4 4 2 1 5 ...
 $ L10         : num [1:431] 4 4 4 4 4 2 4 3 1 5 ...
 $ literacia   : num [1:431] 4.1 4.3 3.9 4.1 4.2 3.5 4.2 2.9 2.3 4.9 ...
 $ scores      : num [1:431] 0.586 0.586 0.335 0.335 0.335 ...
 - attr(*, "spec")=
  .. cols(
  ..   sexo = col_double(),
  ..   etnia = col_double(),
  ..   idade = col_double(),
  ..   estcivil = col_double(),
  ..   cidade = col_character(),
  ..   escolaridade = col_double(),
  ..   economia = col_double(),
  ..   profissao = col_character(),
  ..   renda = col_double(),
  ..   beneficio = col_double(),
  ..   comunicacao = col_character(),
  ..   celular = col_double(),
  ..   internet = col_double(),
  ..   acesso = col_character(),
  ..   L1 = col_double(),
  ..   L2 = col_double(),
  ..   L3 = col_double(),
  ..   L4 = col_double(),
  ..   L5 = col_double(),
  ..   L6 = col_double(),
  ..   L7 = col_double(),
  ..   L8 = col_double(),
  ..   L9 = col_double(),
  ..   L10 = col_double(),
  ..   literacia = col_double(),
  ..   scores = col_double()
  .. )
 - attr(*, "problems")=<externalptr> 
# Resumo estatístico
summary(dados)
      sexo           etnia           idade          estcivil    
 Min.   :1.000   Min.   :1.000   Min.   :15.00   Min.   :1.000  
 1st Qu.:1.000   1st Qu.:1.000   1st Qu.:27.00   1st Qu.:1.000  
 Median :1.000   Median :1.000   Median :36.00   Median :2.000  
 Mean   :1.332   Mean   :1.445   Mean   :36.75   Mean   :1.766  
 3rd Qu.:2.000   3rd Qu.:1.000   3rd Qu.:45.00   3rd Qu.:2.000  
 Max.   :2.000   Max.   :4.000   Max.   :76.00   Max.   :4.000  
    cidade           escolaridade     economia      profissao        
 Length:431         Min.   :1.00   Min.   :1.000   Length:431        
 Class :character   1st Qu.:3.00   1st Qu.:2.000   Class :character  
 Mode  :character   Median :3.00   Median :3.000   Mode  :character  
                    Mean   :3.65   Mean   :2.733                     
                    3rd Qu.:5.00   3rd Qu.:4.000                     
                    Max.   :5.00   Max.   :4.000                     
     renda         beneficio     comunicacao           celular     
 Min.   :1.000   Min.   :1.000   Length:431         Min.   :1.000  
 1st Qu.:2.000   1st Qu.:9.000   Class :character   1st Qu.:1.000  
 Median :3.000   Median :9.000   Mode  :character   Median :1.000  
 Mean   :2.673   Mean   :8.782                      Mean   :1.005  
 3rd Qu.:3.000   3rd Qu.:9.000                      3rd Qu.:1.000  
 Max.   :5.000   Max.   :9.000                      Max.   :2.000  
    internet        acesso                L1              L2       
 Min.   :1.000   Length:431         Min.   :1.000   Min.   :1.000  
 1st Qu.:1.000   Class :character   1st Qu.:3.000   1st Qu.:4.000  
 Median :1.000   Mode  :character   Median :4.000   Median :4.000  
 Mean   :1.028                      Mean   :3.668   Mean   :4.204  
 3rd Qu.:1.000                      3rd Qu.:5.000   3rd Qu.:5.000  
 Max.   :2.000                      Max.   :5.000   Max.   :5.000  
       L3              L4              L5              L6             L7       
 Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.00   Min.   :1.000  
 1st Qu.:3.000   1st Qu.:3.000   1st Qu.:3.000   1st Qu.:3.00   1st Qu.:3.000  
 Median :4.000   Median :4.000   Median :4.000   Median :4.00   Median :4.000  
 Mean   :3.536   Mean   :3.661   Mean   :3.712   Mean   :3.64   Mean   :3.675  
 3rd Qu.:4.000   3rd Qu.:4.000   3rd Qu.:4.000   3rd Qu.:4.00   3rd Qu.:4.000  
 Max.   :5.000   Max.   :5.000   Max.   :5.000   Max.   :5.00   Max.   :5.000  
       L8              L9             L10          literacia    
 Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.600  
 1st Qu.:3.000   1st Qu.:3.000   1st Qu.:2.000   1st Qu.:3.300  
 Median :4.000   Median :4.000   Median :3.000   Median :3.700  
 Mean   :3.631   Mean   :3.603   Mean   :3.181   Mean   :3.651  
 3rd Qu.:4.000   3rd Qu.:4.000   3rd Qu.:4.000   3rd Qu.:4.100  
 Max.   :5.000   Max.   :5.000   Max.   :5.000   Max.   :5.000  
     scores         
 Min.   :-1.838299  
 1st Qu.:-0.454011  
 Median : 0.021178  
 Mean   : 0.001026  
 3rd Qu.: 0.335293  
 Max.   : 1.632261  

6.2.3 Convertendo Variáveis Categóricas

# Converter variáveis qualitativas em fatores
dados <- dados %>%
  mutate(across(c(sexo, etnia, estcivil, escolaridade, economia,
                  renda, beneficio, comunicacao, celular,
                  internet, acesso), as.factor))

# Verificar estrutura após conversão
str(dados)
tibble [431 × 26] (S3: tbl_df/tbl/data.frame)
 $ sexo        : Factor w/ 2 levels "1","2": 1 1 1 1 1 2 2 1 2 1 ...
 $ etnia       : Factor w/ 4 levels "1","2","3","4": 1 1 1 1 1 3 1 1 1 1 ...
 $ idade       : num [1:431] 30 39 57 67 28 30 37 32 45 26 ...
 $ estcivil    : Factor w/ 4 levels "1","2","3","4": 2 2 2 2 2 1 2 1 2 2 ...
 $ cidade      : chr [1:431] "Faxinal Pr" "Faxinal" "Londrina" "Londrina" ...
 $ escolaridade: Factor w/ 5 levels "1","2","3","4",..: 5 5 3 3 2 4 4 5 4 2 ...
 $ economia    : Factor w/ 4 levels "1","2","3","4": 3 3 3 3 3 2 4 2 1 2 ...
 $ profissao   : chr [1:431] "Enfermeira" "Enfermeira" "Vendedora" "Professora Municipal" ...
 $ renda       : Factor w/ 5 levels "1","2","3","4",..: 4 4 3 3 2 3 3 2 2 3 ...
 $ beneficio   : Factor w/ 5 levels "1","2","3","4",..: 5 5 5 5 1 5 5 5 5 5 ...
 $ comunicacao : Factor w/ 12 levels "Internet","Jornal Escrito e/ou Revistas",..: 1 1 1 1 1 10 10 1 9 1 ...
 $ celular     : Factor w/ 2 levels "1","2": 1 1 1 1 1 1 1 1 2 1 ...
 $ internet    : Factor w/ 2 levels "1","2": 1 1 1 1 1 1 1 1 1 1 ...
 $ acesso      : Factor w/ 10 levels "Celular","Celular, Notebook",..: 4 1 1 9 1 1 4 2 3 1 ...
 $ L1          : num [1:431] 4 5 3 4 5 5 5 4 3 4 ...
 $ L2          : num [1:431] 4 5 4 5 5 4 4 4 4 5 ...
 $ L3          : num [1:431] 4 4 4 4 4 3 4 3 4 5 ...
 $ L4          : num [1:431] 4 4 4 4 4 3 4 2 3 5 ...
 $ L5          : num [1:431] 4 4 4 4 4 3 4 3 4 5 ...
 $ L6          : num [1:431] 5 5 4 4 4 4 4 3 1 5 ...
 $ L7          : num [1:431] 4 4 4 4 4 4 5 3 1 5 ...
 $ L8          : num [1:431] 4 4 4 4 4 3 4 2 1 5 ...
 $ L9          : num [1:431] 4 4 4 4 4 4 4 2 1 5 ...
 $ L10         : num [1:431] 4 4 4 4 4 2 4 3 1 5 ...
 $ literacia   : num [1:431] 4.1 4.3 3.9 4.1 4.2 3.5 4.2 2.9 2.3 4.9 ...
 $ scores      : num [1:431] 0.586 0.586 0.335 0.335 0.335 ...

6.2.4 Tratamento de Dados Faltantes

# Verificar quantidade de dados faltantes por coluna
colSums(is.na(dados))
        sexo        etnia        idade     estcivil       cidade escolaridade 
           0            0            0            0            0            0 
    economia    profissao        renda    beneficio  comunicacao      celular 
           0            0            0            0            0            0 
    internet       acesso           L1           L2           L3           L4 
           0            0            0            0            0            0 
          L5           L6           L7           L8           L9          L10 
           0            0            0            0            0            0 
   literacia       scores 
           0            0 
# Proporção de dados faltantes (%)
colMeans(is.na(dados)) * 100
        sexo        etnia        idade     estcivil       cidade escolaridade 
           0            0            0            0            0            0 
    economia    profissao        renda    beneficio  comunicacao      celular 
           0            0            0            0            0            0 
    internet       acesso           L1           L2           L3           L4 
           0            0            0            0            0            0 
          L5           L6           L7           L8           L9          L10 
           0            0            0            0            0            0 
   literacia       scores 
           0            0 
# Estratégias de tratamento:
# 1. Exclusão listwise (casos completos)
dados_completo <- dados[complete.cases(dados), ]

# 2. Imputação por média (se apropriado)
# dados$idade[is.na(dados$idade)] <- mean(dados$idade, na.rm = TRUE)

Importante: A escolha da estratégia de tratamento de dados faltantes depende do padrão dos missing data (MCAR, MAR, MNAR) e dos objetivos da pesquisa. Para análises psicométricas, geralmente preferimos casos completos.

6.3 Matriz de Correlação

Antes de realizar análises fatoriais, é útil examinar a estrutura de correlações entre os itens.

6.3.1 Calculando e Visualizando Correlações

# Selecionar itens da escala de literacia (L1 a L10) e idade
dados_cor <- dados %>%
  select(L1:L10, idade)

# Calcular matriz de correlação
matriz_cor <- cor(dados_cor, use = "complete.obs")

# Visualização com corrplot - círculos
corrplot(matriz_cor,
         method = "circle",
         type = "upper",
         tl.col = "black",
         tl.srt = 45)

# Visualização com números
corrplot(matriz_cor,
         method = "number",
         type = "upper",
         tl.col = "black",
         tl.srt = 45)

# Visualização com cores e ordenação por clusters
corrplot(matriz_cor,
         method = "color",
         type = "upper",
         order = "hclust",
         addCoef.col = "black",
         tl.col = "black",
         tl.srt = 45,
         number.cex = 0.7)

6.3.2 Interpretação da Matriz de Correlação

Os valores de correlação variam de -1 a +1:

  • r ≈ +1: Correlação positiva forte
  • r ≈ 0: Correlação fraca ou ausente
  • r ≈ -1: Correlação negativa forte

Para análise fatorial, esperamos:

  • Correlações moderadas a fortes entre itens do mesmo fator
  • Correlações mais fracas entre itens de fatores diferentes
  • Ausência de correlações muito altas (r > 0,90), que indicam redundância

6.3.3 Heatmap de Correlação

# Heatmap com cores
heatmap(matriz_cor,
        col = colorRampPalette(c("blue", "white", "red"))(20),
        main = "Heatmap de Correlações - Itens de Literacia")

6.4 Análise de Redes

A análise de redes oferece uma perspectiva alternativa sobre as relações entre itens, visualizando-os como nós conectados por arestas.

6.4.1 Criando a Rede

# Selecionar itens da escala
dados_rede <- dados %>%
  select(L1:L10) %>%
  na.omit()

# Calcular matriz de correlação
matriz_rede <- cor(dados_rede)

# Calcular tamanho da amostra
n_amostra <- nrow(dados_rede)

# Criar rede com qgraph
rede <- qgraph(matriz_rede,
               graph = "glasso",        # Regularização LASSO
               layout = "spring",       # Layout spring
               vsize = 8,               # Tamanho dos nós
               sampleSize = n_amostra,  # Tamanho da amostra
               edge.labels = TRUE,      # Mostrar valores nas arestas
               edge.label.cex = 0.8,    # Tamanho dos rótulos
               title = "Rede de Literacia Digital")

6.4.2 Interpretação da Análise de Redes

  • Nós: Representam as variáveis (itens)
  • Arestas: Representam relações entre variáveis
  • Espessura das arestas: Indica a força da relação
  • Cor das arestas: Verde = positiva, Vermelho = negativa
  • Posição dos nós: Algoritmo agrupa nós fortemente relacionados

Medidas de centralidade (grau, intermediação, proximidade) podem identificar os itens mais importantes na rede.

6.5 Análise de Confiabilidade

A confiabilidade refere-se ao grau de consistência e precisão de um instrumento de medida. Representa a proporção da variância atribuível ao verdadeiro escore da variável latente.

6.5.1 Alfa de Cronbach

O Alfa de Cronbach (α) é a medida mais amplamente utilizada de consistência interna.

6.5.1.1 Teoria

  • Baseado nas correlações entre itens
  • Usa a matriz de covariância dos itens
  • Valores aceitáveis: α > 0,70
  • Valores ideais: 0,70 < α < 0,95

Fórmula:

\[ \alpha = \frac{k}{k-1} \left(1 - \frac{\sum \sigma^2_i}{\sigma^2_T}\right) \]

Onde: - k = número de itens - σ²ᵢ = variância de cada item - σ²_T = variância total da escala

6.5.1.2 Calculando o Alfa de Cronbach

# Selecionar itens da escala
itens_escala <- dados %>%
  select(L1:L10) %>%
  na.omit()

# Calcular Alfa de Cronbach
alfa <- psych::alpha(itens_escala,
                     n.iter = 1000,      # Iterações para bootstrap
                     check.keys = TRUE)  # Verifica itens reversos

# Exibir resultados
print(alfa)

Reliability analysis   
Call: psych::alpha(x = itens_escala, check.keys = TRUE, n.iter = 1000)

  raw_alpha std.alpha G6(smc) average_r S/N    ase mean   sd median_r
      0.88      0.89     0.9      0.44 7.8 0.0087  3.7 0.64     0.46

    95% confidence boundaries 
             lower alpha upper
Feldt         0.86  0.88   0.9
Duhachek      0.86  0.88   0.9
bootstrapped  0.86  0.88   0.9

 Reliability if an item is dropped:
    raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
L1       0.89      0.89    0.90      0.47 8.1   0.0079 0.027  0.48
L2       0.88      0.90    0.91      0.49 8.5   0.0085 0.021  0.48
L3       0.87      0.88    0.90      0.44 7.1   0.0096 0.032  0.46
L4       0.86      0.87    0.88      0.42 6.6   0.0099 0.026  0.43
L5       0.86      0.87    0.88      0.42 6.6   0.0100 0.025  0.43
L6       0.86      0.87    0.88      0.42 6.5   0.0103 0.026  0.44
L7       0.86      0.86    0.88      0.42 6.4   0.0104 0.026  0.44
L8       0.86      0.87    0.89      0.42 6.6   0.0101 0.028  0.43
L9       0.87      0.88    0.90      0.45 7.3   0.0094 0.028  0.46
L10      0.86      0.87    0.89      0.43 6.7   0.0102 0.031  0.44

 Item statistics 
      n raw.r std.r r.cor r.drop mean   sd
L1  431  0.57  0.53  0.45   0.41  3.7 1.22
L2  431  0.46  0.45  0.36   0.34  4.2 0.85
L3  431  0.68  0.69  0.64   0.60  3.5 0.81
L4  431  0.75  0.77  0.77   0.69  3.7 0.80
L5  431  0.76  0.78  0.77   0.69  3.7 0.80
L6  431  0.80  0.80  0.80   0.74  3.6 0.90
L7  431  0.81  0.82  0.82   0.76  3.7 0.87
L8  431  0.77  0.78  0.75   0.71  3.6 0.87
L9  431  0.66  0.66  0.61   0.56  3.6 0.94
L10 431  0.77  0.75  0.72   0.69  3.2 1.07

Non missing response frequency for each item
       1    2    3    4    5 miss
L1  0.07 0.08 0.28 0.24 0.33    0
L2  0.02 0.02 0.08 0.48 0.40    0
L3  0.01 0.09 0.32 0.50 0.07    0
L4  0.00 0.10 0.22 0.58 0.10    0
L5  0.01 0.08 0.20 0.61 0.10    0
L6  0.02 0.11 0.18 0.57 0.11    0
L7  0.02 0.10 0.18 0.59 0.11    0
L8  0.02 0.09 0.23 0.55 0.10    0
L9  0.03 0.10 0.24 0.50 0.13    0
L10 0.06 0.23 0.24 0.39 0.07    0

6.5.1.3 Interpretação do Output

Reliability analysis

raw_alpha std.alpha G6(smc) average_r S/N
     0.89      0.89    0.91      0.42  8.1

lower alpha upper     95% confidence boundaries
0.87  0.89  0.91

Interpretação:

  • raw_alpha = 0,89: Alfa de Cronbach bruto (excelente consistência interna)
  • std.alpha = 0,89: Alfa padronizado
  • average_r = 0,42: Correlação média entre itens
  • IC 95% [0,87; 0,91]: Intervalo de confiança do alfa

Critérios de interpretação:

Alfa de Cronbach Consistência Interna
α < 0,60 Inaceitável
0,60 ≤ α < 0,70 Questionável
0,70 ≤ α < 0,80 Aceitável
0,80 ≤ α < 0,90 Boa
α ≥ 0,90 Excelente (pode indicar redundância)

6.5.1.4 Limitação Importante

“Alpha não valida um teste”

Alta consistência interna não garante que o instrumento mede o que afirma medir. Confiabilidade é necessária, mas não suficiente para validade.

6.5.2 Ômega de McDonald

O Ômega de McDonald (ω) é uma medida alternativa de confiabilidade composta, considerada mais geral que o Alfa de Cronbach.

6.5.2.1 Teoria

  • Calculado usando cargas fatoriais e unicidades da análise fatorial
  • Baseado em estrutura CFA
  • Mais apropriado para escalas multidimensionais
  • Valores aceitáveis: ω > 0,70

Fórmula:

\[ \omega = \frac{(\sum \lambda_i)^2}{(\sum \lambda_i)^2 + \sum \theta_i} \]

Onde: - λᵢ = cargas fatoriais - θᵢ = variâncias de erro

6.5.2.2 Calculando o Ômega de McDonald

# Calcular Ômega de McDonald
omega_result <- omega(itens_escala)

# Exibir resultados
print(omega_result)
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.89 
G.6:                   0.9 
Omega Hierarchical:    0.83 
Omega H asymptotic:    0.9 
Omega Total            0.92 

Schmid Leiman Factor loadings greater than  0.2 
       g   F1*   F2*   F3*    h2   h2   u2   p2  com
L1  0.38              0.89  0.93 0.93 0.07 0.15 1.35
L2  0.30              0.32       0.19 0.81 0.46 2.03
L3  0.55        0.30        0.42 0.42 0.58 0.72 1.77
L4  0.65        0.69        0.90 0.90 0.10 0.47 1.99
L5  0.68        0.53        0.74 0.74 0.26 0.62 1.89
L6  0.82                    0.68 0.68 0.32 1.00 1.00
L7  0.86                    0.74 0.74 0.26 1.00 1.00
L8  0.79                    0.62 0.62 0.38 1.00 1.01
L9  0.63                    0.42 0.42 0.58 0.96 1.10
L10 0.74                    0.55 0.55 0.45 0.98 1.04

With Sums of squares  of:
   g  F1*  F2*  F3*   h2 
4.41 0.00 0.86 0.95 4.32 

general/max  1.02   max/min =   Inf
mean percent general =  0.74    with sd =  0.3 and cv of  0.41 
Explained Common Variance of the general factor =  0.71 

The degrees of freedom are 18  and the fit is  0.4 
The number of observations was  431  with Chi Square =  169.31  with prob <  0.000000000000000000000000012
The root mean square of the residuals is  0.03 
The df corrected root mean square of the residuals is  0.04
RMSEA index =  0.14  and the 90 % confidence intervals are  0.121 0.159
BIC =  60.12

Compare this with the adequacy of just a general factor and no group factors
The degrees of freedom for just the general factor are 35  and the fit is  1.21 
The number of observations was  431  with Chi Square =  513.4  with prob <  0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000023
The root mean square of the residuals is  0.07 
The df corrected root mean square of the residuals is  0.08 

RMSEA index =  0.178  and the 90 % confidence intervals are  0.165 0.192
BIC =  301.09 

Measures of factor score adequacy             
                                                 g F1*  F2*  F3*
Correlation of scores with factors            0.95   0 0.89 0.95
Multiple R square of scores with factors      0.91   0 0.78 0.91
Minimum correlation of factor score estimates 0.81  -1 0.57 0.82

 Total, General and Subset omega for each subset
                                                 g F1*  F2*  F3*
Omega total for total scores and subscales    0.92  NA 0.89 0.78
Omega general for total scores and subscales  0.83  NA 0.75 0.67
Omega group for total scores and subscales    0.07  NA 0.14 0.11

6.5.3 Comparação: Alfa vs. Ômega

Característica Alfa de Cronbach Ômega de McDonald
Base de cálculo Matriz de covariância Cargas fatoriais (CFA)
Estrutura fatorial Não requer Requer modelo CFA
Dimensionalidade Assume unidimensionalidade Adequado para multidimensional
Generalidade Mais restrito Mais geral

Recomendação: Reporte ambos os índices quando possível, especialmente para escalas multidimensionais.

6.6 Análise Fatorial Exploratória (EFA)

A Análise Fatorial Exploratória (AFE) é usada para desenvolvimento de teoria, explorando a estrutura latente dos dados sem hipóteses prévias sobre o número de fatores.

6.6.1 Teoria da EFA

6.6.1.1 Características Principais

  1. Natureza exploratória: Número de fatores determinado pelos dados
  2. Cargas não fixadas: Padrão de cargas emerge dos dados
  3. Redução de dimensionalidade: Reduz muitos itens a poucos fatores latentes
  4. Rotação: Fatores rotacionados para interpretação mais clara

6.6.1.2 Equação Básica

\[ X = \Lambda F + \epsilon \]

Onde: - X = variáveis observadas (itens) - Λ = matriz de cargas fatoriais - F = fatores latentes - ε = erros de medida

6.6.2 Pressupostos da EFA

6.6.2.1 Teste KMO (Kaiser-Meyer-Olkin)

O KMO avalia a adequação da amostra para análise fatorial.

# Calcular KMO
kmo_resultado <- KMO(itens_escala)

# Imprimir KMO geral
cat("KMO geral:", kmo_resultado$MSA, "\n")
KMO geral: 0.8706569 
# Interpretar resultado
if (kmo_resultado$MSA >= 0.9) {
  cat("A adequação da amostra é excelente.\n")
} else if (kmo_resultado$MSA >= 0.8) {
  cat("A adequação da amostra é boa.\n")
} else if (kmo_resultado$MSA >= 0.7) {
  cat("A adequação da amostra é razoável.\n")
} else if (kmo_resultado$MSA >= 0.6) {
  cat("A adequação da amostra é medíocre.\n")
} else if (kmo_resultado$MSA >= 0.5) {
  cat("A adequação da amostra é inadequada.\n")
} else {
  cat("A adequação da amostra é inaceitável.\n")
}
A adequação da amostra é boa.

Critérios de interpretação:

KMO Adequação da Amostra
KMO ≥ 0,90 Excelente
0,80 ≤ KMO < 0,90 Boa
0,70 ≤ KMO < 0,80 Razoável
0,60 ≤ KMO < 0,70 Medíocre
0,50 ≤ KMO < 0,60 Inadequada
KMO < 0,50 Inaceitável

6.6.2.2 Teste de Esfericidade de Bartlett

Testa se a matriz de correlação é significativamente diferente de uma matriz identidade.

  • H₀: Matriz de correlação é uma matriz identidade (variáveis não correlacionadas)
  • H₁: Existem correlações significativas entre variáveis
  • Desejado: p < 0,05 (rejeitar H₀)

6.6.3 Determinando o Número de Fatores

6.6.3.1 Análise Paralela

A análise paralela é o método mais confiável para determinar o número de fatores.

# Realizar análise paralela
fa.parallel(itens_escala,
            fa = "fa",          # Análise fatorial (não PCA)
            n.iter = 100,       # Número de iterações
            main = "Análise Paralela - Scree Plot")

Parallel analysis suggests that the number of factors =  4  and the number of components =  NA 

Interpretação:

  • Linha azul: Autovalores observados nos dados reais
  • Linha vermelha: Autovalores médios de dados aleatórios (simulados)
  • Linha verde: Autovalores do 95º percentil dos dados simulados
  • Decisão: Reter fatores onde a linha azul está acima da linha vermelha

6.6.3.2 Regra de Kaiser (Autovalores > 1)

Método tradicional, mas menos confiável que análise paralela.

# Scree plot simples
scree(itens_escala, main = "Scree Plot")

6.6.4 Realizando a EFA

# Determinar número de fatores (baseado em análise paralela)
n_fatores <- 4  # Ajustar baseado em análise paralela

# Realizar EFA
efa_resultado <- fa(itens_escala,
                    nfactors = n_fatores,
                    rotate = "varimax",  # Rotação ortogonal
                    fm = "ml")           # Máxima verossimilhança

# Imprimir resultados
print(efa_resultado)
Factor Analysis using method =  ml
Call: fa(r = itens_escala, nfactors = n_fatores, rotate = "varimax", 
    fm = "ml")
Standardized loadings (pattern matrix) based upon correlation matrix
     ML3  ML1  ML4  ML2   h2   u2 com
L1  0.07 0.10 0.11 0.89 0.81 0.19 1.1
L2  0.13 0.16 0.06 0.41 0.21 0.79 1.6
L3  0.46 0.17 0.31 0.33 0.44 0.56 3.0
L4  0.82 0.23 0.30 0.14 0.84 0.16 1.5
L5  0.78 0.34 0.23 0.14 0.80 0.20 1.6
L6  0.34 0.76 0.26 0.22 0.81 0.19 1.9
L7  0.28 0.77 0.33 0.24 0.84 0.16 1.9
L8  0.30 0.40 0.61 0.17 0.65 0.35 2.4
L9  0.26 0.17 0.76 0.04 0.67 0.33 1.4
L10 0.22 0.39 0.51 0.31 0.56 0.44 3.1

                       ML3  ML1  ML4  ML2
SS loadings           1.92 1.75 1.64 1.33
Proportion Var        0.19 0.18 0.16 0.13
Cumulative Var        0.19 0.37 0.53 0.66
Proportion Explained  0.29 0.26 0.25 0.20
Cumulative Proportion 0.29 0.55 0.80 1.00

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

df null model =  45  with the objective function =  5.51 with Chi Square =  2344.82
df of  the model are 11  and the objective function was  0.04 

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

The harmonic n.obs is  431 with the empirical chi square  2.62  with prob <  0.99 
The total n.obs was  431  with Likelihood Chi Square =  15.62  with prob <  0.16 

Tucker Lewis Index of factoring reliability =  0.992
RMSEA index =  0.031  and the 90 % confidence intervals are  0 0.064
BIC =  -51.11
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                   ML3  ML1  ML4  ML2
Correlation of (regression) scores with factors   0.90 0.89 0.82 0.90
Multiple R square of scores with factors          0.82 0.79 0.68 0.81
Minimum correlation of possible factor scores     0.64 0.58 0.36 0.62
# Visualizar diagrama de fatores
fa.diagram(efa_resultado)

6.6.5 Interpretação das Cargas Fatoriais

As cargas fatoriais (factor loadings) representam a correlação entre item e fator.

Critérios de interpretação:

Carga Fatorial Interpretação
|λ| ≥ 0,70 Excelente
|λ| ≥ 0,63 Muito boa
|λ| ≥ 0,55 Boa
|λ| ≥ 0,45 Razoável
|λ| ≥ 0,32 Fraca
|λ| < 0,32 Inaceitável

Variância explicada: λ² = R²

Exemplo: Carga de 0,70 explica 0,49 (49%) da variância do item.

6.6.6 Rotação de Fatores

  • Varimax (ortogonal): Fatores não correlacionados - mais simples de interpretar
  • Oblimin (oblíqua): Permite correlação entre fatores - mais realista em muitos contextos

6.6.7 EFA Unidimensional (Exemplo com Literacia)

Se a teoria sugere que o instrumento é unidimensional:

# EFA com 1 fator (modelo teórico unidimensional)
efa_uni <- fa(itens_escala,
              nfactors = 1,
              rotate = "none",   # Sem rotação (1 fator)
              fm = "ml")

# Resultados
print(efa_uni)
Factor Analysis using method =  ml
Call: fa(r = itens_escala, nfactors = 1, rotate = "none", fm = "ml")
Standardized loadings (pattern matrix) based upon correlation matrix
     ML1   h2   u2 com
L1  0.40 0.16 0.84   1
L2  0.32 0.11 0.89   1
L3  0.61 0.37 0.63   1
L4  0.75 0.56 0.44   1
L5  0.77 0.59 0.41   1
L6  0.83 0.69 0.31   1
L7  0.84 0.71 0.29   1
L8  0.75 0.57 0.43   1
L9  0.61 0.37 0.63   1
L10 0.71 0.50 0.50   1

                ML1
SS loadings    4.63
Proportion Var 0.46

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

df null model =  45  with the objective function =  5.51 with Chi Square =  2344.82
df of  the model are 35  and the objective function was  1.13 

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  431 with the empirical chi square  126.55  with prob <  0.0000000000027 
The total n.obs was  431  with Likelihood Chi Square =  481.23  with prob <  0.000000000000000000000000000000000000000000000000000000000000000000000000000000078 

Tucker Lewis Index of factoring reliability =  0.75
RMSEA index =  0.172  and the 90 % confidence intervals are  0.159 0.186
BIC =  268.92
Fit based upon off diagonal values = 0.97
Measures of factor score adequacy             
                                                   ML1
Correlation of (regression) scores with factors   0.96
Multiple R square of scores with factors          0.92
Minimum correlation of possible factor scores     0.84
# Diagrama
fa.diagram(efa_uni)

6.7 Análise Fatorial Confirmatória (CFA)

A Análise Fatorial Confirmatória (AFC) é usada para testar teoria, verificando se uma estrutura fatorial pré-especificada se ajusta aos dados.

6.7.1 Teoria da CFA

6.7.1.1 Características Principais

  1. Natureza confirmatória: Número de fatores especificado a priori
  2. Cargas fixadas: Padrão de cargas especificado antes da análise
  3. Testa teoria: Verifica se estrutura teórica se ajusta aos dados empíricos
  4. Fatores correlacionados: Geralmente permite correlações entre fatores

6.7.1.2 Diferenças EFA vs. CFA

Aspecto EFA CFA
Objetivo Desenvolvimento de teoria Teste de teoria
Fatores Determinados pelos dados Especificados a priori
Cargas Não fixadas Padrão fixo
Rotação Sim (para interpretação) Não aplicável
Correlação entre fatores Geralmente ortogonais Geralmente correlacionados
Erros correlacionados Não permitidos Podem ser permitidos
Testes estatísticos Limitados Extensivos (índices de ajuste)

6.7.2 Especificação do Modelo no lavaan

O pacote lavaan usa sintaxe intuitiva para especificar modelos CFA.

6.7.2.1 Sintaxe básica

# =~ define fatores latentes
# ~~ define correlações/covariâncias

6.7.2.2 Exemplo: Modelo Unidimensional

# Carregar lavaan
library(lavaan)

# Especificar modelo unidimensional
modelo_cfa <- '
  # Definição do fator latente
  Literacia =~ L1 + L2 + L3 + L4 + L5 + L6 + L7 + L8 + L9 + L10
'

# Estimar modelo
ajuste_cfa <- cfa(modelo_cfa,
                  data = itens_escala,
                  estimator = "ML")  # Máxima verossimilhança

# Sumarizar resultados
summary(ajuste_cfa,
        fit.measures = TRUE,    # Mostrar índices de ajuste
        standardized = TRUE)    # Mostrar coeficientes padronizados
lavaan 0.6-21 ended normally after 34 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        20

  Number of observations                           431

Model Test User Model:
                                                      
  Test statistic                               487.836
  Degrees of freedom                                35
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2373.267
  Degrees of freedom                                45
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.806
  Tucker-Lewis Index (TLI)                       0.750

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -4737.734
  Loglikelihood unrestricted model (H1)      -4493.816
                                                      
  Akaike (AIC)                                9515.468
  Bayesian (BIC)                              9596.791
  Sample-size adjusted Bayesian (SABIC)       9533.322

Root Mean Square Error of Approximation:

  RMSEA                                          0.173
  90 Percent confidence interval - lower         0.160
  90 Percent confidence interval - upper         0.187
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.073

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  Literacia =~                                                          
    L1                1.000                               0.482    0.397
    L2                0.570    0.107    5.335    0.000    0.275    0.324
    L3                1.018    0.136    7.478    0.000    0.491    0.610
    L4                1.245    0.156    8.000    0.000    0.600    0.747
    L5                1.276    0.158    8.066    0.000    0.616    0.769
    L6                1.555    0.189    8.235    0.000    0.750    0.833
    L7                1.524    0.185    8.255    0.000    0.735    0.842
    L8                1.357    0.169    8.024    0.000    0.655    0.755
    L9                1.190    0.159    7.487    0.000    0.574    0.612
    L10               1.560    0.198    7.865    0.000    0.752    0.706

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .L1                1.247    0.086   14.435    0.000    1.247    0.843
   .L2                0.644    0.044   14.526    0.000    0.644    0.895
   .L3                0.407    0.029   13.901    0.000    0.407    0.628
   .L4                0.286    0.022   13.012    0.000    0.286    0.442
   .L5                0.262    0.021   12.765    0.000    0.262    0.409
   .L6                0.248    0.021   11.657    0.000    0.248    0.306
   .L7                0.222    0.019   11.440    0.000    0.222    0.291
   .L8                0.324    0.025   12.931    0.000    0.324    0.431
   .L9                0.550    0.040   13.893    0.000    0.550    0.626
   .L10               0.570    0.043   13.371    0.000    0.570    0.502
    Literacia         0.233    0.056    4.120    0.000    1.000    1.000

6.7.2.3 Exemplo: Modelo Bidimensional

# Modelo com 2 fatores correlacionados
modelo_cfa_2f <- '
  # Definição dos fatores
  Fator1 =~ L1 + L2 + L3 + L4 + L5
  Fator2 =~ L6 + L7 + L8 + L9 + L10
'

# Estimar modelo
ajuste_cfa_2f <- cfa(modelo_cfa_2f, data = itens_escala)

# Resultados
summary(ajuste_cfa_2f, fit.measures = TRUE, standardized = TRUE)
lavaan 0.6-21 ended normally after 41 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        21

  Number of observations                           431

Model Test User Model:
                                                      
  Test statistic                               299.261
  Degrees of freedom                                34
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2373.267
  Degrees of freedom                                45
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.886
  Tucker-Lewis Index (TLI)                       0.849

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -4643.446
  Loglikelihood unrestricted model (H1)      -4493.816
                                                      
  Akaike (AIC)                                9328.893
  Bayesian (BIC)                              9414.281
  Sample-size adjusted Bayesian (SABIC)       9347.639

Root Mean Square Error of Approximation:

  RMSEA                                          0.135
  90 Percent confidence interval - lower         0.121
  90 Percent confidence interval - upper         0.149
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.079

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  Fator1 =~                                                             
    L1                1.000                               0.394    0.324
    L2                0.622    0.139    4.469    0.000    0.245    0.289
    L3                1.283    0.206    6.217    0.000    0.505    0.628
    L4                1.809    0.273    6.632    0.000    0.712    0.886
    L5                1.825    0.275    6.639    0.000    0.718    0.897
  Fator2 =~                                                             
    L6                1.000                               0.783    0.870
    L7                0.992    0.041   24.300    0.000    0.777    0.890
    L8                0.826    0.045   18.361    0.000    0.647    0.746
    L9                0.707    0.053   13.289    0.000    0.554    0.591
    L10               0.957    0.057   16.809    0.000    0.749    0.703

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  Fator1 ~~                                                             
    Fator2            0.238    0.041    5.838    0.000    0.773    0.773

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .L1                1.324    0.091   14.504    0.000    1.324    0.895
   .L2                0.659    0.045   14.544    0.000    0.659    0.917
   .L3                0.392    0.029   13.686    0.000    0.392    0.606
   .L4                0.139    0.017    8.318    0.000    0.139    0.215
   .L5                0.125    0.016    7.661    0.000    0.125    0.195
   .L6                0.197    0.019   10.192    0.000    0.197    0.243
   .L7                0.158    0.017    9.241    0.000    0.158    0.207
   .L8                0.334    0.026   12.940    0.000    0.334    0.443
   .L9                0.573    0.041   13.948    0.000    0.573    0.651
   .L10               0.575    0.043   13.335    0.000    0.575    0.506
    Fator1            0.155    0.047    3.294    0.001    1.000    1.000
    Fator2            0.614    0.055   11.093    0.000    1.000    1.000

6.7.3 Índices de Ajuste do Modelo

Os índices de ajuste (fit indices) avaliam o quão bem o modelo teórico se ajusta aos dados observados.

6.7.3.1 1. Qui-Quadrado (χ²)

Teste formal de ajuste exato:

  • H₀: O modelo se ajusta perfeitamente aos dados
  • Bom ajuste: p > 0,05 (não rejeitar H₀)
  • Problema: Sensível ao tamanho da amostra (sempre significativo com n grande)

Qui-quadrado normalizado:

  • χ²/df < 2: Bom ajuste
  • χ²/df < 3: Ajuste aceitável

6.7.3.2 2. CFI (Comparative Fit Index)

  • Compara o modelo proposto com modelo nulo (independência)
  • Bom ajuste: CFI ≥ 0,95
  • Ajuste aceitável: CFI ≥ 0,90

6.7.3.3 3. TLI (Tucker-Lewis Index)

  • Similar ao CFI, mas penaliza complexidade do modelo
  • Bom ajuste: TLI ≥ 0,95
  • Ajuste aceitável: TLI ≥ 0,90

6.7.3.4 4. RMSEA (Root Mean Square Error of Approximation)

  • Mede erro de aproximação na população
  • Bom ajuste: RMSEA ≤ 0,05
  • Ajuste aceitável: RMSEA ≤ 0,08
  • Ajuste mediocre: 0,08 < RMSEA ≤ 0,10
  • Ajuste ruim: RMSEA > 0,10

Importante: O IC 90% do RMSEA também deve ser considerado.

6.7.3.5 5. SRMR (Standardized Root Mean Square Residual)

  • Raiz quadrada média do resíduo padronizado
  • Bom ajuste: SRMR ≤ 0,05
  • Ajuste aceitável: SRMR ≤ 0,08

6.7.4 Tabela Resumo de Critérios de Ajuste

Índice Bom Ajuste Ajuste Aceitável
χ²/df ≤ 2 ≤ 3
CFI ≥ 0,95 ≥ 0,90
TLI ≥ 0,95 ≥ 0,90
RMSEA ≤ 0,05 ≤ 0,08
SRMR ≤ 0,05 ≤ 0,08

6.7.5 Interpretação dos Resultados da CFA

# Exibir índices de ajuste
fitMeasures(ajuste_cfa, c("chisq", "df", "pvalue", "cfi", "tli", "rmsea", "srmr"))
  chisq      df  pvalue     cfi     tli   rmsea    srmr 
487.836  35.000   0.000   0.806   0.750   0.173   0.073 
# Exibir cargas fatoriais padronizadas
standardizedSolution(ajuste_cfa)
# Exibir R² dos itens
inspect(ajuste_cfa, "r2")
   L1    L2    L3    L4    L5    L6    L7    L8    L9   L10 
0.157 0.105 0.372 0.558 0.591 0.694 0.709 0.569 0.374 0.498 

6.7.6 Modificação de Modelos

Se o modelo não ajustar bem, considere modificações baseadas em:

  1. Teoria: Modificações devem ser teoricamente justificáveis
  2. Índices de modificação: Sugestões estatísticas do lavaan
# Índices de modificação
modindices(ajuste_cfa, sort = TRUE, maximum.number = 10)

Cuidado: Não realize modificações baseadas apenas em estatísticas - sempre justifique teoricamente.

6.7.7 Visualização do Modelo com lavaanPlot

library(lavaanPlot)

# Plotar modelo CFA
lavaanPlot(model = ajuste_cfa,
           node_options = list(shape = "box", fontname = "Helvetica"),
           edge_options = list(color = "grey"),
           coefs = TRUE,           # Mostrar coeficientes
           stand = TRUE,           # Usar coeficientes padronizados
           sig = 0.05)            # Destacar coeficientes significativos

Elementos do diagrama:

  • Retângulos: Variáveis observadas (itens)
  • Elipses/Círculos: Variáveis latentes (fatores)
  • Setas unidirecionais (→): Relações de regressão
  • Setas bidirecionais (↔︎): Correlações/Covariâncias
  • Pequenos círculos → retângulos: Erros de medida

6.8 Validação de Constructo

A validação baseada na estrutura interna avalia se as relações entre itens e componentes do teste se conformam ao constructo teórico.

6.8.1 Métodos de Validação

  1. Análise fatorial (EFA e CFA)
  2. Correlações item-total
  3. Correlações inter-itens
  4. Coeficientes de confiabilidade (α, ω)

6.8.2 Critérios de Avaliação

  • Agrupamento de itens corresponde à teoria
  • Índices de ajuste adequados (CFA)
  • Confiabilidade aceitável
  • Cargas fatoriais apropriadas

6.9 Exercícios Práticos

6.9.1 Exercício 1: Confiabilidade

Use o dataset de literacia para:

  1. Calcular o Alfa de Cronbach para os 10 itens
  2. Calcular o Ômega de McDonald
  3. Identificar se algum item reduz a confiabilidade (item-total correlations)
  4. Comparar os dois índices e interpretar os resultados