Capítulo 5 Análise Fatorial Exploratória
Nas ciências sociais, muitas vezes tentamos medir coisas que não podem ser medidas diretamente (as chamadas variáveis latentes). Por exemplo, pesquisadores de administração podem estar interessados em medir o ‘burnout’, que é quando alguém trabalhou muito duro em um projeto por um período prolongado de tempo, de repente se vê desprovido de motivação, inspiração e quer repetidamente dar cabeçadas em seu computador gritando “por favor, Mike, destranque a porta, deixe-me sair do porão, EU preciso sentir o calor suave da luz do sol na minha pele!”. Você não pode medir o burnout diretamente: tem muitas facetas. No entanto, você pode medir diferentes aspectos do burnout: você pode ter alguma ideia de motivação, níveis de estresse, se a pessoa tem alguma ideia nova e assim por diante. Feito isso, seria útil saber se essas variáveis diferente realmente refletem uma única variável latente. Dito de outra forma, essas diferentes variáveis são impulsionadas pelo mesmo variável subjacente (no caso, o burnout)? (Field, Miles, and Field 2012).
Este capítulo examinará a análise de componentes principais – uma técnica para identificar grupos de variáveis (os chamados fatores). Esta técnica tem três usos principais: (1) para entender a estrutura de um conjunto de variáveis; (2) construir um questionário para medir uma variável subjacente (por exemplo, você pode criar um questionário para medir o burnout); e (3) reduzir um conjunto de dados para um tamanho mais gerenciável, mantendo o máximo do original informação possível.
Se medirmos várias variáveis ou fizermos várias perguntas a alguém sobre si mesmo, a correlação entre cada par de variáveis (ou perguntas) pode ser organizada no que é conhecido como matriz R. Uma matriz R é apenas uma matriz de correlação: uma tabela de coeficientes de correlação entre variáveis. Os elementos diagonais de uma matriz R são todos iguais porque cada variável se correlacionará perfeitamente consigo mesma. Os elementos fora da diagonal são os coeficientes de correlação entre pares de variáveis, ou perguntas. A existência de grupos de variáveis com grandes coeficientes de correlação entre subconjuntos de variáveis sugere que essas variáveis podem estar medindo aspectos da mesma dimensão subjacente. Essas dimensões subjacentes são conhecidas como fatores (ou variáveis latentes). Ao reduzir um conjunto de dados de um grupo de variáveis inter-relacionadas a um conjunto menor de fatores, a análise fatorial alcança a parcimônia explicando a quantidade máxima de variância comum em uma matriz de correlação usando o menor número de construções explicativas.
Vamos utilizar um exemplo. Imagine que queremos medir a satisfação de clientes com um restaurante. Para isso coleta-se respostas para um questionário no qual as seguintes percepções dos clientes:
Usando uma escala de 1 a 7, com o 7 significando “Concordo totalmente” e o 1 sendo “Discordo totalmente”, os clientes responderam cada questão abaixo indicando até que ponto ele concordava ou discordava de que o restaurante oferece:
X1 - Comida de excelente qualidade
X2 - Um interior atraente
X3 - Porções generosas
X4 - Comida de gosto excelente
X5 - Bom valor para o dinheiro
X6 - Funcionários simpáticos
X7 - Aparência limpa e organizada
X8 - Um ambiente divertido
X9 - Grande variedade de pratos
X10 - Preços razoáveis
X11 - Funcionários gentis
X12 - Funcionários competentes
A base de dados com as respostas dos clientes para cada uma dessas questões pode ser carregada no software R da seguinte forma:
# Carregar base de dados clientes
satisfacaoRestaurante <- read.csv(
# No parâmetro file, use o caminho para a pasta onde está
# o arquivo clientes.csv em seu computador.
file = "dados/clientes.csv"
)
# Criar uma base apenas com as variáveis sobre satisfação:
satisfacaoRestaurante2 <- satisfacaoRestaurante %>%
select(
x1_comida_de_excelente_qualidade,
x9_variedades_de_produtos,
x4_comida_com_gosto_excelente,
x2_Interior_atraente,
x7_aparencia_limpa_e_organizada,
x8_ambiente_divertido,
x5_bom_valor_para_o_dinheiro,
x3_porcoes_generosas,
x10_precos_razoaveis,
x6_funcionarios_simpaticos,
x11_funcionarios_gentis,
x12_funcionarios_competentes
)
Utiliza a função cor(), podemos calcular a matriz de correlação entre cada uma dessas questões osbre satisfação.
# Calcular a matriz correlação para as questões x1 até x12 da base de dados
library(corrplot)
corrplot(
corr = satisfacaoRestaurante2 %>%
cor(),
method = "shade"
)
Na figura acima, as células com valor azul forte representam variáveis fortemente correlacionadas. Observe que as questões x1, x4 e x9 são fortemente correlacionadas. De forma semelhante, as questões x2, x7 e x8 formam mais um grupo de variáveis correlacionadas fortemente. As questões x3, x5 e x10 seguem o mesmo padrão. E, por fim, temos um qarto grupo formado pela variáveis x6, x11 e x12.
Esses quatro grupos indicam a existência de 4 variáveis subjacentes (fatores) às variáveis que formam cada grupo. No entanto, a análise da matriz de correlação nos traz um indicativo inicial apenas, precisamos prosseguir para a aplicação do método da análise de componentes principais para comprovar a existência desses 4 fatores efetivamente.
5.1 Análise de componentes principais
Para rodar a análise de componentes principais, deve carregar os seguintes pacotes.
# Instalar pacotes necessários
install.packages("corpcor")
install.packages("GPArotation")
install.packages("psych")
# Carregar pacotes necessários
library(corpcor)
library(GPArotation)
library(psych)
5.1.1 Checagem se há correlações suficientes entre as variáveis
Para fazer uma análise de componentes principais, é importante que haja correlações entre as variáveis. Caso contrário, não encontraremos variáveis latentes. O teste de Bartlett é um teste objetivo para saber se as variáveis em nossa matriz de correlação não se correlacionam. Nessa caso extremo, nossa matriz de correlação seria uma matriz de identidade (ou seja, os componentes fora da diagonal são zero). O teste de Bartlett examina se a matriz de correlação da população se assemelha a uma matriz de identidade. Se a matriz de correlação da população se assemelha a uma matriz de identidade, isso significa que cada variável se correlaciona muito mal com todas as outras variáveis (ou seja, todos os coeficientes de correlação são próximos de zero). Se fosse uma matriz de identidade, isso significaria que todas as variáveis são perfeitamente independentes umas das outras (todos os coeficientes de correlação são zero). Dado que estamos procurando clusters de variáveis que medem coisas semelhantes, deve ser óbvio por que esse cenário é problemático: se nenhuma variável se correlaciona, não há clusters para encontrar. O teste de Bartlett nos diz, portanto, se nossa matriz de correlação é significativamente diferente de uma matriz de identidade. Se for significativo (p-value < 0,05), significa que as correlações entre as variáveis são (geralmente) significativamente diferentes de zero. Portanto, se o teste de Bartlett for significativo, isso é uma boa notícia.
O teste de Bartlett é realizado a seguir para nossa base de variáveis relacionadas com a satisfação.
## R was not square, finding R from data
## $chisq
## [1] 7650.765
##
## $p.value
## [1] 0
##
## $df
## [1] 66
Para esses dados, o teste de Bartlett é altamente significant qui-quadrado(66) = 7650, p < .001. Portanto, a análise fatorial é apropriada.
Além do teste de Bartlett, podemos também calcular a matriz de correlação entre as variáveis. A matriz de correlção serve apenas como diagnóstico inicial, para identificarmos a existência de correlação entre as variáveis. O teste de Bartlett, no entanto, deve ser a medida objetiva utilizada.
# Calcular a matriz correlação para as questões x1 até x12 da base de dados
matrizCorrelacao <- cor(
x = satisfacaoRestaurante2
)
round(
x = matrizCorrelacao,
digits = 2
)
## x1_comida_de_excelente_qualidade x9_variedades_de_produtos
## x1_comida_de_excelente_qualidade 1.00 0.70
## x9_variedades_de_produtos 0.70 1.00
## x4_comida_com_gosto_excelente 0.76 0.75
## x2_Interior_atraente 0.06 -0.03
## x7_aparencia_limpa_e_organizada 0.06 0.06
## x8_ambiente_divertido 0.04 -0.04
## x5_bom_valor_para_o_dinheiro 0.29 0.18
## x3_porcoes_generosas 0.16 0.12
## x10_precos_razoaveis 0.04 0.05
## x6_funcionarios_simpaticos 0.18 0.01
## x11_funcionarios_gentis 0.09 0.00
## x12_funcionarios_competentes 0.28 0.13
## x4_comida_com_gosto_excelente x2_Interior_atraente
## x1_comida_de_excelente_qualidade 0.76 0.06
## x9_variedades_de_produtos 0.75 -0.03
## x4_comida_com_gosto_excelente 1.00 0.04
## x2_Interior_atraente 0.04 1.00
## x7_aparencia_limpa_e_organizada 0.09 0.44
## x8_ambiente_divertido 0.05 0.66
## x5_bom_valor_para_o_dinheiro 0.27 0.13
## x3_porcoes_generosas 0.15 -0.01
## x10_precos_razoaveis -0.01 -0.05
## x6_funcionarios_simpaticos 0.16 -0.10
## x11_funcionarios_gentis 0.10 -0.08
## x12_funcionarios_competentes 0.29 -0.14
## x7_aparencia_limpa_e_organizada x8_ambiente_divertido
## x1_comida_de_excelente_qualidade 0.06 0.04
## x9_variedades_de_produtos 0.06 -0.04
## x4_comida_com_gosto_excelente 0.09 0.05
## x2_Interior_atraente 0.44 0.66
## x7_aparencia_limpa_e_organizada 1.00 0.49
## x8_ambiente_divertido 0.49 1.00
## x5_bom_valor_para_o_dinheiro 0.13 -0.04
## x3_porcoes_generosas 0.14 -0.03
## x10_precos_razoaveis 0.04 -0.09
## x6_funcionarios_simpaticos -0.09 -0.21
## x11_funcionarios_gentis 0.00 -0.06
## x12_funcionarios_competentes -0.11 -0.14
## x5_bom_valor_para_o_dinheiro x3_porcoes_generosas x10_precos_razoaveis
## x1_comida_de_excelente_qualidade 0.29 0.16 0.04
## x9_variedades_de_produtos 0.18 0.12 0.05
## x4_comida_com_gosto_excelente 0.27 0.15 -0.01
## x2_Interior_atraente 0.13 -0.01 -0.05
## x7_aparencia_limpa_e_organizada 0.13 0.14 0.04
## x8_ambiente_divertido -0.04 -0.03 -0.09
## x5_bom_valor_para_o_dinheiro 1.00 0.66 0.32
## x3_porcoes_generosas 0.66 1.00 0.53
## x10_precos_razoaveis 0.32 0.53 1.00
## x6_funcionarios_simpaticos 0.15 0.14 0.02
## x11_funcionarios_gentis 0.01 0.06 0.07
## x12_funcionarios_competentes 0.36 0.29 0.01
## x6_funcionarios_simpaticos x11_funcionarios_gentis x12_funcionarios_competentes
## x1_comida_de_excelente_qualidade 0.18 0.09 0.28
## x9_variedades_de_produtos 0.01 0.00 0.13
## x4_comida_com_gosto_excelente 0.16 0.10 0.29
## x2_Interior_atraente -0.10 -0.08 -0.14
## x7_aparencia_limpa_e_organizada -0.09 0.00 -0.11
## x8_ambiente_divertido -0.21 -0.06 -0.14
## x5_bom_valor_para_o_dinheiro 0.15 0.01 0.36
## x3_porcoes_generosas 0.14 0.06 0.29
## x10_precos_razoaveis 0.02 0.07 0.01
## x6_funcionarios_simpaticos 1.00 0.65 0.65
## x11_funcionarios_gentis 0.65 1.00 0.52
## x12_funcionarios_competentes 0.65 0.52 1.00
5.1.2 Checagem sobre o tamanho de amostra
Como regra de bolso para o tamanho de amostra para podermos aplicar uma análise fatorial, Nunnally (1978) recomenda ter 10 respondentes por variável analisada. Já Kass e Tinsley (1979) recomendam ter entre 5 e 10 respondentes por variável. No caso do exemplo da base clientes, estamos analisando 12 questões, dessa forma, usando a regra mais rigorosa, deveríamos ter 12 * 10 = 120 respostas no mínimo. Em nossa base de dados, temos 700 respostas, portanto, acima do nível mínimo.
No entanto, outra alternativa mais objetiva para avaliar se o tamanho de amostra está adequado, é usar a medida Kaiser-Meyer-Olkin (KMO) de adequação da amostragem (Kaiser, 1970). O KMO pode ser calculado para variáveis individuais e múltiplas e representa a razão entre a correlação quadrada entre variáveis e a correlação parcial quadrada entre variáveis. A estatística KMO varia entre 0 e 1. Um valor de 0 indica que a soma das correlações parciais é grande em relação à soma das correlações, indicando difusão no padrão de correlações (portanto, é provável que a análise fatorial seja inapropriada). O teste KMO gera um índice chamado de Measure of Sampling Adequacy (MSA). Um valor de MSA próximo a 1 indica que os padrões de correlações são relativamente compactos e, portanto, a análise fatorial deve produzir fatores distintos e confiáveis. Kaiser (1974) recomenda aceitar valores maiores que 0,5 (valores abaixo disso devem levar você a coletar mais dados ou repensar quais variáveis incluir). Para (Hutcheson & Sofroniou, 1999):
- Valores de MSA entre 0,5 e 0,7 são medianos apenas.
- Valores de MSA entre 0,7 e 0,8 são bons.
- Valores de MSA entre 0,8 e 0,9 são ótimos.
- Valores de MSA acima de 0,9 são excelentes.
É desejável que tanto o Measure of Sampling Adequacy (MSA) geral quanto o específico de cada variável estejam acima de 0,5 pelo menos.
O teste KMO pode ser feito no R usando o seguinte código:
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = satisfacaoRestaurante2)
## Overall MSA = 0.67
## MSA for each item =
## x1_comida_de_excelente_qualidade x9_variedades_de_produtos x4_comida_com_gosto_excelente
## 0.80 0.72 0.75
## x2_Interior_atraente x7_aparencia_limpa_e_organizada x8_ambiente_divertido
## 0.57 0.75 0.55
## x5_bom_valor_para_o_dinheiro x3_porcoes_generosas x10_precos_razoaveis
## 0.62 0.61 0.58
## x6_funcionarios_simpaticos x11_funcionarios_gentis x12_funcionarios_competentes
## 0.65 0.67 0.73
O resultado para o teste KMO eveidencia que tanto o MSA geral quanto os específicos de cada variável estão acima de 0,5.
5.1.3 Extrair os fatores
Dada a possibilidade de utilizar a análise de componentes principais para realizar a extração de de fatores a aprtir das variáveis observados, nesta seção, será realizado o procedimento para:
- Aplicação da análise de componentes principais considerando o número de fatores igual ao número de variáveis da base de dados;
- A partir do resultado do passo 1, é feita a definição de quantos fatores devem ser retidos utilizando-se os eingevalues (ou soma dos quadrados das cargas fatoriais - SS loadings) e a análise gráfica do gráfico screeplot;
- Aplicar a análise de componentes novamente, porém agora apenas sobre a quantidade de fatores definidas no passo 2;
- Aplicar a análise de componentes novamente apenas sobre a quantidade de fatores defindas no passo 2, porém agora realizando a rotação ortogonal varimax. Com isso, é possível identificar os fatores existentes e quais variáveis observadas formam cada fator.
- Uma vez definidos os fatores, finalizamos a análise realizando a checagem do coeficiente alpha de cronbach de cada fator
5.1.3.1 Definição de quantos fatores devem ser retidos
Conforme os passos acima para que possamos tomar uma decisão sobre quantos fatores (ou componentes) devemos reter, primeiro precisamos aplicar a análise de componentes principais considerando o número de fatores igual ao número de variáveis da base de dados. No caso de nosso exemplo, começamos, então, aplicando a análise de componentes principais com 12 fatores, pois temos 12 variáveis na base analisada.
# Executar a análise de componentes principais com todos os fatores possível
# (igual a número de variáveis, que é 12)
pc1 <- principal(
r = satisfacaoRestaurante2,
# função ncol() abaixo é usada para calcular a quantidade de colunas da base
nfactors = ncol(satisfacaoRestaurante2),
rotate = "none"
)
pc1
## Principal Components Analysis
## Call: principal(r = satisfacaoRestaurante2, nfactors = ncol(satisfacaoRestaurante2),
## rotate = "none")
## Standardized loadings (pattern matrix) based upon correlation matrix
## PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8 PC9 PC10 PC11 PC12 h2
## x1_comida_de_excelente_qualidade 0.74 0.30 -0.42 -0.05 0.03 0.09 -0.05 0.16 -0.15 -0.30 0.18 -0.06 1
## x9_variedades_de_produtos 0.63 0.32 -0.52 -0.21 0.17 -0.03 0.00 -0.14 0.16 0.21 0.16 0.18 1
## x4_comida_com_gosto_excelente 0.74 0.32 -0.46 -0.03 0.03 0.00 0.03 -0.01 0.02 0.05 -0.34 -0.14 1
## x2_Interior_atraente -0.06 0.71 0.26 0.40 -0.13 0.33 -0.30 -0.04 0.08 0.13 0.08 -0.14 1
## x7_aparencia_limpa_e_organizada 0.05 0.64 0.30 0.29 0.21 -0.59 -0.08 0.10 -0.06 0.04 0.02 -0.02 1
## x8_ambiente_divertido -0.12 0.73 0.18 0.45 0.02 0.21 0.37 0.03 0.01 -0.09 -0.07 0.18 1
## x5_bom_valor_para_o_dinheiro 0.60 0.16 0.47 -0.28 -0.42 -0.04 -0.15 -0.18 -0.19 -0.04 -0.07 0.17 1
## x3_porcoes_generosas 0.54 0.07 0.62 -0.38 -0.06 -0.07 0.18 -0.05 0.31 -0.12 0.06 -0.13 1
## x10_precos_razoaveis 0.27 0.00 0.55 -0.46 0.55 0.25 -0.04 0.15 -0.14 0.10 -0.04 0.02 1
## x6_funcionarios_simpaticos 0.54 -0.50 0.14 0.50 0.02 0.01 -0.23 0.23 0.21 -0.07 -0.08 0.16 1
## x11_funcionarios_gentis 0.42 -0.41 0.15 0.59 0.35 0.02 0.02 -0.37 -0.08 -0.08 0.02 -0.06 1
## x12_funcionarios_competentes 0.68 -0.38 0.14 0.34 -0.27 0.00 0.25 0.16 -0.13 0.26 0.11 -0.07 1
## u2 com
## x1_comida_de_excelente_qualidade 2.2e-16 2.9
## x9_variedades_de_produtos 3.3e-16 4.0
## x4_comida_com_gosto_excelente 1.3e-15 2.8
## x2_Interior_atraente -2.2e-16 3.3
## x7_aparencia_limpa_e_organizada -2.2e-16 3.2
## x8_ambiente_divertido 5.6e-16 2.9
## x5_bom_valor_para_o_dinheiro 1.4e-15 4.5
## x3_porcoes_generosas 1.4e-15 3.8
## x10_precos_razoaveis -4.4e-16 4.3
## x6_funcionarios_simpaticos 0.0e+00 4.6
## x11_funcionarios_gentis 4.4e-16 4.6
## x12_funcionarios_competentes 1.0e-15 3.8
##
## PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8 PC9 PC10 PC11 PC12
## SS loadings 3.16 2.33 1.81 1.65 0.77 0.58 0.41 0.32 0.28 0.27 0.22 0.19
## Proportion Var 0.26 0.19 0.15 0.14 0.06 0.05 0.03 0.03 0.02 0.02 0.02 0.02
## Cumulative Var 0.26 0.46 0.61 0.75 0.81 0.86 0.89 0.92 0.94 0.97 0.98 1.00
## Proportion Explained 0.26 0.19 0.15 0.14 0.06 0.05 0.03 0.03 0.02 0.02 0.02 0.02
## Cumulative Proportion 0.26 0.46 0.61 0.75 0.81 0.86 0.89 0.92 0.94 0.97 0.98 1.00
##
## Mean item complexity = 3.7
## Test of the hypothesis that 12 components are sufficient.
##
## The root mean square of the residuals (RMSR) is 0
## with the empirical chi square 0 with prob < NA
##
## Fit based upon off diagonal values = 1
Para definir quantos fatores reter, precisamos avaliar os eigenvalues (SS loadings). Os eigenvalues podem ser explicados como a soma dos quadrados das cargas fatoriais de cada fator. Quanto maiores as cargas em um fator, maior a variância das variáveis que o fator explica. Por consequência, quanto maior o eingenvalue maior o grau de explicação da variância das variáveis analisadas.
A partir da análise dos eigenvalues, identificamos que quatro fatores (ou componentes) possuem eigenvalues maiores que 1. Ao utilizarmos o critério de Kaiser (Kaiser, 1960), que indica reter apenas os componentes com eigenvalues maiores do que 1, podemos tomar a decisão de reter os quatro primeiros fatores.
Vamos entender agora o que significa na prática o eigenvalue. No resultado acima, o primeiro eigenvalue (SS loading) tem valor 3,16. Considerando a quantidade total de 12 variáveis, se dividirmos 3,16 por 12, temos o valor resultante de 0,26, o que significa que o primeiro fator (componente) explica 26% da variância de todas as variáveis. Esse valor de 0,26 está apresentado no resultado acima na linha “Proportion Var”.
Como os eigenvalues são ordenados do maior ao menor, podemos seguir avaliando cada fator, seus eigenvalues e suas proporções de variância explicadas até o quarto fator (esses quatro fatores são aqueles com eigenvalues maiores do que 1). Assim, observamos que:
- Fator 1 (PC1) possui eigenvalue 3,16 e proporção de variância explicada de 26%
- Fator 2 (PC2) possui eigenvalue 2,33 e proporção de variância explicada de 19%
- Fator 3 (PC3) possui eigenvalue 1,81 e proporção de variância explicada de 15%
- Fator 4 (PC4) possui eigenvalue 1,65 e proporção de variância explicada de 14%
De forma acumulada, somando as proporções de variância explicada de cada um desses quatro fatores, concluímos que apenas esses quatro fatores explicam 75% da variância de todas as 12 variáveis analisadas.
Além da extração dos fatores por meio do criterio de Kaiser, podemos também fazer a análise do ponto de inflexão no gráfico screeplot.
# Plotar o screeplot para checar o ponto de inflexão da curva e auxiliar na
# definição da quantidade de fatores que devemos extrair
plot(pc1$values, type = "b")
A partir da análise do screeplot dos 12 fatores obtidos, podemos identificar o ponto de inflexão existente na curva do gráfico após o quarto fator. Ou seja, do quinto fator em diante temos o alinhamento dos pontos como um plateau. Essa análise gráfica indica que o ponto de inflexão está após o quarto fator. Portanto, concluí-se que devemos reter apenas os quatro primeiros fatores até o ponto de inflexão.
5.1.3.2 Aplicar a análise de componentes apenas para os fatores retidos
Como no passo acima decidimos reter apenas quatro fatores, agora podemos aplicar a análise de componentes principais novamente e solicitar a retenção apenas de 4 fatores.
# Executar a análise de componentes principais 4 fatores
pc2 <- principal(
r = satisfacaoRestaurante2,
nfactors = 4,
rotate = "none"
)
pc2
## Principal Components Analysis
## Call: principal(r = satisfacaoRestaurante2, nfactors = 4, rotate = "none")
## Standardized loadings (pattern matrix) based upon correlation matrix
## PC1 PC2 PC3 PC4 h2 u2 com
## x1_comida_de_excelente_qualidade 0.74 0.30 -0.42 -0.05 0.81 0.19 2.0
## x9_variedades_de_produtos 0.63 0.32 -0.52 -0.21 0.82 0.18 2.7
## x4_comida_com_gosto_excelente 0.74 0.32 -0.46 -0.03 0.86 0.14 2.1
## x2_Interior_atraente -0.06 0.71 0.26 0.40 0.73 0.27 1.9
## x7_aparencia_limpa_e_organizada 0.05 0.64 0.30 0.29 0.59 0.41 1.8
## x8_ambiente_divertido -0.12 0.73 0.18 0.45 0.77 0.23 1.9
## x5_bom_valor_para_o_dinheiro 0.60 0.16 0.47 -0.28 0.69 0.31 2.5
## x3_porcoes_generosas 0.54 0.07 0.62 -0.38 0.82 0.18 2.7
## x10_precos_razoaveis 0.27 0.00 0.55 -0.46 0.58 0.42 2.4
## x6_funcionarios_simpaticos 0.54 -0.50 0.14 0.50 0.81 0.19 3.1
## x11_funcionarios_gentis 0.42 -0.41 0.15 0.59 0.72 0.28 2.8
## x12_funcionarios_competentes 0.68 -0.38 0.14 0.34 0.74 0.26 2.2
##
## PC1 PC2 PC3 PC4
## SS loadings 3.16 2.33 1.81 1.65
## Proportion Var 0.26 0.19 0.15 0.14
## Cumulative Var 0.26 0.46 0.61 0.75
## Proportion Explained 0.35 0.26 0.20 0.18
## Cumulative Proportion 0.35 0.61 0.82 1.00
##
## Mean item complexity = 2.4
## Test of the hypothesis that 4 components are sufficient.
##
## The root mean square of the residuals (RMSR) is 0.07
## with the empirical chi square 809.92 with prob < 1.7e-155
##
## Fit based upon off diagonal values = 0.95
Ao analisar a segunda tabela presente no resultado acima, temos as cargas fatoriais de cada fatores. Conforme abordado acima, as cargas fatoriais indicam que quanto maiores as cargas em um fator, maior a variância das variáveis que o fator explica. Para definir quais variáveis observados fazem parte de cada fator, devemos avaliar, para cada variável, em qual fator essa variável possui valor maior ou igual a 0,3. No entanto, ao se avaliar as cargas fatoriais do resultado acima, percebe-se que as cargas não estão bem distinguidas entre os fatores. Isso dificulta a interpretabilidade dos fatores.
Para solucionar essa questão, precisamos realizar uma rotação dos fatores, facilitando a interpretação dos mesmos. A rotação maximiza a carga de cada variável em um dos fatores extraídos enquanto minimiza a carga em todos os outros fatores. Esse processo torna muito mais claro quais variáveis se relacionam com quais fatores. A rotação funciona alterando os valores absolutos das variáveis, mantendo seus valores diferenciais constantes (Field, Miles, and Field 2012).
Existem diferentes métodos de rotação de fatores. Esses métodos podem ser agrupados em dois tipos:
- Rotação ortogonal: varimax, quartimax, BentlerT e geominT.
- Rotação oblíqua: oblimin, promax, simplimax, BentlerQ e geominQ.
A escolha exata do tipo e do método de rotação dependerá se você acha ou não que os fatores devem estar correlacionados. Se houver arcabouço teórico para indicar que os fatores são independentes (não correlacionados), você deve escolher uma das rotações ortogonais (recomendação de usar o método varimax). No entanto, se a teoria sugerir que seus fatores podem estar correlacionados, uma das rotações oblíquas (recomendação de usar os métodos oblimin ou promax) deve ser selecionada (Field, Miles, and Field 2012).
Em nosso caso, os fatores não são correlacionados, portanto, podemos adotar a rotação ortogonal varimax. No código a seguir, aplica-se novamente a análise de componentes principais retendo 4 fatores, porém agora aplicando a rotação de fatores varimax. Além disso, ao usarmos a função print.psych() já automatizamos a identificação da composição de cada fator, pois filtramos as apenas as cargas fatoriais maiores do que 0,3 (podendo também ser 0,4, dependendo do crítério de corte adotado) e as variáveis são ordenadas em cada fator desde aquela que possui maior carga fatorial até a que possui menor carga fatorial.
# Executar a análise de componentes principais 4 fatores com rotação varimax
pc3 <- principal(
r = satisfacaoRestaurante2,
nfactors = 4,
rotate = "varimax"
)
# Apresentar os fatores rotados pela varimax e devidamente ordenados.
print.psych(
x = pc3,
cut = 0.3,
sort = TRUE,
digits = 3
)
## Principal Components Analysis
## Call: principal(r = satisfacaoRestaurante2, nfactors = 4, rotate = "varimax")
## Standardized loadings (pattern matrix) based upon correlation matrix
## item RC1 RC4 RC2 RC3 h2 u2 com
## x4_comida_com_gosto_excelente 3 0.912 0.857 0.143 1.06
## x9_variedades_de_produtos 2 0.901 0.820 0.180 1.02
## x1_comida_de_excelente_qualidade 1 0.883 0.811 0.189 1.08
## x6_funcionarios_simpaticos 10 0.892 0.813 0.187 1.04
## x11_funcionarios_gentis 11 0.850 0.725 0.275 1.01
## x12_funcionarios_competentes 12 0.800 0.740 0.260 1.32
## x8_ambiente_divertido 6 0.869 0.773 0.227 1.05
## x2_Interior_atraente 4 0.854 0.732 0.268 1.01
## x7_aparencia_limpa_e_organizada 5 0.751 0.586 0.414 1.08
## x3_porcoes_generosas 8 0.896 0.824 0.176 1.06
## x5_bom_valor_para_o_dinheiro 7 0.775 0.691 0.309 1.31
## x10_precos_razoaveis 9 0.754 0.582 0.418 1.05
##
## RC1 RC4 RC2 RC3
## SS loadings 2.543 2.251 2.100 2.060
## Proportion Var 0.212 0.188 0.175 0.172
## Cumulative Var 0.212 0.399 0.574 0.746
## Proportion Explained 0.284 0.251 0.235 0.230
## Cumulative Proportion 0.284 0.535 0.770 1.000
##
## Mean item complexity = 1.1
## Test of the hypothesis that 4 components are sufficient.
##
## The root mean square of the residuals (RMSR) is 0.066
## with the empirical chi square 809.917 with prob < 1.66e-155
##
## Fit based upon off diagonal values = 0.947
Avaliando os resultado acima, conseguimos identificar quais fatores ou componentes subjacentes existem a partir de determinados subgrupos de variáveis observadas. A solução rotacionada revelou a presença de estrutura simples, com ambos os componentes mostrando uma série de carregamentos fortes e todas as variáveis carregando substancialmente em apenas um componente, conforme a tabela 7 A solução de 4 fatores explicou um total de 75% da variância das variáveis analisadas:
- Fator 1 é composto pelas seguintes variáveis observadas:
- x4_comida_com_gosto_excelente (carga fatorial 0,912)
- x9_variedades_de_produtos (carga fatorial 0.901)
- x1_comida_de_excelente_qualidade (carga fatorial 0.883)
- Fator 2 é composto pelas seguintes variáveis observadas:
- x6_funcionarios_simpaticos (carga fatorial 0.892)
- x11_funcionarios_gentis (carga fatorial 0.850)
- x12_funcionarios_competentes (carga fatorial 0.800)
- Fator 3 é composto pelas seguintes variáveis observadas:
- x6_funcionarios_simpaticos (carga fatorial 0.869)
- x2_Interior_atraente (carga fatorial 0.854)
- x7_aparencia_limpa_e_organizada (carga fatorial 0.751)
- Fator 4 é composto pelas seguintes variáveis observadas:
- x3_porcoes_generosas (carga fatorial 0.896)
- x5_bom_valor_para_o_dinheiro (carga fatorial 0.775)
- x10_precos_razoaveis (carga fatorial 0.754)
Adicionalmente, se avaliarmos as últimas colunas, na extrema direita da matriz de carga fatorial, temos as colunas rotuladas como h2 e u2. h2 são as comunalidades e u2 são as singularidades. A variância total para uma variável em particular terá dois componentes: alguns serão compartilhados com outras variáveis ou medidas (variância comum ou comunalidade) e alguns serão específicos para aquela medida (variação única ou singularidade).
Uma variável que não tem variância específica, teria uma comunalidade de 1; uma variável que não compartilha nenhuma de suas variâncias com qualquer outra variável teria uma comunalidade de 0. Na análise fatorial, estamos interessados em encontrar dimensões subjacentes comuns nos dados e, portanto, estamos interessados principalmente na variância comum. Portanto, quando fazemos uma análise fatorial é fundamental sabermos quanto da variância presente em nossos dados é variância comum (comunalidade).
Ao avaliar as comunalidade e singularidade no resultado acima, observamos que as comunalidades são bastante altas, sendo a menor comunalidade igual a 0,58. Isso corrobora os bons resultados obtidos na análise componentes principais realizada.
5.1.3.3 Checagem da confiabilidade das escalas de cada construto (fator)
Por fim, podemos evoluir para uma confirmação das escalas obtidas. Para isso, é preciso checar a confiabilidade das escalas obtidas para mensurar cada um dos fatores encontrados. Confiabilidade significa que uma medida (ou, neste caso, um questionário) deve refletir consistentemente o construto (fator) que está medindo. Uma maneira de pensar nisso é que, em igualdade de condições, uma pessoa deve obter a mesma pontuação em um questionário se o preencher em dois pontos diferentes no tempo. Para validar a confiabilidade das escalas usadas para medir cada construto, podemos utilizar o alpha de Cronbach (Cronbach, 1951). Podemos utilizar como regra para interpretar o resultado do alpha de Cronbach o valor mínimo de 0,7 como valor aceitável para a confiabilidade da escala utilizada para cada fator.
# Estimar o alpha de Cronbach para o fator 1
alpha(x = satisfacaoRestaurante2 %>%
select(
x1_comida_de_excelente_qualidade,
x9_variedades_de_produtos,
x4_comida_com_gosto_excelente
)
)
##
## Reliability analysis
## Call: alpha(x = satisfacaoRestaurante2 %>% select(x1_comida_de_excelente_qualidade,
## x9_variedades_de_produtos, x4_comida_com_gosto_excelente))
##
## raw_alpha std.alpha G6(smc) average_r S/N ase mean sd median_r
## 0.89 0.89 0.85 0.74 8.4 0.005 5.5 1.1 0.75
##
## 95% confidence boundaries
## lower alpha upper
## Feldt 0.88 0.89 0.9
## Duhachek 0.88 0.89 0.9
##
## Reliability if an item is dropped:
## raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## x1_comida_de_excelente_qualidade 0.86 0.86 0.75 0.75 6.1 0.0075 NA 0.75
## x9_variedades_de_produtos 0.86 0.86 0.76 0.76 6.2 0.0074 NA 0.76
## x4_comida_com_gosto_excelente 0.82 0.82 0.70 0.70 4.6 0.0095 NA 0.70
##
## Item statistics
## n raw.r std.r r.cor r.drop mean sd
## x1_comida_de_excelente_qualidade 1400 0.90 0.90 0.82 0.78 5.5 1.2
## x9_variedades_de_produtos 1400 0.90 0.90 0.82 0.77 5.5 1.2
## x4_comida_com_gosto_excelente 1400 0.92 0.92 0.87 0.82 5.4 1.2
##
## Non missing response frequency for each item
## 3 4 5 6 7 miss
## x1_comida_de_excelente_qualidade 0.06 0.20 0.18 0.28 0.28 0
## x9_variedades_de_produtos 0.07 0.16 0.20 0.35 0.22 0
## x4_comida_com_gosto_excelente 0.06 0.17 0.23 0.31 0.22 0
O alpha de Cronbach para o fator 1, usando o raw_alpha na tabela resultante acima é 0,89. Portanto, o valor é aceitável, pois está acima de 0,7.
# Estimar o alpha de Cronbach para o fator 2
alpha(x = satisfacaoRestaurante2 %>%
select(
x2_Interior_atraente,
x7_aparencia_limpa_e_organizada,
x8_ambiente_divertido
)
)
##
## Reliability analysis
## Call: alpha(x = satisfacaoRestaurante2 %>% select(x2_Interior_atraente,
## x7_aparencia_limpa_e_organizada, x8_ambiente_divertido))
##
## raw_alpha std.alpha G6(smc) average_r S/N ase mean sd median_r
## 0.76 0.77 0.71 0.53 3.4 0.011 4.1 0.82 0.49
##
## 95% confidence boundaries
## lower alpha upper
## Feldt 0.73 0.76 0.78
## Duhachek 0.73 0.76 0.78
##
## Reliability if an item is dropped:
## raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## x2_Interior_atraente 0.64 0.66 0.49 0.49 1.9 0.018 NA 0.49
## x7_aparencia_limpa_e_organizada 0.79 0.79 0.66 0.66 3.9 0.011 NA 0.66
## x8_ambiente_divertido 0.60 0.61 0.44 0.44 1.6 0.020 NA 0.44
##
## Item statistics
## n raw.r std.r r.cor r.drop mean sd
## x2_Interior_atraente 1400 0.82 0.85 0.74 0.62 4.7 0.91
## x7_aparencia_limpa_e_organizada 1400 0.82 0.78 0.57 0.51 4.1 1.17
## x8_ambiente_divertido 1400 0.84 0.86 0.78 0.66 3.4 0.89
##
## Non missing response frequency for each item
## 1 2 3 4 5 6 7 miss
## x2_Interior_atraente 0.01 0.00 0.02 0.37 0.46 0.11 0.03 0
## x7_aparencia_limpa_e_organizada 0.01 0.08 0.16 0.39 0.23 0.11 0.01 0
## x8_ambiente_divertido 0.04 0.06 0.50 0.32 0.09 0.01 0.00 0
O alpha de Cronbach para o fator 2, usando o raw_alpha na tabela resultante acima é 0,76. Portanto, o valor é aceitável, pois está acima de 0,7.
# Estimar o alpha de Cronbach para o fator 3
alpha(x = satisfacaoRestaurante2 %>%
select(
x5_bom_valor_para_o_dinheiro,
x3_porcoes_generosas,
x10_precos_razoaveis
)
)
##
## Reliability analysis
## Call: alpha(x = satisfacaoRestaurante2 %>% select(x5_bom_valor_para_o_dinheiro,
## x3_porcoes_generosas, x10_precos_razoaveis))
##
## raw_alpha std.alpha G6(smc) average_r S/N ase mean sd median_r
## 0.75 0.75 0.72 0.5 3.1 0.01 4.1 1.1 0.53
##
## 95% confidence boundaries
## lower alpha upper
## Feldt 0.73 0.75 0.77
## Duhachek 0.73 0.75 0.77
##
## Reliability if an item is dropped:
## raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## x5_bom_valor_para_o_dinheiro 0.64 0.70 0.53 0.53 2.28 0.016 NA 0.53
## x3_porcoes_generosas 0.45 0.48 0.32 0.32 0.93 0.027 NA 0.32
## x10_precos_razoaveis 0.79 0.80 0.66 0.66 3.95 0.011 NA 0.66
##
## Item statistics
## n raw.r std.r r.cor r.drop mean sd
## x5_bom_valor_para_o_dinheiro 1400 0.84 0.81 0.69 0.60 4.3 1.38
## x3_porcoes_generosas 1400 0.92 0.89 0.84 0.75 3.9 1.58
## x10_precos_razoaveis 1400 0.68 0.75 0.55 0.47 4.1 0.93
##
## Non missing response frequency for each item
## 1 2 3 4 5 6 7 miss
## x5_bom_valor_para_o_dinheiro 0.03 0.06 0.19 0.27 0.22 0.20 0.04 0
## x3_porcoes_generosas 0.09 0.10 0.22 0.22 0.22 0.12 0.04 0
## x10_precos_razoaveis 0.00 0.04 0.24 0.38 0.29 0.04 0.00 0
O alpha de Cronbach para o fator 3, usando o raw_alpha na tabela resultante acima é 0,75. Portanto, o valor é aceitável, pois está acima de 0,7.
# Estimar o alpha de Cronbach para o fator 4
alpha(x = satisfacaoRestaurante2 %>%
select(
x6_funcionarios_simpaticos,
x11_funcionarios_gentis,
x12_funcionarios_competentes
)
)
##
## Reliability analysis
## Call: alpha(x = satisfacaoRestaurante2 %>% select(x6_funcionarios_simpaticos,
## x11_funcionarios_gentis, x12_funcionarios_competentes))
##
## raw_alpha std.alpha G6(smc) average_r S/N ase mean sd median_r
## 0.82 0.82 0.77 0.61 4.6 0.0079 2.7 0.91 0.65
##
## 95% confidence boundaries
## lower alpha upper
## Feldt 0.8 0.82 0.83
## Duhachek 0.8 0.82 0.83
##
## Reliability if an item is dropped:
## raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## x6_funcionarios_simpaticos 0.68 0.68 0.52 0.52 2.1 0.017 NA 0.52
## x11_funcionarios_gentis 0.77 0.79 0.65 0.65 3.7 0.011 NA 0.65
## x12_funcionarios_competentes 0.77 0.79 0.65 0.65 3.8 0.011 NA 0.65
##
## Item statistics
## n raw.r std.r r.cor r.drop mean sd
## x6_funcionarios_simpaticos 1400 0.91 0.89 0.83 0.75 3.7 1.25
## x11_funcionarios_gentis 1400 0.83 0.84 0.72 0.65 2.4 0.95
## x12_funcionarios_competentes 1400 0.83 0.84 0.71 0.65 2.2 0.96
##
## Non missing response frequency for each item
## 1 2 3 4 5 6 7 miss
## x6_funcionarios_simpaticos 0.04 0.17 0.20 0.32 0.22 0.04 0 0
## x11_funcionarios_gentis 0.20 0.31 0.40 0.07 0.02 0.00 0 0
## x12_funcionarios_competentes 0.25 0.43 0.22 0.07 0.02 0.00 0 0
O alpha de Cronbach para o fator 4, usando o raw_alpha na tabela resultante acima é 0,82. Portanto, o valor é aceitável, pois está acima de 0,7.