Atención médica: Para este primer ejercicio trabajaremos con la base de datos denominada Atencion . Esta base de datos contiene la información de 100 pacientes atendidos en cierto hospital, donde se registraron las diferentes variables.
data <- read.csv("Atencion.csv")
library(psych)
datos2 <- data[,c("E","DI")]
describe(datos2)
vars | n | mean | sd | median | trimmed | mad | min | max | range | skew | kurtosis | se | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
E | 1 | 100 | 68.64 | 17.52431 | 68.5 | 70.150 | 18.5325 | 24 | 94 | 70 | -0.6336948 | -0.081897 | 1.752431 |
DI | 2 | 100 | 13.31 | 10.03096 | 14.0 | 12.925 | 14.8260 | 1 | 30 | 29 | 0.2746804 | -1.435115 | 1.003096 |
En esta primera tabla de datos cuantitativos podemos observar
que la variables E (Edad) nos muestra que el promedio de edad de los
pacientes es de 68 años, la edad mínima fueron 24 años, mientras que la
máxima 94 años.Con la variable DI (día de ingreso respecto al 1 de enero
del año registrado) descubrimos que el promedio de días ingresados es 13
con una desviación estándar de 10 días y el mínimo de días es 1,
mientras que máximo es 30 días.
table(data$S)
h | m |
---|---|
48 | 52 |
table(data$C)
NO | SI |
---|---|
58 | 42 |
table(data$D)
1 | 2 | 3 | 4 |
---|---|---|---|
39 | 26 | 28 | 7 |
Por otro lado, podemos observar que en la variable S (Sexo) hay 48
hombres y 52 mujeres. Mientras que en C (sí o no se realizó una cirugía)
58 pacientes no se sometieron a cirugía y 42 sí. Además con la variable
D (tipo de tratamiento realizado) vemos que se realizaron 39
tratamientos de medicina interna, 26 de traumatología, 28 de urología y
7 de oftalmología.
datos3 <- data[, c("P1", "P2", "P3", "P4", "P5", "P6", "P7", "P8", "P9")]
Verificar que la matriz de correlaciones sea factorizable:
# Matriz de correlación
library(polycor)
##
## Attaching package: 'polycor'
## The following object is masked from 'package:psych':
##
## polyserial
R <- hetcor(datos3)$correlations
# Graficar la matriz de correlación usando ggcorrplot
library(ggcorrplot)
## Loading required package: ggplot2
##
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
##
## %+%, alpha
ggcorrplot(R,type="lower",hc.order = T)
En el gráfico podemos notar que la mayoría de los datos tienen un
correlación positiva. Hay bastantes valores con un correlaciones super
altas, así como P7 y P9. Mientras que valores como P1 y P9 tienen
correlaciones bajas.
# Prueba de esfericidad de Bartlett
cortest.bartlett(datos3)$p.value
## R was not square, finding R from data
## [1] 2.844082e-196
Dado que el p−value = 0, rechazamos la hipótesis nula y
concluimos que las variables efectivamente están correlacionadas entre
sí.
# Calcular el índice KMO
kmo <- KMO(R)
kmo
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = R)
## Overall MSA = 0.71
## MSA for each item =
## P1 P2 P3 P4 P5 P6 P7 P8 P9
## 0.62 0.81 0.67 0.62 0.69 0.82 0.67 0.83 0.73
El valor global 0.71 nos corrobora que con estas variables
podemos aplicar un EFA. Sin embargo, haremos un ejemplo eliminando la
varible P1 para observar qué pasa con los valores del MSA de cada item.
# Ejemplo de eliminar alguna variable
datos3E <- datos3[, -which(colnames(datos3) == "P1")]
# Calcular la matriz de correlación
R3 <- cor(datos3E)
cortest.bartlett(R3)
## $chisq
## [1] 734.7774
##
## $p.value
## [1] 1.030566e-136
##
## $df
## [1] 28
# Calcular el índice KMO
kmorE <- KMO(R3)
kmorE
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = R3)
## Overall MSA = 0.65
## MSA for each item =
## P2 P3 P4 P5 P6 P7 P8 P9
## 0.53 0.46 0.57 0.66 0.85 0.68 0.85 0.72
Como notamos en este intento, al eliminar la variable P1, que tenía una importancia de 0.62 en nuestro análisis, podemos notar que las demás valores y el MSA global se ven afectados por lo cual no se eliminará ninguna variable.
Es decir, como todas las variables tienen un valor aceptable, mayor
de 0.5, no eliminaremos ninguna.
Elegir un método para extraer los factores:
# Prueba de modelo (mínimos residuales) con tres factores
modelo <- fa(R, nfactors = 3, rotate = "none",
fm="minres")
# Comunalidades
c1 <- sort(modelo$communality,decreasing = T)
c1
## P1 P7 P3 P4 P2 P9 P5 P8
## 0.9866668 0.9768271 0.9639828 0.9548569 0.8754714 0.8735662 0.7904947 0.7659898
## P6
## 0.6328518
# Unicidades
u1 <- sort(modelo$uniquenesses,decreasing = T)
u1
## P6 P8 P5 P9 P2 P4 P3
## 0.36714825 0.23401024 0.20950530 0.12643382 0.12452863 0.04514305 0.03601724
## P7 P1
## 0.02317294 0.01333319
Dado que los datos son ordinales, utilizaremos el método de
mínimos residuales.
Podemos observar en cuanto a las comunalidades que las variables P1 (0.9867), P7 (0.9768) y P3 (0.9639) tienen valores altos de comunalidad, lo que indica que están fuertemente relacionadas con los factores identificados.
En cuanto a las unicidades, P6 (0.3671) tiene la unicidad más alta,
lo que indica que una porción considerable de su varianza no se
relaciona con los factores comunes.
Determinar el número de factores:
# Paralelo
fa.parallel(R,main=" ",ylab=" ")
## Parallel analysis suggests that the number of factors = 3 and the number of components = 3
Tomando en consideración la gráfica y la información utilizaremos tres factores.
Rotar los factores:
library(GPArotation)
##
## Attaching package: 'GPArotation'
## The following objects are masked from 'package:psych':
##
## equamax, varimin
rot<-c("Promax")
bi_mod<-function(tipo)
biplot.psych(fa(datos3,nfactors = 2,fm="minres",rotate = tipo),main = paste("Biplot con rotacion ",tipo),col=c("red","black"),pch=c(5,19),group = bfi[,"gender"])
sapply(rot,bi_mod)
## $Promax
## NULL
El biplot nos muestra nos grupos principales. Entre ellas las variables P4, P5, y P6 están altamente relacionadas entre sí y contribuyen más al factor MR2. Mientras que las variables P1, P2, P3, P7, P8, P9 están agrupadas en otro conjunto asociado con MR1.
Interpretación de los resultados:
# Modelo Promax
modelo_promax <- fa(R, nfactors = 3, rotate = "Promax")
fa.diagram(modelo_promax)
El análisis factorial nos muestra que todas las variables están altamente correlacionadas con los factores. Además que los factores se pueden identificar como:
MR1: Experiencia del paciente (P1: Estado de las habitaciones, P2: Comida, P3: Atención del personal no sanitario).
MR2: Atención del personal sanitario (P4: Atención del personal sanitario, P5: Atención del personal de enfermería, P6: Atención del personal médico).
MR3: Resolución y comunicación (P7: Información recibida, P8:
Solución del problema, P9: Valoración general).
Calificaciones estudiantiles: La base de datos para este segundo ejercicio se denomina Calificaciones. Esta base de datos contiene la información de 100 estudiantes de educación secundaria, donde se registraron diferentes variables.
data <- read.csv("Calificaciones.csv")
library(psych)
datos2 <- data[,c("Edad", "Grado")]
describe(datos2)
vars | n | mean | sd | median | trimmed | mad | min | max | range | skew | kurtosis | se | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Edad | 1 | 100 | 14.44 | 2.511871 | 15 | 14.5000 | 2.9652 | 10 | 18 | 8 | -0.1798535 | -1.261644 | 0.2511871 |
Grado | 2 | 100 | 8.99 | 1.982219 | 9 | 8.9875 | 2.9652 | 6 | 12 | 6 | -0.0864480 | -1.218697 | 0.1982219 |
Mediante la tabla descriptiva podemos observar que la edad
promedio es 14, con una ligera asimetría negativa, lo que sugiere que la
mayoría de las edades están en el rango inferior. Siendo 10 años la edad
mínima y 18 la máxima. El grado promedio es 9no, con una distribución
casi simétrica y una desviación estándar de 1.98. Siendo 6to grado el
mínimo y 12 el máximo.
datos3 <- data[, c("Naturales", "Sociales", "Matematicas", "Espanol", "Ingles", "Deportes", "Humanidades", "Etica")]
Verificar que la matriz de correlaciones sea factorizable:
# Matriz de correlación
library(polycor)
R <- hetcor(datos3)$correlations
# Graficar la matriz de correlación usando ggcorrplot
library(ggcorrplot)
ggcorrplot(R,type="lower",hc.order = T)
En el gráfico podemos notar que la mayoría de los datos tienen un
correlación negativa. Las variables Naturales e Inglés tiene una
correlación alta y positiva. Mientras que valores como Matemáticas e
Inglés tienen correlaciones bajas, bastantes cercanas a 0. Además dentro
de los valores que tienen correlaciones negativas está Humanidades y
Matemáticas.
# Prueba de esfericidad de Bartlett
cortest.bartlett(datos3)$p.value
## R was not square, finding R from data
## [1] 4.747964e-225
Dado que el p−value = 0, rechazamos la hipótesis nula y
concluimos que las variables efectivamente están correlacionadas entre
sí.
# Calcular el índice KMO
kmo <- KMO(R)
kmo
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = R)
## Overall MSA = 0.58
## MSA for each item =
## Naturales Sociales Matematicas Espanol Ingles Deportes
## 0.51 0.99 0.52 0.96 0.53 0.27
## Humanidades Etica
## 0.94 0.51
Notemos que hay variables que tienen un valor bajo para el
agrupamiento, así como la variable “Deportes”. Por lo cual eliminaremos
esta variable para observar el comportamiento, es decir, si los valores
aumentan.
# Ejemplo de eliminar alguna variable
datos3E <- datos3[, -which(colnames(datos3) == "Deportes")]
# Calcular la matriz de correlación
R3 <- cor(datos3E)
cortest.bartlett(R3)
## $chisq
## [1] 791.5942
##
## $p.value
## [1] 5.491495e-154
##
## $df
## [1] 21
# Calcular el índice KMO
kmorE <- KMO(R3)
kmorE
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = R3)
## Overall MSA = 0.63
## MSA for each item =
## Naturales Sociales Matematicas Espanol Ingles Humanidades
## 0.64 0.98 0.51 0.85 0.64 0.14
## Etica
## 0.51
En este intento, al eliminar la variable “Deportes”, que tenía
una importancia de 0.27 en nuestro análisis, podemos notar que el MSA
global aumenta. Sin embargo, otros valores como “Humanidades” se ven
afectados y baja a 0.14. Por lo cual no se eliminará ninguna variable,
dejando los valores originales. De este modo, conservamos el mayor
número de variables con valores al menos aceptables.
Elegir un método para extraer los factores:
# Prueba de modelo (mínimos residuales) con tres factores
modelo <- fa(R, nfactors = 3, rotate = "none",
fm="minres") # modelo mínimos residuales
# Comunalidades
c1 <- sort(modelo$communality,decreasing = T)
c1
## Naturales Etica Ingles Espanol Matematicas Deportes
## 0.9988049 0.9953006 0.9855021 0.9215440 0.9205274 0.9133414
## Humanidades Sociales
## 0.6110079 0.3577813
# Unicidades
u1 <- sort(modelo$uniquenesses,decreasing = T)
u1
## Sociales Humanidades Deportes Matematicas Espanol Ingles
## 0.642218684 0.388992098 0.086658631 0.079472618 0.078456047 0.014497854
## Etica Naturales
## 0.004699374 0.001195089
Dado que los datos son ordinales, utilizaremos el método de
mínimos residuales.
En cuanto a los resultados de las comunalidades, estas nos muestran que las variables Naturales, Ética e Inglés tienen comunalidades muy altas, lo que indica que una gran parte de su varianza es explicada por los factores identificados.
En términos de unicidades, Sociales y Humanidades presentan valores elevados, lo que nos muestra que estas variables son tienen un componente importante de varianza que no está capturado por los factores extraídos.
Determinar el número de factores:
# Paralelo
fa.parallel(R,main=" ",ylab=" ")
## Parallel analysis suggests that the number of factors = 3 and the number of components = 3
Tomando en consideración la gráfica y la información
utilizaremos tres factores.
Rotar los factores:
library(GPArotation)
rot<-c("varimax")
bi_mod<-function(tipo)
biplot.psych(fa(datos3,nfactors = 2,fm="minres",rotate = tipo),main = paste("Biplot con rotacion ",tipo),col=c("red","black"),pch=c(5,19),group = bfi[,"gender"])
sapply(rot,bi_mod)
## $varimax
## NULL
Utilizando la rotación oblicua, el biplot nos muestra tres
agrupaciones principales. Entre ellas las variables Matemáticas y Ética
están altamente relacionadas entre sí. Mientras que las variables
Naturales, Inglés, Español y Sociales se relacionan en un grupo aparte
entre sí. Por último Deportes y Humanidades se relacionan bastante
fuerte entre sí. Estas relaciones nos podrían demostrar los posibles
patrones en el desempeño de los estudiantes según las clases.
Interpretación de los resultados:
modelo_varimax <- fa(R,nfactors = 3,rotate = "varimax",fa="minres")
fa.diagram(modelo_varimax)
En este análisis factorial podemos confirmar lo mencionado en el
biplot anterior. Existen tres factores principales muy bien relacionados
con las variables asociadas. Como podemos observar 5 variables tienen
una carga factorial de 1. Sin embargo, Sociales es la clase con menos
carga factorial respecto a MR1.
Los factores se pueden identificar como:
MR1: Inglés, Naturales, Español, Sociales.
MR2: Ética, Matemáticas.
MR3: Deporte, Humanidades