library (devtools)
## Loading required package: usethis
library (dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library (ggplot2)
library (shiny)
library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## v tibble  3.0.6     v purrr   0.3.4
## v tidyr   1.1.2     v stringr 1.4.0
## v readr   1.4.0     v forcats 0.5.1
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
require(readxl)
## Loading required package: readxl
url <- "https://github.com/Smolski/livroavancado/raw/master/creme_dental_exemplo1.xlsx"
destfile <- "creme_dental_exemplo1.xlsx"
curl::curl_download(url, destfile)
creme_dental_exemplo1 <- read_excel(destfile)

attach(creme_dental_exemplo1)
summary(creme_dental_exemplo1)
##        v1              v2            v3            v4            v5     
##  Min.   :1.000   Min.   :2.0   Min.   :1.0   Min.   :2.0   Min.   :1.0  
##  1st Qu.:2.000   1st Qu.:3.0   1st Qu.:2.0   1st Qu.:3.0   1st Qu.:2.0  
##  Median :4.000   Median :4.0   Median :4.0   Median :4.0   Median :3.5  
##  Mean   :3.933   Mean   :3.9   Mean   :4.1   Mean   :4.1   Mean   :3.5  
##  3rd Qu.:6.000   3rd Qu.:5.0   3rd Qu.:6.0   3rd Qu.:5.0   3rd Qu.:5.0  
##  Max.   :7.000   Max.   :7.0   Max.   :7.0   Max.   :7.0   Max.   :7.0  
##        v6       
##  Min.   :2.000  
##  1st Qu.:3.000  
##  Median :4.000  
##  Mean   :4.167  
##  3rd Qu.:4.750  
##  Max.   :7.000

O que é cada coisa?

V1: É importante comprar um creme dental que evite cáries. V2: Gosto de um creme dental que clareie os dentes. V3: Um creme dental deve fortificar as gengivas. V4: Prefiro um creme dental que refresque o hálito. V5: Manter os dentes sadios não é uma vantagem importante de um creme dental. V6: O aspecto mais importante na compra de um creme dental é tornar os dentes atraentes.

Note que existem correlações amostrais positivas e negativas relativamente elevadas entre V1 (prevenção de cáries), V3 (gengivas fortes) e V5 (dentes sadios). Espera-se que essas variáveis se relacionem com o mesmo conjunto de fatores. Verificam-se também correlações relativamente elevadas entre V2 (clareie os dentes), V4 (hálito puro) e V6 (dentes atraentes). Essas variáveis também devem correlacionar-se com os mesmos fatores.

matcor <- cor(creme_dental_exemplo1)
print(matcor, digits = 2)
##         v1     v2     v3      v4      v5      v6
## v1  1.0000 -0.053  0.873 -0.0862 -0.8576  0.0042
## v2 -0.0532  1.000 -0.155  0.5722  0.0197  0.6405
## v3  0.8731 -0.155  1.000 -0.2478 -0.7778 -0.0181
## v4 -0.0862  0.572 -0.248  1.0000 -0.0066  0.6405
## v5 -0.8576  0.020 -0.778 -0.0066  1.0000 -0.1364
## v6  0.0042  0.640 -0.018  0.6405 -0.1364  1.0000
require(corrplot)
## Loading required package: corrplot
## corrplot 0.84 loaded
corrplot(matcor, method="circle")

Olha que legal acima

Na figura acima, as correlações estão em cor azul porque são positivas, com tons mais fortes para as correlações mais altas.

Para testar a conveniência do modelo fatorial pode-se aplicar o teste de esfericidade de Bartlett para testar a hipótese nula, de que as variáveis não sejam correlacionadas na população. Um valor elevado da estatística de teste favorece a rejeição da hipótese nula.

Também, a medida de adequacidade da amostra de Kaiser-Meyer-Olkin (KMO) compara as magnitudes dos coeficientes de correlação observados com as magnitudes dos coeficientes de correlação parcial. Pequenos valores de KMO indicam que as correlações entre os pares de variáveis não podem ser explicadas por outras variáveis, indicando que a análise fatorial não é adequada

Ho: A matriz de correlação da população é uma matriz identidade, ou seja as variáveis não são correlacionadas na população.

H1
A matriz de correlação da população não é uma matriz identidade, ou seja as variáveis são correlacionadas na população.
#install.packages("psych")
require(psych)
## Loading required package: psych
## 
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
cortest.bartlett(creme_dental_exemplo1)
## R was not square, finding R from data
## $chisq
## [1] 111.3138
## 
## $p.value
## [1] 9.017094e-17
## 
## $df
## [1] 15

Acima Veja que a hipótese nula de que a matriz de correlação da população seja uma matriz identidade é rejeitada pelo teste de esfericidade de Bartlett. A estatística qui-quadrado aproximada é 111,314, com 15 graus de liberdade, significativa ao nível de 0,05.

Abaixo o teste KMO

KMO(creme_dental_exemplo1)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = creme_dental_exemplo1)
## Overall MSA =  0.66
## MSA for each item = 
##   v1   v2   v3   v4   v5   v6 
## 0.62 0.70 0.68 0.64 0.77 0.56

