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.
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(modeest)
library(readr)
library(ggplot2)
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?
¿Qué tipo de distribución es el conjunto de datos alumnos?
¿Qué significa los estadísticos rango, máximo y mínimo de la variable Promedio y como se interpretan?
Seleccione tres carreras y determine media, mediana y moda y haga sus comparaciones.
¿Cuál carrera tiene mas alumnos?
¿Cuál carrera de las tres seleccionadas tiene la media conforme a la variable Promedio más alto?
Fin del CASO
La media de un conjunto de datos se encuentra al sumar todos los números en el conjunto de datos y luego al dividir entre el número de valores en el conjunto. La mediana es el valor medio cuando un conjunto de datos se ordena de menor a mayor. La moda es el número que se presenta con más frecuencia en un conjunto de datos.
Solo la media es parecida, las otras dos son diferentes
son formas de ver datos especificos depende que necesitemos saber
La carrera de INDUSTRIAL
La carrera de INDUSTRIAL
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.