Está en la página 1de 14

Doctorado en Educación

Universidad Metropolitana de Ciencias de la Educación

Curso: Introducción al uso de R para análisis cuantitativo


Profesor: Dr. Antonio Rivera Hutinel

Nombre: Mario Castro Guerra

Ejercicio práctico 4

1) Considerando lo aprendido en clases, desarrolle con las funciones graficas de R


para el set de datos escuelasportugal.xlsx (objeto eduport), una matriz de gráficos
que se parezcan a la imagen que se muestra a continuación (o lo más cercano
posible), utilizando las variables G1, G2, G3 y sexo (9 pts):

Considere para la ejecución del grafico los siguientes elementos:


a) Debe considerar disponer los gráficos en una matriz de 3 x 3 (en la misma hoja,
como aparece en la imagen)
b) Como pista se usaron los comandos hist, plot, lines, dnorm, coef, abline y boxplot.
c) En los parámetros gráficos se uso color grey, black y red. En tipo de línea 1 y 2 y
en ancho de línea 2. En tipo de punto se uso círculos rellenos
Doctorado en Educación
Universidad Metropolitana de Ciencias de la Educación

Curso: Introducción al uso de R para análisis cuantitativo


Profesor: Dr. Antonio Rivera Hutinel
d) Se utilizo el total de 765 datos casos de la base de datos y los variables G1, G2 y
G3 rangos tienen valores que van de 0 a 20
e) Es importante que incorpore al grafico el nombre de los ejes
f) Copie su script y péguelo en este archivo junto con el grafico resultante.

Desarrollo

# Configuramos la ventana de gráficos


par(mfrow=c(3,3))

# definimos organización de gráficos por lineas


# Linea 1: hist G1, scatter plot g2 y g3
# Linea 2: Boxplot G1, hist G2, scatter plot g2-g3
# Linea 3: Box Plot G3, Box plot G2, hist G3

# Linea 1
# Histogramas para G1

hist(eduport$G1, probability=TRUE, col="grey", border="black",


main="Histograma de G1", xlab="rendimiento G1", ylab="frecuencia absoluta",
xlim=c(0,20))
curve(dnorm(x, mean=mean(eduport$G1), sd=sd(eduport$G1)),
col="red", lwd=2, add=TRUE, lty=2)

# Scatter plots para G1 vs G2

# Ajustar modelo
model <- lm(G2 ~ G1, data=eduport)

plot(eduport$G2, eduport$G1, pch=16, col="black", main="Scatter Plot G2~G1",


xlab="rendimiento G2", ylab="rendimiento G1", xlim=c(0,20), ylim=c(0,20))
abline(coef(model), col="red", lwd=2, lty=2)

# Scatter plots para G1 vs G3


# Ajustar modelo
model <- lm(G3 ~ G1, data=eduport)

plot(eduport$G1, eduport$G3, pch=16, col="black", main="Scatter Plot G3~G1",


xlab="rendimiento G3", ylab="rendimiento G1", xlim=c(0,20), ylim=c(0,20))
abline(coef(model), col="red", lwd=2, lty=2)

# ------------------------------------------------------------------
Doctorado en Educación
Universidad Metropolitana de Ciencias de la Educación

Curso: Introducción al uso de R para análisis cuantitativo


Profesor: Dr. Antonio Rivera Hutinel
# Linea 2

# Boxplots para comparar las variables G1 según sexo


boxplot(eduport$G1 ~ eduport$sexo, col="red", border="black",
main= "Boxplots G1~ Sexo",
xlab="Sexo", ylab= "G1", lty = 1, whisklty = 2)

# Histograma para G2
hist(eduport$G2, probability=TRUE, col="grey", border="black",
main="Histograma de G2", xlab="rendimiento G2", ylab="frecuencia absoluta",
xlim=c(0,20))
curve(dnorm(x, mean=mean(eduport$G2), sd=sd(eduport$G2)),
col="red", lwd=2, add=TRUE, lty=2)

# Scatter plots para G2 vs G3


# Ajustar modelo
model <- lm(G3 ~ G2, data=eduport)