ACIMA A estatística KMO maior que 0,5 também concorda quanto ao fato de que a análise fatorial pode ser considerada uma técnica apropriada para analisar a matriz de correlação

ABAIXO:

Assim, recomenda-se a ACP, quando o objetivo é determinar o número mínimo de fatores que respondem pela máxima variância nos dados, sendo os fatores chamados componentes principais (MALHOTRA, 2001).

Obs.:

cor = TRUE: as componentes principais serão geradas a partir da matriz de correlação.

cor = FALSE: as componentes principais serão geradas a partir da matriz de covariância.

siglas componentes principais (ACP) e a análise fatorial (AFC) (Por que tal ACP aqui? Resp- foge do escopo, buscar na literatura como Malhotra,2001)

técnica ACP

#ACP-> cor = TRUE: as componentes principais serão geradas a partir da matriz de correlação.
fit<-princomp(creme_dental_exemplo1,cor=TRUE)
fit
## Call:
## princomp(x = creme_dental_exemplo1, cor = TRUE)
## 
## Standard deviations:
##    Comp.1    Comp.2    Comp.3    Comp.4    Comp.5    Comp.6 
## 1.6526307 1.4893352 0.6645283 0.5841726 0.4273502 0.2919051 
## 
##  6  variables and  30 observations.
summary(fit)
## Importance of components:
##                           Comp.1    Comp.2     Comp.3     Comp.4     Comp.5
## Standard deviation     1.6526307 1.4893352 0.66452834 0.58417262 0.42735024
## Proportion of Variance 0.4551981 0.3696865 0.07359965 0.05687627 0.03043804
## Cumulative Proportion  0.4551981 0.8248846 0.89848425 0.95536053 0.98579856
##                            Comp.6
## Standard deviation     0.29190514
## Proportion of Variance 0.01420144
## Cumulative Proportion  1.00000000

A função summary(fit) mostra a aplicação da análise de componentes principais. O fator 1 responde por 45,52% da variância total. Da mesma forma, o segundo fator responde por 36,97% da variância total, sendo que os dois primeiros fatores respondem por 82,49% da variância total. Várias considerações devem integrar a análise do número de fatores que devem ser usados na análise.

Quantos escolher?

Depende da técnica empregada

possíveis técnicas:

1. Determinação a priori

Quando o pesquisador, com base na experiência que apresentação em relação ao assunto, decide quantos fatores deseja utilizar. (NO CASO por exemplo de 2)

2 Autovalores

Como o autovalor representa a quantidade de variância associada ao fator, incluem-se apenas os fatores com variância maior que 1.

3 Gráfico de declive (scree plot)

Trata-se de uma representação gráfica dos autovalores associada ao número de fatores na ordem de extração. O ponto em que a inclinação suaviza indica o número de fatores a ser usados, que em geral é superior ao revelado pelos autovalores.

4 Percentagem da variância

Determina que o núumero de fatores extraídos seja de no mínimo 60% da variância.

5 Teste de significância

É possível reter apenas os fatores estatisticamente significativos com base na significância estatística dos autovalores separados.

Abaixo vamos apresentar o scree-plot, em formato do gráfico de barras para o nosso exemplo

screeplot(fit)

plot(fit,type="lines")

fica claro a escolha de por q dois fatores

conforme se segue na Análise de Componentes Principais:

PCAdente<-principal(creme_dental_exemplo1, nfactors=2,
                n.obs=30,rotate="none", scores=TRUE)
