Determinar medidas estadísticas de localización media, mediana, moda, máximos mínimos y rango de un conjunto de datos usando funciones de R.
El proceso de este caso permite identificar las medidas de localización de media, mediana, moda, máximos, mínimos, rango y el significado de las mismas para interpretar si una distribución de datos es simétrica o asimétrica.
Primero se presenta como determinar los estadísticos manualmente por medio de programación y luego se identifica como determinar estos mismos valores estadísticos de manera más sencilla por medio de funciones que existen en los paquete base de R para media y mediana y funciones de librerías instaladas para la moda.
Finalmente se presenta el desarrollo de un caso en donde se cargan datos con valores de calificaciones de alumnos de una carrera de una Institución educativa, se utiliza sólo la variable promedio para encontrar los estadísticos media, median y moda.
En el proceso, los datos se visualizan por medio de la librería ggplot previamente instalada, el gráfico que se muestra es el histograma con lineas verticales que representan la media, mediana y moda.
Finalmente se hace una interpretación del caso identificando la simetría o asimetría del mismo.
Pendiente
Cargar librerias de distintos paquetes que se van a usar:
library(modeest)
library(ggplot2)
El caso a desarrollar se trata de analizar un conjunto de datos relacionados con el promedio de los alumnos de una Institución educativa.
Los datos son descargados de github en en enlace: alumnos y se solicita encontrar estadísticos relacionados con la variable promedio contenidas en el conjunto de datos.
Se requiere cargar la librería library(readr) previamente instalada con install.packages(“readr”). Esta librería permite cargar datos de archivos textos separados por coma o archivos del tipo csv.
library(readr)
Se cargan los datos con la función readr() indicando la ruta de la dirección url en donde están listos para descargarse. Las funciones head y tail() significan que ponga los primeros diez y últimos diez registros del total de los datos.
datos <- read.csv(file = "https://raw.githubusercontent.com/rpizarrog/probabilidad-y-estad-stica/master/datos/promedios%20alumnos/ALUMNOS%20EJ2021.csv", sep = ",",
header = TRUE)
head(datos, 10)
## NoControl Alumno Semestre Cr.Aprobados Cr.Cursando Promedio Carrera
## 1 1 1 12 207 19 79.84 SISTEMAS
## 2 2 2 13 226 9 82.55 SISTEMAS
## 3 3 3 10 235 10 95.16 SISTEMAS
## 4 4 4 13 231 14 79.32 SISTEMAS
## 5 5 5 10 235 10 92.67 SISTEMAS
## 6 6 6 10 235 10 91.25 SISTEMAS
## 7 7 7 13 231 4 82.46 SISTEMAS
## 8 8 8 11 197 23 83.72 SISTEMAS
## 9 9 9 11 235 10 85.37 SISTEMAS
## 10 10 10 10 231 4 85.12 SISTEMAS
tail(datos, 10)
## NoControl Alumno Semestre Cr.Aprobados Cr.Cursando Promedio Carrera
## 6033 746 746 4 50 24 81.27 ARQUITECTURA
## 6034 747 747 2 26 26 92.00 ARQUITECTURA
## 6035 748 748 1 NA 26 0.00 ARQUITECTURA
## 6036 749 749 9 223 12 87.59 ARQUITECTURA
## 6037 750 750 9 170 20 81.16 ARQUITECTURA
## 6038 751 751 7 103 19 84.43 ARQUITECTURA
## 6039 752 752 4 76 34 92.47 ARQUITECTURA
## 6040 753 753 4 84 26 89.74 ARQUITECTURA
## 6041 754 754 3 52 28 87.75 ARQUITECTURA
## 6042 755 755 2 18 22 86.50 ARQUITECTURA
Antes de encontrar los estadísticos de media, mediana y moda será necesario depurar el conjunto de datos. Se eliminarán de los datos aquellos alumnos que no tienen promedio, es decir dejar solo los registros que que \(promedio>0\)
Por medio de la función subset() vista anteriormente, se eliminan o filtran esos registros y luego se determinan los estadísticos.
datos <- subset(datos, Promedio > 0) significa quitar los alumnos que no tienen promedio aún y que para efectos de los estadísticos que se quiere no son necesarios.
datos.alumnos <- subset(datos, Promedio > 0)
n <- nrow(datos.alumnos)
n
## [1] 5535
Ahora el conjunto de datos tiene una cantidad de 5535 observaciones.
La función summary(datos.alumnos[3:7]) significa que solo muestre las columnas de la 3 a la 7 del conjunto de datos de alumnos.
datos.alumnos$Carrera <- factor(datos.alumnos$Carrera)
summary(datos.alumnos[3:7])
## Semestre Cr.Aprobados Cr.Cursando Promedio
## Min. : 2.000 Min. : 4 Min. : 3.0 Min. : 70.00
## 1st Qu.: 3.000 1st Qu.: 53 1st Qu.:23.0 1st Qu.: 83.25
## Median : 6.000 Median :109 Median :28.0 Median : 86.36
## Mean : 5.826 Mean :115 Mean :26.1 Mean : 86.60
## 3rd Qu.: 8.000 3rd Qu.:172 3rd Qu.:30.0 3rd Qu.: 89.83
## Max. :17.000 Max. :264 Max. :42.0 Max. :100.00
##
## Carrera
## INDUSTRIAL : 653
## ARQUITECTURA : 633
## CIVIL : 594
## GESTION : 518
## QUIMICA : 515
## ADMINISTRACION: 458
## (Other) :2164
media <- round(mean(datos.alumnos$Promedio),2)
mediana <- round(median(datos.alumnos$Promedio),2)
moda <- round(mfv(datos.alumnos$Promedio), 2)
media
## [1] 86.6
mediana
## [1] 86.36
moda
## [1] 86
titulo <- "Histograma de los Datos Alumnos"
subtitulo <- paste("Media=",media, " Mediana = ",mediana, " Moda=",moda)
ggplot(data = datos.alumnos, mapping = aes(x=Promedio)) +
geom_histogram(bins=30) +
ggtitle(titulo, subtitle = subtitulo) +
xlab('Valores') + ylab('Frecuencia') +
geom_vline(aes(xintercept = media,
color = "media"),
linetype = "dashed",
size = 1) +
geom_vline(aes(xintercept = mediana,
color = "mediana"),
linetype = "dashed",
size = 1) +
geom_vline(aes(xintercept = moda,
color = "moda"),
linetype = "dashed",
size = 1)
ggplot(datos.alumnos) +
geom_density(aes(x = Promedio), fill = 'steelblue') +
xlab("Promedios") +
ylab("Frecuencia") +
ggtitle("Distribución de la variable Promedio de Datos Alumnos (Densidad)", subtitle = subtitulo) +
theme_minimal() +
geom_vline(aes(xintercept = media,
color = "media"),
linetype = "dashed",
size = 1) +
geom_vline(aes(xintercept = mediana,
color = "mediana"),
linetype = "dashed",
size = 1) +
geom_vline(aes(xintercept = moda,
color = "moda"),
linetype = "dashed",
size = 1)
Con una variable llamada carrera se selecciona o filtran los datos de los alumnos que pertenecen a dicha carrera del conjunto e datos.alumnos; se utiliza nuevamente la función subset() que permite crear filtros por medio de una expresión que normalmente compara una variable con un valor.
Luego se determinan las medidas de localización media , mediana y moda de ese subconjunto de datos llamado carrera.
Se vuelven a utilizar nuevamente las variables media, mediana y moda sobre escribiendo los valores anteriores.
El proceso se repite para cada carrera incluyendo la visualización del histograma.
SISTEMAS <- subset(datos.alumnos, Carrera == 'SISTEMAS')
media <- round(mean(SISTEMAS$Promedio),2)
mediana <- round(median(SISTEMAS$Promedio),2)
moda <- round(mfv(SISTEMAS$Promedio), 2)
media
## [1] 87.16
mediana
## [1] 86.88
moda
## [1] 89.67
titulo <- "Histograma de los Alumnos SISTEMAS"
subtitulo <- paste("Media=",media, " Mediana = ",mediana, " Moda=",moda)
ggplot(data = SISTEMAS, mapping = aes(x=Promedio)) +
geom_histogram(bins=30) +
ggtitle(titulo, subtitle = subtitulo) +
xlab('Valores') + ylab('Frecuencia') +
geom_vline(aes(xintercept = media,
color = "media"),
linetype = "dashed",
size = 1) +
geom_vline(aes(xintercept = mediana,
color = "mediana"),
linetype = "dashed",
size = 1) +
geom_vline(aes(xintercept = moda,
color = "moda"),
linetype = "dashed",
size = 1)
TIC <- subset(datos.alumnos, Carrera == 'TIC')
media <- round(mean(TIC$Promedio),2)
mediana <- round(median(TIC$Promedio),2)
moda <- round(mfv(TIC$Promedio), 2)
media
## [1] 85.44
mediana
## [1] 85.03
moda
## [1] 78.47 86.00 89.17
Los datos de los alumnos de TIC tienen son una distribución multimodal, específicamente, tres modas. Se toma en cuenta sólo el valor de la primer posición [1] en la gráfica.
titulo <- "Histograma de los Alumnos TIC"
subtitulo <- paste("Media=",media, " Mediana = ",mediana, " Moda=",moda)
ggplot(data = TIC, mapping = aes(x=Promedio)) +
geom_histogram(bins=30) +
ggtitle(titulo, subtitle = subtitulo) +
xlab('Valores') + ylab('Frecuencia') +
geom_vline(aes(xintercept = media,
color = "media"),
linetype = "dashed",
size = 1) +
geom_vline(aes(xintercept = mediana,
color = "mediana"),
linetype = "dashed",
size = 1) +
geom_vline(aes(xintercept = moda[1],
color = "moda"),
linetype = "dashed",
size = 1)
ARQUITECTURA <- subset(datos.alumnos, Carrera == 'ARQUITECTURA')
media <- round(mean(ARQUITECTURA$Promedio),2)
mediana <- round(median(ARQUITECTURA$Promedio),2)
moda <- round(mfv(ARQUITECTURA$Promedio), 2)
media
## [1] 86.98
mediana
## [1] 87.1
moda
## [1] 86.00 89.17
Los datos de los alumnos de ARQUITECTURA tienen son una distribución bimodal, es decir, dos modas. Se toma en cuenta sólo el valor de la primer posición [1] en la gráfica.
titulo <- "Histograma de los Alumnos ARQUITECTURA"
subtitulo <- paste("Media=",media, " Mediana = ",mediana, " Moda=",moda)
ggplot(data = ARQUITECTURA, mapping = aes(x=Promedio)) +
geom_histogram(bins=30) +
ggtitle(titulo, subtitle = subtitulo) +
xlab('Valores') + ylab('Frecuencia') +
geom_vline(aes(xintercept = media,
color = "media"),
linetype = "dashed",
size = 1) +
geom_vline(aes(xintercept = mediana,
color = "mediana"),
linetype = "dashed",
size = 1) +
geom_vline(aes(xintercept = moda[1],
color = "moda"),
linetype = "dashed",
size = 1)
Las lineas del atributo linetype se puede elegir de entre varias alternaticas: “blank,” “solid,” “dashed,” “dotted,” “dotdash,” “longdash,” “twodash”.
tres.carreras <- subset(datos.alumnos, Carrera %in% c('SISTEMAS', 'TIC', 'ARQUITECTURA'))
ggplot(data=tres.carreras,aes(x = Promedio,fill=Carrera)) +
geom_histogram(bins=30) + # se dibuja el histograma
ggtitle("Histograma de tres carreras", subtitle = "Medias") +
xlab('Valores de medias en Promedio') + ylab('Frecuencia') +
geom_vline(aes(xintercept = mean(SISTEMAS$Promedio),
color="SISTEMAS"),
linetype = "solid",
size = 1) +
geom_vline(aes(xintercept = mean(TIC$Promedio),
color="TIC"),
linetype = "solid",
size = 1) +
geom_vline(aes(xintercept = mean(ARQUITECTURA$Promedio),
color="ARQUITECTURA"),
linetype = "solid",
size = 1)
La creación de facetas se utiliza cuando queremos dividir una visualización en particular por los valores de otra variable. Esto creará múltiples copias del mismo tipo de gráfico con ejes xey coincidentes, pero cuyo contenido será diferente (Ismay and Kim 2021).
El atributo facet_wrap(~ Carrera) permite que se visualice el mismo histograma pero con carreras diferentes.
El símbolo virulilla o tilde en R algunas significa que lo que está a la derecha está en función de … o sea ~ Carrera significa que las gráficas diferentes están en función de cada una de las Carreras.
ggplot(data = datos.alumnos, mapping = aes(x = Promedio, fill=Carrera)) +
geom_histogram(bins = 30, color = "white") +
facet_wrap(~ Carrera, nrow = 5)
¿Qué significa los estadísticos descriptivos media, mediana y moda de un conjunto de datos?
¿Para el conjunto de datos alumnos en su variable Promedio, son los valores iguales de la media, mediana y moda ?
No, aunque sean similares, la media mediana y moda son muy diferentes y pueden llegar a tener valores muy diferenciados. La Media es el promedio de siempre, es decir, la suma de los datos dividida entre el número de datos, que en este caso tiene un valor de 86.6 . La Mediana es como el centro de los datos (solo se puede obtener si ordenas los datos en orden ascendente), una vez ordenados se hacen procedimientos dependiendo si el número de datos es par o impar, si es impar se usa esta formula \(x_{(n+1)/2}\), si es par es usa la siguiente formula \(\frac{1}{2}\cdot(x_{n/2}+x_{(n/2)+1})\), que en este caso tiene un valor de 86.36. La moda se entiende sencillamente como el número que mas se repite en toda la muestra, que en este caso tiene un valor de 86.
¿Qué tipo de distribución es el conjunto de datos alumnos?
El conjunto de datos alumnos es del tipo de distribución asimétrica sesgada a la derecha. Aunque la diferencia entre media, mediana y moda no sea mucha, se considera asimétrica.
¿Qué significa los estadísticos rango, máximo y mínimo de la variable Promedio y como se interpretan?
En estadística, el rango es desde que número a que número va el conjunto de datos, es decir, cual es el intervalo de tu conjunto. El máximo, como su nombre lo indica, es el número más alto del intervalo, o mejor dicho, su limite superior. El mínimo, como su nombre lo indica, es el número más bajo del intervalo, es decir, su limite inferior. En este caso, el rango va desde 70 hasta 100, el 70 es el mínimo y el 100 es el máximo, esto se puede saber con la función range.
¿Seleccione tres carreras y determine media, mediana y moda? y haga sus comparaciones.
SISTEMAS
Media
SISTEMAS <- subset(datos.alumnos, Carrera == 'SISTEMAS')
media <- round(mean(SISTEMAS$Promedio),2)
mediana <- round(median(SISTEMAS$Promedio),2)
moda <- round(mfv(SISTEMAS$Promedio), 2)
media
## [1] 87.16
Mediana
mediana
## [1] 86.88
Moda
moda
## [1] 89.67
INDUSTRIAL
Media
INDUSTRIAL <- subset(datos.alumnos, Carrera == 'INDUSTRIAL')
media <- round(mean(INDUSTRIAL$Promedio),2)
mediana <- round(median(INDUSTRIAL$Promedio),2)
moda <- round(mfv(INDUSTRIAL$Promedio), 2)
media
## [1] 85.92
Mediana
mediana
## [1] 85.68
Moda
moda
## [1] 89.67
GESTION
Media
GESTION <- subset(datos.alumnos, Carrera == 'GESTION')
media <- round(mean(GESTION$Promedio),2)
mediana <- round(median(GESTION$Promedio),2)
moda <- round(mfv(GESTION$Promedio), 2)
media
## [1] 88.33
Mediana
mediana
## [1] 88.31
Moda
moda
## [1] 90.5
tres.carreras <- subset(datos.alumnos, Carrera %in% c('SISTEMAS', 'INDUSTRIAL', 'GESTION'))
ggplot(data=tres.carreras,aes(x = Promedio,fill=Carrera)) +
geom_histogram(bins=30) + # se dibuja el histograma
ggtitle("Histograma de tres carreras", subtitle = "Medias") +
xlab('Valores de medias en Promedio') + ylab('Frecuencia') +
geom_vline(aes(xintercept = mean(SISTEMAS$Promedio),
color="SISTEMAS"),
linetype = "solid",
size = 1) +
geom_vline(aes(xintercept = mean(INDUSTRIAL$Promedio),
color="INDSUTRIAL"),
linetype = "solid",
size = 1) +
geom_vline(aes(xintercept = mean(GESTION$Promedio),
color="GESTION"),
linetype = "solid",
size = 1)
¿Cuál carrera tiene mas alumnos?
La carrera que tiene más alumnos es la carrera de INDUSTRIAL con un total de 653 alumnos.
¿Cuál carrera de las tres seleccionadas tiene la media conforme a la variable Promedio más alto?
De las tres carreras que seleccioné, la que tiene una mayor media es la de gestión, con una media de 88.33.
Fin del CASO
Para el caso de las tres carreras seleccionadas SISTEMAS, TIC Y ARQUITECTURA en cuanto al valor de la media o el promedio de la variable Promedio, en la carrera de sistemas existe el valor más alto entre los tres valores medios de cada carrera. Las tres gráficas son distribuciones asíncronas con respecto a la variable Promedio.
Anderson, David R., Dennis J. Sweeney, and Thomas A. Williams. 2008. Estadística Para Administración y Economía. 10th ed. Australia • Brasil • Corea • España • Estados Unidos • Japón • México • Reino Unido • Singapur: Cengage Learning,.
Ismay, Chester, and Albert Kim. 2021. Statistical Inference via Data Science a ModernDive into r and the Tidyverse. Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. https://moderndive.netlify.app/index.html.
Lind, Douglas, William Marchal, and Samuel Wathen. 2015. Estadística Aplicada a Los Negocios y La Economía. Decimo Sexta. México, D.F.: McGraw-Hill.
Walpole, Ronald E., Raymond H. Myers, and Sharon L. Myers. 2012. Probabilidad y Estadística Para Ingeniería y Ciencias. Novena Edición. México: Pearson.