plot(eduport$G2, eduport$G3, pch=16, col="black", main="Scatter Plot G3~G2",


xlab="rendimiento G2", ylab="rendimiento G3", xlim=c(0,20), ylim=c(0,20))
abline(coef(model), col="red", lwd=2, lty=2)

# -------------------------------------------------------------------

# Linea 3

# Boxplots para comparar las variables G3 según sexo


boxplot(eduport$G3 ~ eduport$sexo, col="red", border="black",
main= "Boxplots G3~ Sexo",
xlab="Sexo", ylab= "G3", lty = 1, whisklty = 2)

# Boxplots para comparar las variables G2 según sexo


boxplot(eduport$G2 ~ eduport$sexo, col="red", border="black",
main= "Boxplots G2~ Sexo",
xlab="Sexo", ylab= "G2", lty = 1, whisklty = 2)

hist(eduport$G3, probability=TRUE, col="grey", border="black",


main="Histograma de G3", xlab="rendimiento G3", ylab="frecuencia absoluta",
xlim=c(0,20))
curve(dnorm(x, mean=mean(eduport$G3), sd=sd(eduport$G3)),
col="red", lwd=2, add=TRUE, lty=2)
Doctorado en Educación
Universidad Metropolitana de Ciencias de la Educación

Curso: Introducción al uso de R para análisis cuantitativo


Profesor: Dr. Antonio Rivera Hutinel

2) Con el data frame eduport realice los siguientes análisis (8 pts):