PCAdente
## Principal Components Analysis
## Call: principal(r = creme_dental_exemplo1, nfactors = 2, rotate = "none", 
##     n.obs = 30, scores = TRUE)
## Standardized loadings (pattern matrix) based upon correlation matrix
##      PC1   PC2   h2    u2 com
## v1  0.93  0.25 0.93 0.074 1.1
## v2 -0.30  0.80 0.72 0.277 1.3
## v3  0.94  0.13 0.89 0.106 1.0
## v4 -0.34  0.79 0.74 0.261 1.4
## v5 -0.87 -0.35 0.88 0.122 1.3
## v6 -0.18  0.87 0.79 0.210 1.1
## 
##                        PC1  PC2
## SS loadings           2.73 2.22
## Proportion Var        0.46 0.37
## Cumulative Var        0.46 0.82
## Proportion Explained  0.55 0.45
## Cumulative Proportion 0.55 1.00
## 
## Mean item complexity =  1.2
## Test of the hypothesis that 2 components are sufficient.
## 
## The root mean square of the residuals (RMSR) is  0.07 
##  with the empirical chi square  3.94  with prob <  0.41 
## 
## Fit based upon off diagonal values = 0.98

Acima sem rotação

abaixo:

Matriz Rotada do Fator

Com o objetivo de possibilitar uma melhor interpretação dos fatores, é prática comum fazer uma rotação ou uma transformação dos fatores.

O conjunto de cargas fatoriais, obtidas por qualquer método de solução fatorial, quando o número de fatores comuns é maior do que um, não é único, pois outros conjuntos equivalentes podem ser encontrados, por transformações ortogonais de cargas.

Na rotação ortogonal, os eixos são mantidos em ângulo reto, sendo o método mais utilizado o processo varimax. Esse método ortogonal de rotação minimiza o número de variáveis com altas cargas sobre um fator afim de permitir a interpretaçã dos fatores. A rotação ortogonal resulta em fatores nãocorrelacionados ao passo que a rotação oblíqua não mantém os eixos em ângulo reto e os fatores são correlacionados (MALHOTRA, 2001)

PCAdentevarimax<-principal(creme_dental_exemplo1, nfactors=2,
            n.obs=30,rotate="varimax",scores=TRUE)
PCAdentevarimax
## Principal Components Analysis
## Call: principal(r = creme_dental_exemplo1, nfactors = 2, rotate = "varimax", 
##     n.obs = 30, scores = TRUE)
## Standardized loadings (pattern matrix) based upon correlation matrix
##      RC1   RC2   h2    u2 com
## v1  0.96 -0.03 0.93 0.074 1.0
## v2 -0.05  0.85 0.72 0.277 1.0
## v3  0.93 -0.15 0.89 0.106 1.1
## v4 -0.09  0.85 0.74 0.261 1.0
## v5 -0.93 -0.08 0.88 0.122 1.0
## v6  0.09  0.88 0.79 0.210 1.0
## 
##                        RC1  RC2
## SS loadings           2.69 2.26
## Proportion Var        0.45 0.38
## Cumulative Var        0.45 0.82
## Proportion Explained  0.54 0.46
## Cumulative Proportion 0.54 1.00
## 
## Mean item complexity =  1
## Test of the hypothesis that 2 components are sufficient.
## 
## The root mean square of the residuals (RMSR) is  0.07 
##  with the empirical chi square  3.94  with prob <  0.41 
## 
## Fit based upon off diagonal values = 0.98

Veja que na matriz rotada, o Fator 1 apresenta altos coeficientes para as variáveis V1 (prevenção de cáries), V3 (gengivas fortes) e coeficiente negativo para V5 (dentes sadios não é importante). O Fator 2 apresenta forte relação com V2 (clareie os dentes), V4 (hálito puro) e V6 (dentes atraentes).

Rotulando (muito importante):

Nesta fase é usual tentar dar nomes aos fatores. Em muitos casos, isto requer um certo grau de imaginação:

Fator 1: Fator de benefício para a saúde. -> altos coeficientes para as variáveis V1 (prevenção de cáries), V3 (gengivas fortes) e coeficiente negativo para V5 (dentes sadios não é importante)

Fator 2: Fator de benefício social. -> relação com V2 (clareie os dentes), V4 (hálito puro) e V6 (dentes atraentes).

Com os dois fatores acima, podemos concluir sobre o que o consumidor espera de um creme dental.

Agora Autovalores

PCAdentevarimax$values
## [1] 2.73118833 2.21811927 0.44159791 0.34125765 0.18262823 0.08520861

