Suponga que el investigador desea determinar qué beneficios buscan los consumidores al comprar un dentífrico. En centros comerciales se entrevistó a un muestra de 30 individuos. Se solicitó a los encuestados que utilizaran una escala de 7 puntos (1 = muy en desacuerdo, 7= muy de acuerdo), para expresar su grado de acuerdo o desacuerdo con los siguientes enunciados:
V1: Es importante comprar dentífricos que prevengan las caries. V2: Me gustan los dentífricos que dejan los dientes brillantes. V3: Un dentífrico tiene que fortalecer las encías. V4: Prefiero un dentífrico que refresque el aliento. V5: la prevención de las caries no es un beneficio importante ofrecido por los dentífricos. V6: La consideración más importante al comprar un dentífrico son los dientes bellos.
library("factoextra")
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
Dentrificos<-read.csv("Dentrificos.csv")
head(Dentrificos)
## Prevencion Brillo Fortaleza Frescura No_Prevencion Belleza
## 1 7 3 6 4 2 4
## 2 1 3 2 4 5 4
## 3 6 2 7 4 1 3
## 4 4 5 4 6 2 5
## 5 1 2 2 3 6 2
## 6 6 3 6 4 2 4
correlacion<-cor(Dentrificos, method = "pearson")
correlacion
## Prevencion Brillo Fortaleza Frescura No_Prevencion
## Prevencion 1.000000000 -0.05321785 0.87309020 -0.086162233 -0.857636627
## Brillo -0.053217850 1.00000000 -0.15502002 0.572212066 0.019745647
## Fortaleza 0.873090198 -0.15502002 1.00000000 -0.247787899 -0.777848036
## Frescura -0.086162233 0.57221207 -0.24778790 1.000000000 -0.006581882
## No_Prevencion -0.857636627 0.01974565 -0.77784804 -0.006581882 1.000000000
## Belleza 0.004168129 0.64046495 -0.01806881 0.640464946 -0.136402944
## Belleza
## Prevencion 0.004168129
## Brillo 0.640464946
## Fortaleza -0.018068814
## Frescura 0.640464946
## No_Prevencion -0.136402944
## Belleza 1.000000000
library("corrplot")
## corrplot 0.92 loaded
corrplot(correlacion, order="hclust")
library(psych)
##
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
KMO(Dentrificos)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = Dentrificos)
## Overall MSA = 0.66
## MSA for each item =
## Prevencion Brillo Fortaleza Frescura No_Prevencion
## 0.62 0.70 0.68 0.64 0.77
## Belleza
## 0.56
cortest.bartlett(Dentrificos)
## R was not square, finding R from data
## $chisq
## [1] 111.3138
##
## $p.value
## [1] 9.017094e-17
##
## $df
## [1] 15
scree(Dentrificos, pc=FALSE)
fa.parallel(Dentrificos, fa='fa')
## Parallel analysis suggests that the number of factors = 2 and the number of components = NA
extraccion <- factanal(Dentrificos, 2, rotation = 'varimax')
print(extraccion)
##
## Call:
## factanal(x = Dentrificos, factors = 2, rotation = "varimax")
##
## Uniquenesses:
## Prevencion Brillo Fortaleza Frescura No_Prevencion
## 0.063 0.437 0.174 0.378 0.205
## Belleza
## 0.309
##
## Loadings:
## Factor1 Factor2
## Prevencion 0.968
## Brillo 0.749
## Fortaleza 0.898 -0.140
## Frescura 0.784
## No_Prevencion -0.887
## Belleza 0.830
##
## Factor1 Factor2
## SS loadings 2.542 1.892
## Proportion Var 0.424 0.315
## Cumulative Var 0.424 0.739
##
## Test of the hypothesis that 2 factors are sufficient.
## The chi square statistic is 5.21 on 4 degrees of freedom.
## The p-value is 0.266
round(extraccion$loadings,3)
##
## Loadings:
## Factor1 Factor2
## Prevencion 0.968
## Brillo 0.749
## Fortaleza 0.898 -0.140
## Frescura 0.784
## No_Prevencion -0.887
## Belleza 0.830
##
## Factor1 Factor2
## SS loadings 2.542 1.893
## Proportion Var 0.424 0.315
## Cumulative Var 0.424 0.739
componentes<-prcomp(Dentrificos, scale. = TRUE)
names(componentes)
## [1] "sdev" "rotation" "center" "scale" "x"
sdev: Desviación estándar de los componentes principales
componentes$sdev
## [1] 1.6526307 1.4893352 0.6645283 0.5841726 0.4273502 0.2919051
# Valores Propios
vp <- (componentes$sdev)^2
# Varianzas en porcentajes
var_expli <- vp*100/sum(vp)
# Varianza aumulada
var_acum <- cumsum(var_expli)
acp.manual <- data.frame(Valor_propio=vp, Varianza_Explicada = var_expli,
Varianza_Acum = var_acum)
head(acp.manual)
## Valor_propio Varianza_Explicada Varianza_Acum
## 1 2.73118833 45.519806 45.51981
## 2 2.21811927 36.968654 82.48846
## 3 0.44159791 7.359965 89.84843
## 4 0.34125765 5.687627 95.53605
## 5 0.18262823 3.043804 98.57986
## 6 0.08520861 1.420144 100.00000
summary(componentes)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6
## Standard deviation 1.6526 1.4893 0.6645 0.58417 0.42735 0.2919
## Proportion of Variance 0.4552 0.3697 0.0736 0.05688 0.03044 0.0142
## Cumulative Proportion 0.4552 0.8249 0.8985 0.95536 0.98580 1.0000
vp.dentrifico <- get_eigenvalue(componentes)
head(vp.dentrifico)
## eigenvalue variance.percent cumulative.variance.percent
## Dim.1 2.73118833 45.519806 45.51981
## Dim.2 2.21811927 36.968654 82.48846
## Dim.3 0.44159791 7.359965 89.84843
## Dim.4 0.34125765 5.687627 95.53605
## Dim.5 0.18262823 3.043804 98.57986
## Dim.6 0.08520861 1.420144 100.00000
barplot(acp.manual[, 2], names.arg=1:nrow(acp.manual),
main = "Varianzas",xlab = "Componentes Principales",
ylab = "Porcentaje de varianza", col ="steelblue")
barplot(acp.manual[, 2], names.arg=1:nrow(acp.manual),
main = "Varianzas",xlab = "Componentes Principales",
ylab = "Porcentaje de varianza", col ="steelblue")
# Adicin de linea que conecta los grfico.
lines(x = 1:nrow(acp.manual),acp.manual[, 2],
type="b", pch=19, col = "red")
fviz_screeplot(componentes, ncp=6)
fviz_screeplot(componentes, ncp=6,choice="eigenvalue")
fviz_eig(componentes)
variables <- get_pca_var(componentes)
variables
## Principal Component Analysis Results for variables
## ===================================================
## Name Description
## 1 "$coord" "Coordinates for the variables"
## 2 "$cor" "Correlations between variables and dimensions"
## 3 "$cos2" "Cos2 for the variables"
## 4 "$contrib" "contributions of the variables"
La correlación entre variables y componentes principales se utiliza como coordenadas. Se puede calcular de la siguiente manera: Correlación de las variables y los PCs = Cargas x Desv.estándar de la CP \[\rho_{jk} = \gamma_{k}*\sqrt{\lambda_j}\]
#Correlacion entre variables y componentes principales
func_corr_var <- function(cargas.var, desv.cp){
cargas.var*desv.cp
}
# Correlacion/Coordenadas de las variables
cargas <- componentes$rotation
desv <- componentes$sdev
coord.var <- corr.var <- t(apply(cargas, 1, func_corr_var, desv))
head(coord.var[, 1:2])
## PC1 PC2
## Prevencion -0.9283425 0.2532285
## Brillo 0.3005297 0.7952496
## Fortaleza -0.9361812 0.1308894
## Frescura 0.3415817 0.7889663
## No_Prevencion 0.8687553 -0.3507939
## Belleza 0.1766389 0.8711581
variables$coord[,1:2]
## Dim.1 Dim.2
## Prevencion -0.9283425 0.2532285
## Brillo 0.3005297 0.7952496
## Fortaleza -0.9361812 0.1308894
## Frescura 0.3415817 0.7889663
## No_Prevencion 0.8687553 -0.3507939
## Belleza 0.1766389 0.8711581
biplot(componentes)
fviz_pca_biplot(componentes)
fviz_pca_var(componentes)
El cos2 de las variables se calcula como las coordenadas al cuadrado: var.cos2 = coord.var x coord.var \[var.cos2= \rho^2\]
var.cos2 <- coord.var^2
head(var.cos2[, 1:2])
## PC1 PC2
## Prevencion 0.86181984 0.06412465
## Brillo 0.09031811 0.63242194
## Fortaleza 0.87643523 0.01713204
## Frescura 0.11667803 0.62246778
## No_Prevencion 0.75473582 0.12305634
## Belleza 0.03120132 0.75891652
variables$cos2[,1:2]
## Dim.1 Dim.2
## Prevencion 0.86181984 0.06412465
## Brillo 0.09031811 0.63242194
## Fortaleza 0.87643523 0.01713204
## Frescura 0.11667803 0.62246778
## No_Prevencion 0.75473582 0.12305634
## Belleza 0.03120132 0.75891652
fviz_pca_var(componentes, col.var="cos2")+
scale_color_gradient2(low="white",
mid="blue", high="red", midpoint=0.85) +
theme_minimal()
La contribución de una variable a un componente principal determinado es (en porcentaje):
(var :cos2 x 100)=(cos2 total del componente)
cos2.comp <- apply(var.cos2, 2, sum)
contrib <- function(var.cos2, cos2.comp){var.cos2*100/cos2.comp}
contrib.var <- t(apply(var.cos2,1, contrib, cos2.comp))
head(contrib.var[, 1:2])
## PC1 PC2
## Prevencion 31.554757 2.8909470
## Brillo 3.306916 28.5116291
## Fortaleza 32.089886 0.7723678
## Frescura 4.272061 28.0628633
## No_Prevencion 27.633972 5.5477784
## Belleza 1.142408 34.2144144
variables$contrib[,1:2]
## Dim.1 Dim.2
## Prevencion 31.554757 2.8909470
## Brillo 3.306916 28.5116291
## Fortaleza 32.089886 0.7723678
## Frescura 4.272061 28.0628633
## No_Prevencion 27.633972 5.5477784
## Belleza 1.142408 34.2144144
fviz_pca_var(componentes, col.var="contrib")+
scale_color_gradient2(low="white",
mid="blue", high="red", midpoint=16) +
theme_minimal()
head(componentes$x)
## PC1 PC2 PC3 PC4 PC5 PC6
## [1,] -1.95304855 0.07101954 -0.4204652 0.04429731 0.25129712 0.5045730
## [2,] 1.67629433 -0.98519324 -0.4107514 -0.44926814 -0.24877831 -0.2970760
## [3,] -2.42977968 -0.65766708 -0.9622336 0.10432921 0.12430666 -0.3561819
## [4,] 0.09081904 1.69747385 -0.5154103 0.41242545 -0.30387782 -0.3437702
## [5,] 1.51539626 -2.72380315 -0.3789693 0.07454906 0.02467079 -0.2561995
## [6,] -1.66956158 -0.01478708 -0.4146078 -0.07904243 0.16489830 0.1247777