a) Tome las variables binarias llamadas: apoyo.externo, apoyo.familiar,
clases.pagadas, actividad, guarderia, aspiración, internet y emparejado.
b) Genere una nueva matriz con estas variables, reemplazando los “si” por 1’s y
los “no” por 0`s (utilice la función ifelse)
c) Con esta nueva matriz de ceros y unos utilice la función dist, para crear una
matriz de distancia, utilizando el método “binary” (apropiado para esta matriz
binaria). Llame a este objeto dist con el nombre “binario”
d) Con las variables en escala Likert llamadas: familia, tiempo.libre, salidas,
alcohol.semanal, alcohol.festivo y salud, genere una matriz de distancia
(nuevamente con la función dist), pero utilice el método “manhattan”. Llame a
este objeto dist con el nombre “likert”
Doctorado en Educación
Universidad Metropolitana de Ciencias de la Educación

Curso: Introducción al uso de R para análisis cuantitativo


Profesor: Dr. Antonio Rivera Hutinel
e) Realice un test de mantel (con la función mantel) con las matrices binario y
likert y entregue los resultados. Responda: ¿Qué nivel de correlación tienen
estas dos matrices?. ¿Es significativa la relación?. Interprete los resultados.
f) Nuevamente con las matrices binario y likert, realice un test de Procrustes (con
la función protest) y entregue los resultados. Responda: ¿es el resultado del
test de Procrustes coherente con el de mantel? Justifique con los estadísticos
su respuesta
g) Grafique con análisis de escalamiento métrico multidimensional (con la función
cmdscale) la distribución de los estudiantes en base a la matriz de distancia
llamada binario. Considere un espacio de dos dimensiones (k=2). Responda:
¿se pueden observar grupos de puntos separados entre si?¿cuantos de estos
grupos logra apreciar?
h) Grafique un dendrograma con la matriz de distancia likert, utilizando las
funciones hclust y plot.

Desarrollo

# Selección de las variables binarias:


> # apoyo.externo, apoyo.familiar, clases.pagadas,
> # actividad, guarderia, aspiración, internet y emparejado.
>
>
> # Paso 1: creación de nueva matriz
> eduport_matriz <- eduport[, c("apoyo.externo", "apoyo.familiar", "clases.pagadas",
"actividad", "guarderia", "aspiracion", "internet", "emparejado")]
> summary(eduport_matriz)
apoyo.externo apoyo.familiar clases.pagadas actividad guarderia aspiracion
no:673 no:284 no:595 no:388 no:146 no: 58
si: 92 si:481 si:170 si:377 si:619 si:707
internet emparejado
no:155 no:510
si:610 si:255
>
> # Paso 2: Reemplazo de los valores por 1 y 0 (matriz binaria)
>
> matriz_binaria <- lapply(eduport_matriz, function(x) ifelse(x == "si", 1, 0))
> summary(matriz_binaria)
Length Class Mode
apoyo.externo 765 -none- numeric
apoyo.familiar 765 -none- numeric
clases.pagadas 765 -none- numeric
actividad 765 -none- numeric
guarderia 765 -none- numeric
aspiracion 765 -none- numeric
internet 765 -none- numeric
emparejado 765 -none- numeric
Doctorado en Educación
Universidad Metropolitana de Ciencias de la Educación

Curso: Introducción al uso de R para análisis cuantitativo


Profesor: Dr. Antonio Rivera Hutinel
>
> # Paso 3: creación matriz de distancia, con método "binary". Objeto llamado "binario"
>
> class(matriz_binaria) #verificar si es data frame
[1] "list"

> matriz_binaria<-as.data.frame(matriz_binaria) #transformar a data frame


> binario<- dist(matriz_binaria, method = "binary") # creación matriz de distancia
> summary(binario)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.0000 0.3333 0.5000 0.4765 0.6000 1.0000
>
> # Paso 4: Nueva Matriz de distancia con variables tipo likert
>
> eduport_likert <- eduport[, c("familia", "tiempo.libre", "salidas", "alcohol.semanal",
"alcohol.festivo", "salud")]
> eduport_likert<-as.data.frame(eduport_likert)
> class(eduport_likert)
[1] "data.frame"
> summary(eduport_likert)
familia tiempo.libre salidas alcohol.semanal alcohol.festivo
Min. :1.000 Min. :1.000 Min. :1.00 Min. :1.000 Min. :1.000
1st Qu.:4.000 1st Qu.:3.000 1st Qu.:2.00 1st Qu.:1.000 1st Qu.:1.000
Median :4.000 Median :3.000 Median :3.00 Median :1.000 Median :2.000
Mean :3.965 Mean :3.193 Mean :3.18 Mean :1.473 Mean :2.286
3rd Qu.:5.000 3rd Qu.:4.000 3rd Qu.:4.00 3rd Qu.:2.000 3rd Qu.:3.000
Max. :5.000 Max. :5.000 Max. :5.00
Max. :5.000 Max. :5.000
salud
Min. :1.000
1st Qu.:2.000
Median :4.000
Mean :3.522
3rd Qu.:5.000
Max. :5.000
> likert<- dist(eduport_likert, method = "manhattan")
> plot(likert)

>
> # Paso 5: Test de Mantel
>
> library(vegan)
Loading required package: permute
Loading required package: lattice
This is vegan 2.6-4
Doctorado en Educación
Universidad Metropolitana de Ciencias de la Educación

Curso: Introducción al uso de R para análisis cuantitativo


Profesor: Dr. Antonio Rivera Hutinel
> test_mantel <- mantel(binario, likert)
> print(test_mantel)

Mantel statistic based on Pearson's product-moment correlation

Call:
mantel(xdis = binario, ydis = likert)

Mantel statistic r: 0.05578


Significance: 0.001

Upper quantiles of permutations (null model):


90% 95% 97.5% 99%
0.0209 0.0291 0.0333 0.0383
Permutation: free
Number of permutations: 999

> # Pregunta 1: ¿Qué nivel de correlación tienen estas dos matrices?


> # Correlación de Pearson = 0.05578 (Correlación leve entre ambas matrices)
>
> # Pregunta 2: ¿Es significativa la relación?
> # Si, es significativa. p < 0,05 (0,001)
> # Interpretación:
> # el test de Mantel sugiere que hay una correlación significativa, aunque leve,
> # entre las matrices de distancia binario y likert. Esto indica que hay alguna
> # relación entre las dos matrices, aunque esta sea débil.
>
> test_procrustes <- protest(binario, likert)
> test_procrustes

Call:
protest(X = binario, Y = likert)

Procrustes Sum of Squares (m12 squared): 0.9876


Correlation in a symmetric Procrustes rotation: 0.1112
Significance: 0.002

Permutation: free
Number of permutations: 999

pregunta 1: ¿Es el resultado del test de Procrustes coherente con el de Mantel?


> # En base a los resultados del test de Procrustes, indica un valor
> # Procrustes Sum of Squares (m12 squared): 0.9876
> # esto indica que el valor es cercano a 1, por lo que las matrices son diferentes.
> # Considerando un valor de correlación de simetria = 0.1112 , sugiere que
> # las matrices binario y likert no son muy similares en terminos estructurales,
Doctorado en Educación
Universidad Metropolitana de Ciencias de la Educación

Curso: Introducción al uso de R para análisis cuantitativo


Profesor: Dr. Antonio Rivera Hutinel
> # lo que guarda relación con la relación débil manifestada en el test de Mantel.
> # Con una nivel de significancia menor a 0,05 (0,002), se rechaza hipótesis nula
> # existe una diferencia significativa entre las matrices.

>
> # Paso 7: Grafico Escalamiento multidimensional
(CMDscale)
>
> mds_result <- cmdscale(binario, k = 2)
> plot(mds_result, xlab = "Dimensión 1", ylab =
"Dimensión 2", main = "Distribución estudiantes en base
matriz binaria", col="Black", pch=19)
arrows(-0.6, 0,1, 0,0, 0,0,lwd= 3, col= "red")
>

> # Pregunta 1: ¿Se pueden observar grupos de puntos


separados entre sí?
> # Si, es posible observar grupos de puntos separados entre sí.
> # Pregunta 2: ¿Cuántos de estos grupos logra apreciar?
> # Se diferencian 2 grupos principales, uno en la parte superior y otro en la inferior del
> # gráfico. Adicionalmente, hay bastante dispersión de los datos en estos grupos.

8: Dendograma matriz Likert


>
> resultado_hclust <- hclust(likert)
> plot(resultado_hclust, main = "Dendrograma
para matriz likert", sub = "likert", xlab = "")
> plot(as.dendrogram(resultado_hclust),
main= "Dendrograma Likert")
> rect.hclust(resultado_hclust, k = 4,
border=1:4)

# Se plantean diferentes formas de


presentación del gráfico.

library(factoextra)

fviz_cluster(object = list(data=likert,
cluster=cutree(resultado_hclust, k=4)),
ellipse.type = "convex", repel =
TRUE, show.clust.cent = FALSE,
labelsize = 8) +
labs(title = "Hierarchical clustering + Proyección
PCA",
subtitle = "Distancia euclídea, Lincage complete,
K=4") +
Doctorado en Educación
Universidad Metropolitana de Ciencias de la Educación

Curso: Introducción al uso de R para análisis cuantitativo


Profesor: Dr. Antonio Rivera Hutinel
theme_bw() +
theme(legend.position = "bottom").

Circ = fviz_dend(resultado_hclust, cex = 0.8, lwd = 0.8, k = 4,


rect = TRUE,
k_colors = "jco",
rect_border = "jco",
rect_fill = TRUE,
type = "circular", guides=none,
main="Dendograma Circular")

Circ + ggtitle("Dendograma Circular")

fviz_dend(x = resultado_hclust, cex = 0.8, lwd = 0.8, k = 4,


k_colors = c("jco"),
rect = TRUE,
rect_border = "jco",
rect_fill = TRUE)
Doctorado en Educación
Universidad Metropolitana de Ciencias de la Educación

Curso: Introducción al uso de R para análisis cuantitativo


Profesor: Dr. Antonio Rivera Hutinel
ANEXO: Script

# PARTE 1

# Configuramos la ventana de gráficos


par(mfrow=c(3,3))

# definimos organización de gráficos por lineas


# Linea 1: hist G1, scatter plot g2 y g3
# Linea 2: Boxplot G1, hist G2, scatter plot g2-g3
# Linea 3: Box Plot G3, Box plot G2, hist G3

# Linea 1
# Histogramas para G1

hist(eduport$G1, probability=TRUE, col="grey", border="black",


main="Histograma de G1", xlab="rendimiento G1", ylab="frecuencia absoluta",
xlim=c(0,20))
curve(dnorm(x, mean=mean(eduport$G1), sd=sd(eduport$G1)),
col="red", lwd=2, add=TRUE, lty=2)

# Scatter plots para G1 vs G2

# Ajustar modelo
model <- lm(G2 ~ G1, data=eduport)

plot(eduport$G2, eduport$G1, pch=16, col="black", main="Scatter Plot G2~G1",


xlab="rendimiento G2", ylab="rendimiento G1", xlim=c(0,20), ylim=c(0,20))
abline(coef(model), col="red", lwd=2, lty=2)

# Scatter plots para G1 vs G3


# Ajustar modelo
model <- lm(G3 ~ G1, data=eduport)

plot(eduport$G1, eduport$G3, pch=16, col="black", main="Scatter Plot G3~G1",


xlab="rendimiento G3", ylab="rendimiento G1", xlim=c(0,20), ylim=c(0,20))
abline(coef(model), col="red", lwd=2, lty=2)

# ------------------------------------------------------------------

# Linea 2

# Boxplots para comparar las variables G1 según sexo


Doctorado en Educación
Universidad Metropolitana de Ciencias de la Educación

Curso: Introducción al uso de R para análisis cuantitativo


Profesor: Dr. Antonio Rivera Hutinel
boxplot(eduport$G1 ~ eduport$sexo, col="red", border="black",
main= "Boxplots G1~ Sexo",
xlab="Sexo", ylab= "G1", lty = 1, whisklty = 2)

# Histograma para G2
hist(eduport$G2, probability=TRUE, col="grey", border="black",
main="Histograma de G2", xlab="rendimiento G2", ylab="frecuencia absoluta",
xlim=c(0,20))
curve(dnorm(x, mean=mean(eduport$G2), sd=sd(eduport$G2)),
col="red", lwd=2, add=TRUE, lty=2)

# Scatter plots para G2 vs G3


# Ajustar modelo
model <- lm(G3 ~ G2, data=eduport)

plot(eduport$G2, eduport$G3, pch=16, col="black", main="Scatter Plot G3~G2",


xlab="rendimiento G2", ylab="rendimiento G3", xlim=c(0,20), ylim=c(0,20))
abline(coef(model), col="red", lwd=2, lty=2)

# -------------------------------------------------------------------

# Linea 3

# Boxplots para comparar las variables G3 según sexo


boxplot(eduport$G3 ~ eduport$sexo, col="red", border="black",
main= "Boxplots G3~ Sexo",
xlab="Sexo", ylab= "G3", lty = 1, whisklty = 2)

# Boxplots para comparar las variables G2 según sexo


boxplot(eduport$G2 ~ eduport$sexo, col="red", border="black",
main= "Boxplots G2~ Sexo",
xlab="Sexo", ylab= "G2", lty = 1, whisklty = 2)

hist(eduport$G3, probability=TRUE, col="grey", border="black",


main="Histograma de G3", xlab="rendimiento G3", ylab="frecuencia absoluta",
xlim=c(0,20))
curve(dnorm(x, mean=mean(eduport$G3), sd=sd(eduport$G3)),
col="red", lwd=2, add=TRUE, lty=2)
Doctorado en Educación
Universidad Metropolitana de Ciencias de la Educación

Curso: Introducción al uso de R para análisis cuantitativo


Profesor: Dr. Antonio Rivera Hutinel

---------------------------------------------------------------------------------------------------------------
# PARTE 2

# Selección de las variables binarias:


# apoyo.externo, apoyo.familiar, clases.pagadas,
# actividad, guarderia, aspiración, internet y emparejado.

# Paso 1: creación de nueva matriz


eduport_matriz <- eduport[, c("apoyo.externo", "apoyo.familiar", "clases.pagadas",
"actividad", "guarderia", "aspiracion", "internet", "emparejado")]
summary(eduport_matriz)

# Paso 2: Reemplazo de los valores por 1 y 0 (matriz binaria)

matriz_binaria <- lapply(eduport_matriz, function(x) ifelse(x == "si", 1, 0))


summary(matriz_binaria)

# Paso 3: creación matriz de distancia, con método "binary". Objeto llamado "binario"

class(matriz_binaria) #verificar si es data frame


matriz_binaria<-as.data.frame(matriz_binaria) #transformar a data frame
binario<- dist(matriz_binaria, method = "binary") # creación matriz de distancia
summary(binario)

# Paso 4: Nueva Matriz de distancia con variables tipo likert

eduport_likert <- eduport[, c("familia", "tiempo.libre", "salidas", "alcohol.semanal",


"alcohol.festivo", "salud")]
eduport_likert<-as.data.frame(eduport_likert)
class(eduport_likert)
summary(eduport_likert)
likert<- dist(eduport_likert, method = "manhattan")
plot(likert)

# Paso 5: Test de Mantel

library(vegan)
test_mantel <- mantel(binario, likert)
print(test_mantel)

# Pregunta 1: ¿Qué nivel de correlación tienen estas dos matrices?


# Correlación de Pearson = 0.05578 (Correlación leve entre ambas matrices)
Doctorado en Educación
Universidad Metropolitana de Ciencias de la Educación

Curso: Introducción al uso de R para análisis cuantitativo


Profesor: Dr. Antonio Rivera Hutinel
# Pregunta 2: ¿Es significativa la relación?
# Si, es significativa. p < 0,05 (0,001)
# Interpretación:
# el test de Mantel sugiere que hay una correlación significativa, aunque leve,
# entre las matrices de distancia binario y likert. Esto indica que hay alguna
# relación entre las dos matrices, aunque esta sea débil.

# Paso 6: Test de Procrustes

procrustes(binario, likert)
test_procrustes <- protest(binario, likert)
print(test_procustes)

# Pregunta 1: ¿Es el resultado del test de Procrustes coherente con el de Mantel?


# En base a los resultados del test de Procrustes, indica un valor
# Procrustes Sum of Squares (m12 squared): 0.9876
# esto indica que el valor es cercano a 1, por lo que las matrices son diferentes.
# Considerando un valor de correlación de simetria = 0.1112 , sugiere que
# las matrices binario y likert no son muy similares en terminos estructurales,
# lo que guarda relación con la relación débil manifestada en el test de Mantel.
# Con una nivel de significancia menor a 0,05 (0,002), se rechaza hipótesis nula
# existe una diferencia significativa entre las matrices.

# Paso 7: Grafico Escalamiento multidimensional (CMDscale)

mds_result <- cmdscale(binario, k = 2)


plot(mds_result, xlab = "Dimensión 1", ylab = "Dimensión 2", main = "Distribución
estudiantes en base matriz binaria", col="Black", pch=19)
arrows(-0.6, 0,1, 0,0, 0,0,lwd= 3, col= "red")

# Pregunta 1: ¿Se pueden observar grupos de puntos separados entre sí?


# Si, es posibile observar grupos de puntos separados entre sí.
# Pregunta 2: ¿Cuántos de estos grupos logra apreciar?
# Se diferencian 2 grupos principales, uno en la parte superior y otro en la inferior del
# gráfico. Adicionalmente, hay bastante dispersión de los datos en estos grupos.

# Paso 8: Dendograma matriz Likert

resultado_hclust <- hclust(likert)


plot(resultado_hclust, main = "Dendrograma para matriz likert", sub = "", xlab = "")

library(factoextra)

fviz_cluster(object = list(data=likert, cluster=cutree(resultado_hclust, k=4)),


ellipse.type = "convex", repel = TRUE, show.clust.cent = FALSE,
Doctorado en Educación
Universidad Metropolitana de Ciencias de la Educación

Curso: Introducción al uso de R para análisis cuantitativo


Profesor: Dr. Antonio Rivera Hutinel
labelsize = 8) +
labs(title = "Dendograma",
subtitle = "Prueba 1") +
theme_bw() +
theme(legend.position = "bottom")

Circ = fviz_dend(resultado_hclust, cex = 0.8, lwd = 0.7, k = 4,


rect = TRUE,
k_colors = "jco",
rect_border = "jco",
rect_fill = TRUE,
type = "circular", guides = "none", main = "Dendograma Cicular")
Circ + ggtitle("Dendograma Circular)

fviz_dend(x = resultado_hclust, cex = 0.8, lwd = 0.8, k = 4,


k_colors = c("jco"),
rect = TRUE,
rect_border = "jco",
rect_fill = TRUE)

También podría gustarte