Análise de Compontes Principais (PCA) é técnica de análise multivariada que pode ser utilizada para redução de variáveis em componentes. A principal diferença entre a PCA e a Análise Fatorial (AF) é que nas AF a os itens são explicados pelo fator latente e só é considerada a variância comum entre itens. Na PCA, a variância específica também é considerada, e os componentes são formados pelos itens. Portanto, a PCA é mais adequada para modelos formativos, enquanto as AF são adequadas para modelos reflexivos.
Para este estudo foi escolhido o instrumento de famílias. Selecionamos somente a sessão 2.a do instrumento.
## # A tibble: 6 x 47
## q_24 q_25 q_26 q_27 q_28 q_29 q_30 q_31 q_32 q_33 q_33_1 q_34 q_35
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Semp~ Semp~ Semp~ Semp~ Semp~ Semp~ Semp~ Quas~ Sim Part~ <NA> Sim Não,~
## 2 Semp~ Semp~ Semp~ Semp~ Semp~ Semp~ Quas~ Nunca Sim Part~ <NA> Sim Sim
## 3 Não ~ Não ~ Quas~ Não ~ Quas~ Quas~ Quas~ Quas~ Sim Não ~ <NA> Sim Não
## 4 Nunca Não ~ Não ~ Não ~ Às v~ Nunca Não ~ Nunca Não Não ~ <NA> Não ~ Não
## 5 Semp~ Não ~ Não ~ Semp~ Quas~ Às v~ Às v~ Nunca Não Não ~ <NA> Não ~ Não,~
## 6 Semp~ Não ~ Semp~ Nunca Semp~ Semp~ Nunca Nunca Não Não ~ <NA> Sim Sim
## # ... with 34 more variables: q_36 <chr>, q_37 <chr>, q_38 <chr>, q_39 <chr>,
## # q_39_1 <chr>, q_40 <chr>, q_41 <chr>, q_42 <chr>, q_43 <chr>, q_44 <chr>,
## # q_45 <chr>, q_46 <chr>, q_47 <chr>, q_47_1 <chr>, q_48 <chr>, q_48_1 <chr>,
## # q_49 <chr>, q_50 <chr>, q_50_1 <chr>, q_51 <chr>, q_52 <chr>, q_53 <chr>,
## # q_54 <chr>, q_55 <chr>, q_56 <chr>, q_57 <chr>, q_58 <chr>, q_59 <chr>,
## # q_60 <chr>, q_61 <chr>, q_62 <chr>, q_63 <chr>, q_64 <chr>, q_65 <chr>
Foi necessária a transformação das variáveis textuais em numéricas. Respostas como “Não sei”, “Prefiro não responder” ou outra variação foram consideradas missing. As variáveis categoricas foram transformadas em dummies.
Para esta análise, foram mantidas somente os itens de Relação Família-Escola e Bem estar na escola.
## q_24 q_25 q_26 q_27 q_28 q_29 q_30 q_31 q_32 q_34 q_35 q_36 q_37 q_38
## Freq 5 5 5 5 5 5 5 4 1 1 1 4 4 4
## Freq.1 5 5 5 5 5 5 4 1 1 1 1 4 4 4
## Freq.2 NA NA 4 NA 4 4 4 4 1 1 0 5 5 5
## Freq.3 1 NA NA NA 3 1 NA 1 0 NA 0 4 NA 4
## Freq.4 5 NA NA 5 4 3 3 1 0 NA 1 4 4 4
## Freq.5 5 NA 5 1 5 5 1 1 0 1 1 5 4 5
## q_40 q_41 q_33_dummy_1 q_33_dummy_2 q_33_dummy_3 q_33_dummy_4
## Freq 1 1 1 0 0 0
## Freq.1 1 1 0 1 0 0
## Freq.2 1 1 0 0 1 0
## Freq.3 1 2 0 0 0 0
## Freq.4 1 1 0 0 0 0
## Freq.5 1 1 0 0 1 0
## q_33_dummy_5 q_39_dummy_1 q_39_dummy_2 q_39_dummy_3 q_39_dummy_4
## Freq 0 1 0 0 0
## Freq.1 0 0 1 0 0
## Freq.2 0 1 0 0 0
## Freq.3 0 1 0 0 0
## Freq.4 0 0 1 0 0
## Freq.5 0 0 0 1 0
## q_39_dummy_5 q_39_dummy_6
## Freq 0 0
## Freq.1 0 0
## Freq.2 0 0
## Freq.3 0 0
## Freq.4 0 0
## Freq.5 0 0
O próximo passo foi a realização da PCA. Como o número de missings era grande, foi escolhido um método que substitui as oberções faltantes pela média do vetor. Desta forma, quando a primeira transformação do vetor para vetor centrado acontecer, esse valor será 0.
model_pca <- psych::principal(
db_pca, # banco de dados
nfactors = 3, # 3 fatores: Relação, Bem estar e as dummies
rotate = 'varimax', # aumentar a variância
missing = T # substitui os missing pela média
)
print(model_pca)
## Principal Components Analysis
## Call: psych::principal(r = db_pca, nfactors = 3, rotate = "varimax",
## missing = T)
## Standardized loadings (pattern matrix) based upon correlation matrix
## RC1 RC3 RC2 h2 u2 com
## q_24 0.49 0.20 0.01 0.2751 0.72 1.3
## q_25 0.58 0.31 -0.02 0.4338 0.57 1.5
## q_26 0.31 0.19 0.11 0.1418 0.86 2.0
## q_27 0.69 0.11 0.03 0.4949 0.51 1.1
## q_28 0.80 0.14 -0.10 0.6751 0.32 1.1
## q_29 0.73 0.04 -0.05 0.5332 0.47 1.0
## q_30 0.36 -0.12 0.23 0.1941 0.81 1.9
## q_31 0.44 -0.20 0.33 0.3434 0.66 2.3
## q_32 0.44 0.06 0.50 0.4497 0.55 2.0
## q_34 0.15 -0.01 0.08 0.0290 0.97 1.6
## q_35 0.31 0.11 0.46 0.3191 0.68 1.9
## q_36 0.25 0.75 0.07 0.6224 0.38 1.2
## q_37 0.34 0.77 0.12 0.7305 0.27 1.4
## q_38 0.28 0.76 0.10 0.6639 0.34 1.3
## q_40 -0.12 -0.14 -0.17 0.0629 0.94 2.8
## q_41 -0.53 -0.26 -0.03 0.3493 0.65 1.5
## q_33_dummy_1 0.27 -0.05 0.24 0.1339 0.87 2.0
## q_33_dummy_2 0.17 0.08 0.57 0.3617 0.64 1.2
## q_33_dummy_3 -0.14 0.12 0.01 0.0346 0.97 1.9
## q_33_dummy_4 -0.45 -0.02 -0.05 0.2064 0.79 1.0
## q_33_dummy_5 0.00 -0.05 -0.01 0.0028 1.00 1.0
## q_39_dummy_1 -0.04 0.17 0.52 0.2967 0.70 1.2
## q_39_dummy_2 -0.14 0.00 0.60 0.3805 0.62 1.1
## q_39_dummy_3 0.02 -0.06 -0.23 0.0572 0.94 1.1
## q_39_dummy_4 0.00 0.15 -0.41 0.1876 0.81 1.3
## q_39_dummy_5 0.05 -0.12 0.07 0.0215 0.98 2.0
## q_39_dummy_6 -0.07 -0.03 0.06 0.0088 0.99 2.3
##
## RC1 RC3 RC2
## SS loadings 3.87 2.18 1.96
## Proportion Var 0.14 0.08 0.07
## Cumulative Var 0.14 0.22 0.30
## Proportion Explained 0.48 0.27 0.24
## Cumulative Proportion 0.48 0.76 1.00
##
## Mean item complexity = 1.6
## Test of the hypothesis that 3 components are sufficient.
##
## The root mean square of the residuals (RMSR) is 0.06
## with the empirical chi square 5039.26 with prob < 0
##
## Fit based upon off diagonal values = 0.86
Percebe-se que as variáveis de Relação Família escola se agrupam em RC1, enquanto as de Bem estar em RC3. Também é possível observar que ambos os componentes explicam a 0.79 da variância total.
A partir disto é possível calcular os escores dos componentes com base no resultado da PCA. Para melhor interpretação dos resultados realizamos uma transformação linear fixando em uma escala de 0 a 1.
escore <- model_pca$scores
Ssup <- mean (escore) + 3 * sd (escore)
Sinf <- mean (escore) - 3 * sd (escore)
escore_pad <- (escore - Sinf) / (Ssup - Sinf)
escore_pad[escore_pad < 0] <- 0
tabela_scores <- as.data.frame(escore_pad)
head(tabela_scores)
## RC1 RC3 RC2
## Freq 0.8158633 0.3127285 0.8086280
## Freq.1 0.6359754 0.4918725 0.7742105
## Freq.2 0.4999538 0.8086595 0.6582143
## Freq.3 0.1784596 0.5598071 0.6026611
## Freq.4 0.4456274 0.5690617 0.5589136
## Freq.5 0.4219568 0.8597655 0.3038872
Para unificação destes escores em um componentem geral, podemos utilizar duas técnicas: 1) média dos escores transformados; e 2) raiz quadrada do produto dos escores transformados, como faz o idh.
# Média
tabela_scores$components <- rowMeans(tabela_scores[,1:2])
# Raiz quadrada dos produtos
tabela_scores$como_idh <- apply(tabela_scores[1:2], 1, prod)^(1/2)
Com o escore atingido, podemos aferir a diferença entre grupos da amostra (neste caso, etnia). Vamos utilizar o Teste de Kruskal-Wallis para aferir a diferença generaliza e o teste pairwise de Mann-Whitney, para diferença entre grupos.
db_novo <- cbind(db, tabela_scores[, 4:5])
db_novo$q_3 <- ordered(
db_novo$q_3,
levels = unique(db_novo$q_3)
)
kruskal.test(components ~ q_3, data = db_novo)
##
## Kruskal-Wallis rank sum test
##
## data: components by q_3
## Kruskal-Wallis chi-squared = 11.102, df = 5, p-value = 0.0494
O teste de Kruskal-Wallis sugere que existe diferença entre etnias
pairwise.wilcox.test(
db_novo$components,
db_novo$q_3,
p.adjust.method = "BH" # controla para proporção esperada de falsa descoberta na hipótese nula
)
##
## Pairwise comparisons using Wilcoxon rank sum test with continuity correction
##
## data: db_novo$components and db_novo$q_3
##
## Branca Parda Amarela Preta Prefiro não declarar
## Parda 0.380 - - - -
## Amarela 0.617 0.876 - - -
## Preta 0.876 0.680 0.680 - -
## Prefiro não declarar 0.617 0.380 0.411 0.617 -
## Indígena 0.024 0.024 0.056 0.024 0.024
##
## P value adjustment method: BH
O teste pairwise de Mann-Whitney sugere que a etnia indígena apresenta diferença significativa das outras etnias.
Tentando entender o efeito dos missings na PCA, rodaremos o modelo somente com os casos completos. Ou seja, qualquer observação que apresentar um valor faltando será removida do banco de dados.
db_semmissi <- db_pca[complete.cases(db_pca),]
model_pca <- psych::principal(
db_semmissi, # banco de dados SEM MISSING
nfactors = 3, # 3 fatores: Relação, Bem estar e as dummies
rotate = 'varimax' # aumentar a variância
)
print(model_pca)
## Principal Components Analysis
## Call: psych::principal(r = db_semmissi, nfactors = 3, rotate = "varimax")
## Standardized loadings (pattern matrix) based upon correlation matrix
## RC1 RC3 RC2 h2 u2 com
## q_24 0.58 0.02 -0.02 0.3361 0.66 1.0
## q_25 0.65 0.07 0.14 0.4443 0.56 1.1
## q_26 0.44 -0.14 -0.03 0.2101 0.79 1.2
## q_27 0.68 0.03 -0.04 0.4652 0.53 1.0
## q_28 0.71 0.02 0.12 0.5139 0.49 1.1
## q_29 0.58 0.10 -0.08 0.3520 0.65 1.1
## q_30 0.18 0.45 -0.06 0.2353 0.76 1.4
## q_31 0.45 0.14 -0.34 0.3396 0.66 2.1
## q_32 0.50 0.37 0.05 0.3918 0.61 1.9
## q_34 0.19 0.06 -0.31 0.1361 0.86 1.8
## q_35 0.45 0.35 -0.10 0.3316 0.67 2.0
## q_36 0.50 0.32 0.47 0.5823 0.42 2.7
## q_37 0.60 0.33 0.39 0.6255 0.37 2.4
## q_38 0.52 0.31 0.41 0.5401 0.46 2.6
## q_40 -0.05 -0.40 -0.05 0.1636 0.84 1.1
## q_41 -0.53 -0.06 -0.15 0.3039 0.70 1.2
## q_33_dummy_1 0.36 -0.05 -0.06 0.1350 0.87 1.1
## q_33_dummy_2 0.16 0.65 -0.09 0.4564 0.54 1.2
## q_33_dummy_3 0.10 -0.49 -0.05 0.2519 0.75 1.1
## q_33_dummy_4 -0.47 -0.10 0.22 0.2769 0.72 1.5
## q_33_dummy_5 -0.01 -0.13 -0.36 0.1444 0.86 1.3
## q_39_dummy_1 0.33 -0.12 -0.12 0.1363 0.86 1.6
## q_39_dummy_2 -0.17 0.48 -0.49 0.4960 0.50 2.2
## q_39_dummy_3 0.02 -0.18 0.36 0.1573 0.84 1.5
## q_39_dummy_4 -0.05 -0.04 0.59 0.3558 0.64 1.0
## q_39_dummy_5 0.00 0.02 0.08 0.0064 0.99 1.2
## q_39_dummy_6 0.04 -0.35 -0.06 0.1310 0.87 1.1
##
## RC1 RC3 RC2
## SS loadings 4.66 2.08 1.77
## Proportion Var 0.17 0.08 0.07
## Cumulative Var 0.17 0.25 0.32
## Proportion Explained 0.55 0.24 0.21
## Cumulative Proportion 0.55 0.79 1.00
##
## Mean item complexity = 1.5
## Test of the hypothesis that 3 components are sufficient.
##
## The root mean square of the residuals (RMSR) is 0.08
## with the empirical chi square 1168.01 with prob < 6.9e-111
##
## Fit based upon off diagonal values = 0.8
A proporção de variância explicada não sofreu alterações consideráveis.