Identificar, describir e interpretar medidas de variabilidad en un conjunto de datos.
El caso se relaciona con identificar medidas de variabilidad como la varianza, la desviación estándar y el coeficiente de variación.
Primero se utilizan datos del libro del autor (Anderson, Sweeney, and Williams 2008a) como ejemplo para calcular la varianza, y a partir de ahí, se determina la desviación y finalmente el coeficiente de variación.
Segundo con datos de alumnos se calculan las mismas medias de dispersión, luego, se selecciona tres carreras y se determina cuál de los tres conjuntos de datos tiene mayor o menor dispersión conforme al valor % del coeficiente de variación.
Pendiente.
Cargas las librerías necesarias para los ejercicio de todo el caso.
library(readr)
library(ggplot2)
El desarrollo del caso inicia con un ejercicio obtenido del libro de (Anderson, Sweeney, and Williams 2008a). El segundo ejercicio serán los datos de alumnos con la variable Promedio ya conocidos en casos anteriores.
Son datos de sueldos en dólares de trabajadores de una empresa.
datos <- c(3450,3550, 3650, 3480, 3355, 3310, 3490, 3730, 3540, 3925, 3520, 3480 )
datos <- data.frame(xi=datos)
datos <- c(3450,3550, 3650, 3480, 3355, 3310, 3490, 3730, 3540, 3925, 3520, 3480 )
datos <- data.frame(xi=datos)
Primero se creó un vector llamado datos, luego ese mismo vector se transformó en data.frame con el mismo nombre de datos.
En las siguientes lineas de código R, se utiliza una función llamada cbind() para agregar columnas al data.frame existente llamado datos. La función nrow() sirve para identificar cuántas observaciones tiene la muestra de los datos, es decir, el valor de \(n\)=12.
Al final debe haber un conjunto de datos con cinco columnas, “xi, media, diferencia, alcuadrado.”
Se determina la sumatoria de las diferencias al cuadrado conforme a la fórmula y con ello el valor de la varianza. Se genra tambien la variable media para utilizarse a lo largo del caso.
n <- nrow(datos)
summary(datos)
## xi
## Min. :3310
## 1st Qu.:3472
## Median :3505
## Mean :3540
## 3rd Qu.:3575
## Max. :3925
datos <- cbind(datos, media = mean(datos$xi))
datos <- cbind(datos, diferencia=datos$xi - datos$media)
datos <- cbind(datos, alcuadrado = datos$diferencia^2)
media <- mean(datos$xi)
datos
## xi media diferencia alcuadrado
## 1 3450 3540 -90 8100
## 2 3550 3540 10 100
## 3 3650 3540 110 12100
## 4 3480 3540 -60 3600
## 5 3355 3540 -185 34225
## 6 3310 3540 -230 52900
## 7 3490 3540 -50 2500
## 8 3730 3540 190 36100
## 9 3540 3540 0 0
## 10 3925 3540 385 148225
## 11 3520 3540 -20 400
## 12 3480 3540 -60 3600
sumatoria <- sum(datos$alcuadrado)
sumatoria
## [1] 301850
varianza <- sumatoria / (n-1)
varianza
## [1] 27440.91
desviacion <- sqrt(varianza)
desviacion
## [1] 165.653
CV <- desviacion / media * 100
CV
## [1] 4.679463
El Coeficiente de Variación indica que la desviación estándar muestral es sólo 4.6794627 % del valor de la media muestral. Entre más bajo sea el valor porcentual del CV menor dispersión se encuentran en los datos. En general, el coeficiente de variación es un estadístico útil para comparar la variabilidad de variables que tienen desviaciones estándar distintas y medias distintas. (Anderson, Sweeney, and Williams 2008b).
Existen funciones en R que sirven para determinar varianza, desviación de manera directa, con ellas se podrá determinar de igual forma el coeficiente de variación. Las funciones son var() y sd() respectivamente para varianza y desviación estándar.
var(datos$xi)
## [1] 27440.91
#[1] 27440.91
sd(datos$xi)
## [1] 165.653
#[1] 165.653
CV <- sd(datos$xi) / mean(datos$xi) * 100
CV
## [1] 4.679463
Se muestra la dispersión del sueldo de cada trabajador y la linea horizontal indicando la media.
titulo <- "Sueldos"
subtitulo <- paste("Media =", round(media,2)," Varianza=",round(varianza,2)," Desv. Std.=",round(desviacion,2), " CV =", round(CV, 2),"%")
ggplot(data = datos, mapping = aes(x = 1:n, y = xi)) +
geom_point(colour = "green") +
geom_hline(yintercept = media, colour = "red") +
ggtitle(titulo, subtitle = subtitulo) +
xlab('Observaciones') + ylab('Sueldos')
Se presenta un ejercicio de medidas de dispersión con datos de alumnos.
Se descargan datos de la dirección url “Datos de alumno con promedio superior a cero” de github,; los datos ya vienen con la variable Promedio de todas las observaciones superior a cero. En los casos 5 y 4 se tuvo la necesidad de limpiar observaciones, en este caso 6 ya no es necesario hacer dicha tarea de limpieza de registros.
Nuevamente se utiliza la función readr() para descargar un archivo texto (CSV) separado por comas; en esta misma función se utiliza el argumento stringsAsFactors = TRUE que significa que desde la carga de los datos y desde un inicio se considere como categóricas o tipo factor a las variable que vienen como tipo string o character del conjunto de datos que se carga.
Se utiliza la función str() para conocer el tipo de estructura de los datos, además, despliega los tipos de datos de cada variable, las que son numéricas, factor, entre otros, y la cantidad de registros del conjunto de datos cargado a R.
Nuevamente la función summary() muestra sólo las columnas 2,4,8 y 9 únicamente, summary(datos[c(2,4,8,9)]).
datos <- read.csv("https://raw.githubusercontent.com/rpizarrog/probabilidad-y-estad-stica/master/datos/promedios%20alumnos/datos.alumnosEJ2021.csv", stringsAsFactors = TRUE)
#datos$Carrera <- factor(datos$Carrera)
summary(datos[c(2,4,8,9)])
## X Alumno Promedio Carrera
## Min. : 1 Min. : 1.0 Min. : 70.00 INDUSTRIAL : 653
## 1st Qu.:1384 1st Qu.:106.0 1st Qu.: 83.25 ARQUITECTURA : 633
## Median :2768 Median :239.0 Median : 86.36 CIVIL : 594
## Mean :2768 Mean :262.2 Mean : 86.60 GESTION : 518
## 3rd Qu.:4152 3rd Qu.:388.0 3rd Qu.: 89.83 QUIMICA : 515
## Max. :5535 Max. :755.0 Max. :100.00 ADMINISTRACION: 458
## (Other) :2164
str(datos)
## 'data.frame': 5535 obs. of 9 variables:
## $ X.1 : int 1 2 3 4 5 6 7 8 9 10 ...
## $ X : int 1 2 3 4 5 6 7 8 9 10 ...
## $ NoControl : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Alumno : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Semestre : int 12 13 10 13 10 10 13 11 11 10 ...
## $ Cr.Aprobados: int 207 226 235 231 235 235 231 197 235 231 ...
## $ Cr.Cursando : int 19 9 10 14 10 10 4 23 10 4 ...
## $ Promedio : num 79.8 82.5 95.2 79.3 92.7 ...
## $ Carrera : Factor w/ 14 levels "ADMINISTRACION",..: 13 13 13 13 13 13 13 13 13 13 ...
Los primeros cincuenta registros.
head(datos[,c(2,8,9)], 50)
## X Promedio Carrera
## 1 1 79.84 SISTEMAS
## 2 2 82.55 SISTEMAS
## 3 3 95.16 SISTEMAS
## 4 4 79.32 SISTEMAS
## 5 5 92.67 SISTEMAS
## 6 6 91.25 SISTEMAS
## 7 7 82.46 SISTEMAS
## 8 8 83.72 SISTEMAS
## 9 9 85.37 SISTEMAS
## 10 10 85.12 SISTEMAS
## 11 11 78.22 SISTEMAS
## 12 12 91.25 SISTEMAS
## 13 13 84.59 SISTEMAS
## 14 14 89.16 SISTEMAS
## 15 15 82.51 SISTEMAS
## 16 16 81.58 SISTEMAS
## 17 17 82.63 SISTEMAS
## 18 18 87.18 SISTEMAS
## 19 19 89.55 SISTEMAS
## 20 20 86.27 SISTEMAS
## 21 21 84.02 SISTEMAS
## 22 22 82.23 SISTEMAS
## 23 23 83.37 SISTEMAS
## 24 24 92.67 SISTEMAS
## 25 25 82.75 SISTEMAS
## 26 26 95.94 SISTEMAS
## 27 27 91.27 SISTEMAS
## 28 28 89.33 SISTEMAS
## 29 29 86.02 SISTEMAS
## 30 30 83.45 SISTEMAS
## 31 31 80.81 SISTEMAS
## 32 32 78.33 SISTEMAS
## 33 33 89.35 SISTEMAS
## 34 34 83.76 SISTEMAS
## 35 35 80.42 SISTEMAS
## 36 36 94.43 SISTEMAS
## 37 37 83.29 SISTEMAS
## 38 38 87.72 SISTEMAS
## 39 39 85.25 SISTEMAS
## 40 40 93.16 SISTEMAS
## 41 41 81.88 SISTEMAS
## 42 42 80.86 SISTEMAS
## 43 43 82.24 SISTEMAS
## 44 44 87.78 SISTEMAS
## 45 45 81.60 SISTEMAS
## 46 46 84.83 SISTEMAS
## 47 47 83.71 SISTEMAS
## 48 48 90.44 SISTEMAS
## 49 49 90.79 SISTEMAS
## 50 50 89.08 SISTEMAS
Los últimos cincuenta registros
tail(datos[,c(2,8,9)], 50)
## X Promedio Carrera
## 5486 5486 87.70 ARQUITECTURA
## 5487 5487 81.96 ARQUITECTURA
## 5488 5488 85.45 ARQUITECTURA
## 5489 5489 93.75 ARQUITECTURA
## 5490 5490 82.33 ARQUITECTURA
## 5491 5491 82.80 ARQUITECTURA
## 5492 5492 76.71 ARQUITECTURA
## 5493 5493 87.05 ARQUITECTURA
## 5494 5494 87.50 ARQUITECTURA
## 5495 5495 83.70 ARQUITECTURA
## 5496 5496 93.50 ARQUITECTURA
## 5497 5497 91.67 ARQUITECTURA
## 5498 5498 89.67 ARQUITECTURA
## 5499 5499 89.83 ARQUITECTURA
## 5500 5500 87.03 ARQUITECTURA
## 5501 5501 87.25 ARQUITECTURA
## 5502 5502 77.91 ARQUITECTURA
## 5503 5503 88.38 ARQUITECTURA
## 5504 5504 89.00 ARQUITECTURA
## 5505 5505 86.17 ARQUITECTURA
## 5506 5506 86.40 ARQUITECTURA
## 5507 5507 91.50 ARQUITECTURA
## 5508 5508 84.33 ARQUITECTURA
## 5509 5509 91.75 ARQUITECTURA
## 5510 5510 86.72 ARQUITECTURA
## 5511 5511 89.13 ARQUITECTURA
## 5512 5512 87.00 ARQUITECTURA
## 5513 5513 86.21 ARQUITECTURA
## 5514 5514 87.80 ARQUITECTURA
## 5515 5515 88.83 ARQUITECTURA
## 5516 5516 75.00 ARQUITECTURA
## 5517 5517 84.00 ARQUITECTURA
## 5518 5518 84.50 ARQUITECTURA
## 5519 5519 85.55 ARQUITECTURA
## 5520 5520 87.77 ARQUITECTURA
## 5521 5521 86.11 ARQUITECTURA
## 5522 5522 91.50 ARQUITECTURA
## 5523 5523 84.36 ARQUITECTURA
## 5524 5524 86.81 ARQUITECTURA
## 5525 5525 87.80 ARQUITECTURA
## 5526 5526 84.67 ARQUITECTURA
## 5527 5527 81.27 ARQUITECTURA
## 5528 5528 92.00 ARQUITECTURA
## 5529 5529 87.59 ARQUITECTURA
## 5530 5530 81.16 ARQUITECTURA
## 5531 5531 84.43 ARQUITECTURA
## 5532 5532 92.47 ARQUITECTURA
## 5533 5533 89.74 ARQUITECTURA
## 5534 5534 87.75 ARQUITECTURA
## 5535 5535 86.50 ARQUITECTURA
media <- mean(datos$Promedio)
media
## [1] 86.59522
Se determina la varianza de la variable Promedio del conjunto de datos.
La variable Promedio es una variable cuantitativa que se que significa el promedio de alumnos inscritos en una Institución Educativa. Siendo variable cuantitativa se puede aplicar medidas de dispersión.
varianza <- var(datos$Promedio)
varianza
## [1] 20.72146
Se determina la desviación estándar de la variable Promedio del conjunto de datos.
desviacion <- sd(datos$Promedio)
desviacion
## [1] 4.552083
CV <- desviacion / media * 100
CV
## [1] 5.256737
Se visualiza el diagrama de dispersión de todos los alumnos de todas las carreras en su variable Promedio.
titulo <- "Todos los alumnos"
subtitulo <- paste("Media=", round(media,2), " Varianza=",round(varianza,2)," Desv. Std.=",round(desviacion,2), " CV =", round(CV, 2),"%")
ggplot(data = datos, mapping = aes(x = X, y = Promedio)) +
geom_point(colour = "skyblue") +
geom_hline(yintercept = media, colour = "red") +
ggtitle(titulo, subtitle = subtitulo) +
xlab('Observaciones') + ylab('Promedios')
Se eligen tres carreras diferentes, ARQUITECTURA, CIVIL, INDUSTRIAL.
datos.arquitectura <- subset(datos, Carrera == 'ARQUITECTURA')
head(datos.arquitectura)
## X.1 X NoControl Alumno Semestre Cr.Aprobados Cr.Cursando Promedio
## 4903 4903 4903 1 1 10 227 10 91.96
## 4904 4904 4904 2 2 8 178 33 83.16
## 4905 4905 4905 3 3 10 176 34 81.68
## 4906 4906 4906 4 4 12 194 39 83.60
## 4907 4907 4907 5 5 10 172 18 81.51
## 4908 4908 4908 6 6 10 182 33 83.08
## Carrera
## 4903 ARQUITECTURA
## 4904 ARQUITECTURA
## 4905 ARQUITECTURA
## 4906 ARQUITECTURA
## 4907 ARQUITECTURA
## 4908 ARQUITECTURA
media.arquitectura <- mean(datos.arquitectura$Promedio)
varianza.arquitectura <- var(datos.arquitectura$Promedio)
desviacion.arquitectura <- sd(datos.arquitectura$Promedio)
CV.arquitectura <- desviacion.arquitectura / media.arquitectura * 100
En a instrucción ggplot(data = datos.civil, mapping = aes(x = Alumno, y = Promedio)) se toma en el eje de las X el consecutivo de la variable Alumnos, que es desde 1 hasta el último alumno de cada carrera; y en el eje de las Y’s el Promedio.
titulo <- "Alumnos Arquitectura"
subtitulo <- paste("Media=", round(media.arquitectura,2), " Varianza=",round(varianza.arquitectura,2)," Desv. Std.=",round(desviacion.arquitectura,2), " CV =", round(CV.arquitectura, 2),"%")
ggplot(data = datos.arquitectura, mapping = aes(x = Alumno, y = Promedio)) +
geom_point(colour = "orange") +
geom_hline(yintercept = media, colour = "red") +
ggtitle(titulo, subtitle = subtitulo) +
xlab('Observaciones') + ylab('Promedios')
datos.civil <- subset(datos, Carrera == 'CIVIL')
head(datos.civil)
## X.1 X NoControl Alumno Semestre Cr.Aprobados Cr.Cursando Promedio
## 3909 3909 3909 1 1 11 166 20 76.74
## 3910 3910 3910 2 2 10 178 20 79.76
## 3911 3911 3911 3 3 11 165 17 79.43
## 3912 3912 3912 4 4 11 211 24 77.57
## 3913 3913 3913 5 5 10 216 29 80.31
## 3914 3914 3914 6 6 10 220 15 78.54
## Carrera
## 3909 CIVIL
## 3910 CIVIL
## 3911 CIVIL
## 3912 CIVIL
## 3913 CIVIL
## 3914 CIVIL
media.civil <- mean(datos.civil$Promedio)
varianza.civil <- var(datos.civil$Promedio)
desviacion.civil <- sd(datos.civil$Promedio)
CV.civil <- desviacion.civil / media.civil * 100
titulo <- "Alumnos Civil"
subtitulo <- paste("Media=", round(media.civil,2), " Varianza=",round(varianza.civil,2)," Desv. Std.=",round(desviacion.civil,2), " CV =", round(CV.civil, 2),"%")
ggplot(data = datos.civil, mapping = aes(x = Alumno, y = Promedio)) +
geom_point(colour = "brown") +
geom_hline(yintercept = media, colour = "red") +
ggtitle(titulo, subtitle = subtitulo) +
xlab('Observaciones') + ylab('Promedios')
datos.industrial <- subset(datos, Carrera == 'INDUSTRIAL')
head(datos.industrial)
## X.1 X NoControl Alumno Semestre Cr.Aprobados Cr.Cursando Promedio
## 2708 2708 2708 1 1 10 221 14 85.04
## 2709 2709 2709 2 2 15 224 6 76.45
## 2710 2710 2710 3 3 14 250 10 87.41
## 2711 2711 2711 4 4 10 235 10 79.83
## 2712 2712 2712 5 5 12 218 27 80.78
## 2713 2713 2713 6 6 11 158 15 79.92
## Carrera
## 2708 INDUSTRIAL
## 2709 INDUSTRIAL
## 2710 INDUSTRIAL
## 2711 INDUSTRIAL
## 2712 INDUSTRIAL
## 2713 INDUSTRIAL
media.industrial <- mean(datos.industrial$Promedio)
varianza.industrial <- var(datos.industrial$Promedio)
desviacion.industrial <- sd(datos.industrial$Promedio)
CV.industrial <- desviacion.industrial / media.industrial * 100
titulo <- "Alumnos Industrial"
subtitulo <- paste("Media=", round(media.industrial,2), " Varianza=",round(varianza.industrial,2)," Desv. Std.=",round(desviacion.industrial,2), " CV =", round(CV.industrial, 2),"%")
ggplot(data = datos.industrial, mapping = aes(x = Alumno, y = Promedio)) +
geom_point(colour = "green") +
geom_hline(yintercept = media, colour = "red") +
ggtitle(titulo, subtitle = subtitulo) +
xlab('Observaciones') + ylab('Promedios')
ggplot(data = datos, mapping = aes(x = Alumno, y = Promedio, color = Carrera)) +
geom_point() +
facet_wrap(~ Carrera, nrow = 5)
¿A que se refieren las medidas de dispersión?
A la forma en la que los datos son estirados o exprimidos. Y asi poder observar que tan alejados estan los datos de la media.
¿Qué significa la varianza en un conjunto de datos? y ¿cómo se determina en lenguaje R?
La varianza se refiere a la diferencia entre el valor de cada observación y la media.
varianza<-var(datos$Promedio)
¿Qué significa la desviación estándar en un conjunto de datos? y ¿cómo se determina en lenguaje R?
Se trata de un indice numerico de la dispersion que mide el grado de dispersion o tambien de la variabilidad. Y se define como la raíz cuadrada positiva de la varianza
Estandar poblacional \sigma = \sqrt{\sigma^2}
Estandar muestral S = \sqrt{S^2}
¿A qué se refiere el coeficiente de variación en un conjunto de datos? y ¿cómo se determina en R?
Es una medida que nos indica que tan grande es la desviación estándar en relación con la media.
CV = \left(\frac{\sigma}{\bar{x}} \times 100 \right) \text{%}
De los datos alumnos de aquellos que tienen promedio superior a cero, ¿cuál es el valor de la media, de la varianza, de la desviación estándar y del coeficiente de variación de todos ellos conforme a la variable o columna Promedio?
Media= 86.59522
Varianza= 20.72146
Desviacion=4.552083
Coeficiente de variacion= 5.256737
Seleccione tres carreras al azar e indique cuáles seleccionaron, determine los coeficiente de variación para cada carrera o para cada conjunto de datos de cada carrra conforme a la variable Promedio. ¿Cuál de los tres conjuntos tiene mayor y menor coeficiene de variación y qué significa?
Bioquímica
datos.electrica <- subset(datos, Carrera == 'BIOQUIMICA')
media.electrica <- mean(datos.electrica$Promedio)
desviacion.electrica <- sd(datos.electrica$Promedio)
CV.electrica <- desviacion.electrica / media.electrica * 100
round(CV.electrica,2)
## [1] 5.84
Electrica
datos.electrica <- subset(datos, Carrera == 'ELECTRICA')
media.electrica <- mean(datos.electrica$Promedio)
desviacion.electrica <- sd(datos.electrica$Promedio)
CV.electrica <- desviacion.electrica / media.electrica * 100
round(CV.electrica,2)
## [1] 4.85
TIC
datos.electrica <- subset(datos, Carrera == 'TIC')
media.electrica <- mean(datos.electrica$Promedio)
desviacion.electrica <- sd(datos.electrica$Promedio)
CV.electrica <- desviacion.electrica / media.electrica * 100
round(CV.electrica,2)
## [1] 5.05
La carrea con el mayor coeficiente es Bioquímica con 5.84, dando a entender que los promedios de los alumnos tienden a estar más alejados de la media, por otro lado, el menor fue de la carrera de Eléctrica con 4.85, que al contrario de Bioquímica, estan más cercanos a la media.
¿Qué les deja el caso?
Principalmente fue el manejo de nuevas herramientas como la varianza, la desviación estandar y el coeficiente de variación, que se trata de funciones utiles e interesantes en cuanto al manejo de datos bastante grandes, y que junto con el continuo uso de las librerias anteriormente usadas permite trabajar y manejar los datos de manera facil.
Anderson, David R., Dennis J. Sweeney, and Thomas A. Williams. 2008a. 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,. ———. 2008b. 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,. Devore, Jay L. 2016b. Fundamentos de Probabilidad y Estadística. Primera Edición. CENGAGE. ———. 2016a. Fundamentos de Probabilidad y Estadística. Primera Edición. CENGAGE.