Confirmando, temos autovalores acima de 1, nos dois primeiros casos.

(DEU IGUAL O scree-plot)

Para visualizar melhor a contribuição de cada variável (peso):

PCAdentevarimax$loadings
## 
## Loadings:
##    RC1    RC2   
## v1  0.962       
## v2         0.848
## v3  0.933 -0.151
## v4         0.855
## v5 -0.934       
## v6         0.885
## 
##                  RC1   RC2
## SS loadings    2.687 2.263
## Proportion Var 0.448 0.377
## Cumulative Var 0.448 0.825

Recurso importante na interpretação dos fatores, o gráfico das variáveis, apresenta ao final do eixo, as variáveis que com cargas mais altas sobre aquele fator. Quanto mais próximas da origem menores as cargas destas variáveis sobre aquele fator. Variáveis distantes dos dois eixos, estão relacionadas a ambos os fatores.

Agora algo bem complexo (e interessante):

biplot(PCAdentevarimax)

1,3 e 5 fortemente correlacionadas em RC1 2,4 e 6 em RC2

abaixo Os valores dos fatores obtidos para os 30 entrevistados encontram-se na matriz de coeficiente de escore do componente mostrada abaixo. Esta ajuda a entender como cada variável se relaciona aos escores dos componentes calculados para cada participante. Para melhor compreensão da análise dos escores dos entrevistados é importante especificar e comentar o significado de cada fator:

Fator 1: Fator de benefício para a saúde.

Fator 2: Fator de benefício social.

Analisando os escores fatoriais dos entrevistados, destacamos a seguir alguns entrevistados e seus respectivos resultados:

Entrevistado 18: 1.494934982

Este entrevistado se destacou como o primeiro colocado no ranqueamento, obtendo o maior escore ponderado, demonstrando ser bastante atento à prevenção de cáries, gengivas fortes e dentes sadios.

Entrevistado 29: 2.24121650

Este entrevistado se destacou em primeiro no segundo fator, apresentando preocupação quanto ao beneffício social da dentição: boa aparência dos dentes, hálito puro e boa aparência dos dentes.

factor.scores(creme_dental_exemplo1,PCAdentevarimax, 
              Phi = NULL, 
              method = c("Thurstone", "tenBerge", "Anderson",
                         "Bartlett", "Harman","components"),
              rho=NULL)
## $scores
##                RC1         RC2
##  [1,]  1.143442263 -0.30235970
##  [2,] -1.164116133 -0.33355156
##  [3,]  1.275077650 -0.85487286
##  [4,]  0.283039210  1.10541625
##  [5,] -1.414762055 -1.47784848
##  [6,]  0.962545953 -0.30691756
##  [7,]  0.386174401 -0.92946239
##  [8,]  1.314326185 -0.02535258
##  [9,] -1.013720900 -0.63921247
## [10,] -1.294148852  1.54533311
## [11,]  1.102641284 -0.61319753
## [12,] -1.150922200 -0.30734835
## [13,]  1.288271583 -0.82866966
## [14,]  0.148988842  1.35740692
## [15,] -1.326348572 -0.91233215
## [16,]  0.789822075 -0.33831055
## [17,]  0.608638252 -0.61593673
## [18,]  1.494934982 -0.29386303
## [19,] -1.026914833 -0.66541567
## [20,] -0.394466651  1.34560335
## [21,] -1.192010691 -0.89125450
## [22,]  0.614234778 -0.01676177
## [23,] -0.978198322 -0.27595537
## [24,] -0.006906942  1.88496785
## [25,]  0.833064467 -0.23598682
## [26,] -0.188090764  1.60734167
## [27,]  0.828974634 -0.32986524
## [28,] -0.677614532  1.06323436
## [29,]  0.182192413  2.24121650
## [30,] -1.428147525 -0.95604502
## 
## $weights
##              RC1          RC2
## v1  0.3584503538  0.009031517
## v2  0.0003948676  0.375029969
## v3  0.3449550456 -0.044523335
## v4 -0.0148037305  0.376748047
## v5 -0.3505499553 -0.057490945
## v6  0.0538212664  0.394380217
## 
## $r.scores
##              RC1          RC2
## RC1 1.000000e+00 4.649059e-16
## RC2 4.440892e-16 1.000000e+00
## 
## $missing
##  [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 
## $R2
## [1] NA  1