Simular poblacion de alumnos
Este script simula la generación de 5000 observaciones que uquivale a una poblacion de 5000 alumnos de una Institución educativa superior.
Las variables que se manejan de cada alumno son las siguientes:
- Una matrícula o identifiacador el cual es un valor consecutivo.
- Carrera que puede ser de un conjunto de 12 carreas de nivel superior
- Genero Masculino M o Femenino F
- Promedio escolar cuyo rango está entre 72 y 99. Una media de 85 bajo una distribución normal
- Edad de entre 17 y 24 años, la media 20 años bajo una distribución normal
- Peso. Complexión en Kg de cada alumno Hombres de 60 Kg la media Mujeres 55 Kg la media bajo una distribución normal
- Altura Hombres 1.75 la media y mujeres 1.65 la media.
Los datos iniciales
carreras <- c("ARQUITECTURA", "ADMINISTRACION", "BIOQUIMICA",
"CIVIL", "ELECTRICA", "ELECTRONICA",
"INDUSTRIAL", "INFORMATICA", "MECANICA",
"MECATRONICA", "SISTEMAS", "TIC","QUIMICA")
generos <- c('M', 'F')
Funciones generadoras de datos
# semilla inicial
set.seed(1)
getMatriculas <- function(n) {
c(1:n)
}
getCarreras <- function(n, semilla) {
set.seed(semilla)
sample(carreras, n, replace = TRUE)
}
getGeneros <- function(n, semilla) {
set.seed(semilla)
sample(generos, n, replace = TRUE)
}
getEdades <- function(n, semilla) {
set.seed(semilla)
round(rnorm(n, 21,1))
}
getPromedios <- function(n, semilla) {
set.seed(semilla)
round(rnorm(n, 86, sqrt(12)),2)
}
getPesos <- function(generos, semilla) {
set.seed(semilla)
pesos <- NULL
for (gen in generos ) {
if (gen == 'M') {
peso <- round(rnorm(1, 80, sqrt(10)),2) # Hombre
}
else {
peso <- round(rnorm(1, 60, sqrt(5)),2) # Mujer
}
pesos <- rbind(pesos, peso)
}
return (pesos)
}
getAlturas <- function(generos, semilla) {
set.seed(semilla)
alturas <- NULL
for (gen in generos ) {
if (gen == 'M') {
altura <- round(rnorm(1, 180, sqrt(10)),2) # Hombre
}
else {
altura <- round(rnorm(1, 160, sqrt(5)),2) # Mujer
}
alturas <- rbind(alturas, altura)
}
return (alturas)
}
genAlumnos <- function(n, semilla) {
alumnos <- data.frame(matricula = getMatriculas(n))
alumnos <- cbind(alumnos, carrera = getCarreras(n,semilla))
alumnos <- cbind(alumnos, genero = getGeneros(n,semilla))
alumnos <- cbind(alumnos, promedio = getPromedios(n,semilla))
alumnos <- cbind(alumnos, edad = getEdades(n,semilla))
alumnos <- cbind(alumnos, peso = getPesos(getGeneros(n,semilla),semilla))
alumnos <- cbind(alumnos, altura = getAlturas(getGeneros(n,semilla),semilla))
rownames(alumnos) <- c(1:n)
return(alumnos)
}
Generando la población
alumnos <- genAlumnos(5000, 1)
head(alumnos) # Primeras 6 filas
## matricula carrera genero promedio edad peso altura
## 1 1 CIVIL M 83.83 20 74.29 174.29
## 2 2 ELECTRICA M 86.64 21 77.86 177.86
## 3 3 INFORMATICA F 83.11 20 58.94 158.94
## 4 4 TIC F 91.53 23 62.30 162.30
## 5 5 BIOQUIMICA M 87.14 21 78.11 178.11
## 6 6 TIC F 83.16 20 62.59 162.59
tail(alumnos) # Ultimas 6 filas
## matricula carrera genero promedio edad peso altura
## 4995 4995 INFORMATICA F 81.15 20 58.57 158.57
## 4996 4996 ELECTRONICA M 86.56 21 79.00 179.00
## 4997 4997 ADMINISTRACION M 89.40 22 82.37 182.37
## 4998 4998 ELECTRONICA M 83.60 20 81.20 181.20
## 4999 4999 ADMINISTRACION M 85.99 21 81.25 181.25
## 5000 5000 CIVIL M 86.59 21 83.42 183.42
Tabla de frecuencias de Genero
frecuencias <- table(alumnos$genero)
frecuencias
##
## F M
## 2436 2564
barplot(frecuencias)

Tabla de frecuencias de Carrera
frecuencias <- table(alumnos$carrera)
frecuencias
##
## ADMINISTRACION ARQUITECTURA BIOQUIMICA CIVIL ELECTRICA
## 390 421 374 378 407
## ELECTRONICA INDUSTRIAL INFORMATICA MECANICA MECATRONICA
## 403 379 354 336 345
## QUIMICA SISTEMAS TIC
## 415 397 401
par(mfrow=c(2,2))
barplot(frecuencias[1:3])
barplot(frecuencias[4:6])
barplot(frecuencias[7:9])
barplot(frecuencias[10:12])

par(mfrow=c(1,1))
Tabla de frecuencias de Edades
frecuencias <- table(alumnos$edad)
frecuencias
##
## 17 18 19 20 21 22 23 24 25
## 2 44 310 1187 1891 1204 339 21 2
par(mfrow=c(1,1))
hist(frecuencias)

Histograma, frecuencias absolutas, relativa de Edades
hist(alumnos$edad, main = "Histograma de edades",
xlab = "Edades", ylab = "Frecuencias")

frecuencias <- data.frame(table(alumnos$edad))
frecuencias
## Var1 Freq
## 1 17 2
## 2 18 44
## 3 19 310
## 4 20 1187
## 5 21 1891
## 6 22 1204
## 7 23 339
## 8 24 21
## 9 25 2
frecuencias <- cbind(frecuencias, relativa = round(frecuencias$Freq / nrow(alumnos),2))
frecuencias <- cbind(frecuencias, porcentual = round(frecuencias$Freq / nrow(alumnos) * 100,0))
frecuencias
## Var1 Freq relativa porcentual
## 1 17 2 0.00 0
## 2 18 44 0.01 1
## 3 19 310 0.06 6
## 4 20 1187 0.24 24
## 5 21 1891 0.38 38
## 6 22 1204 0.24 24
## 7 23 339 0.07 7
## 8 24 21 0.00 0
## 9 25 2 0.00 0
Puntos medios, máximos y mínimos de edad con summary()
summary(alumnos$edad)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 17 20 21 21 22 25
Agrupación de alumnos por edades
- Se utiliza la libraría library(fdth)
- Se genera una distribución donde>
- f= frecuencia absoluta
- rf= frecuencia relativa
- rf(%) frecuencia relativa porcentual
- cf= frecuencia acumulada
- cf(%)=frecuencia acumulada porcentual
library(fdth)
##
## Attaching package: 'fdth'
## The following objects are masked from 'package:stats':
##
## sd, var
distribucion <- fdt(alumnos$edad, breaks="Sturges") # Regla Sturge
distribucion
## Class limits f rf rf(%) cf cf(%)
## [16.8,17.4) 2 0.00 0.04 2 0.04
## [17.4,18) 44 0.01 0.88 46 0.92
## [18,18.6) 0 0.00 0.00 46 0.92
## [18.6,19.2) 310 0.06 6.20 356 7.12
## [19.2,19.8) 0 0.00 0.00 356 7.12
## [19.8,20.4) 1187 0.24 23.74 1543 30.86
## [20.4,21) 1891 0.38 37.82 3434 68.68
## [21,21.6) 0 0.00 0.00 3434 68.68
## [21.6,22.2) 1204 0.24 24.08 4638 92.76
## [22.2,22.8) 0 0.00 0.00 4638 92.76
## [22.8,23.4) 339 0.07 6.78 4977 99.54
## [23.4,24) 21 0.00 0.42 4998 99.96
## [24,24.6) 0 0.00 0.00 4998 99.96
## [24.6,25.2) 2 0.00 0.04 5000 100.00
hist(alumnos$edad, breaks = "Sturges",
main = "Histograma de edades",
xlab = "Edades", ylab = "Frecuencias") #histograma utilizando el numero de clases según Sturge

plot(distribucion, type="cfh") #histograma de frecuencias acumulada

plot(distribucion, type="cfp") #poligono de frecuencias acumulado

Diagrama de tallo y hoja con edades
stem(alumnos$edad)
##
## The decimal point is at the |
##
## 17 | 00
## 17 |
## 18 | 00000000000000000000000000000000000000000000
## 18 |
## 19 | 00000000000000000000000000000000000000000000000000000000000000000000+230
## 19 |
## 20 | 00000000000000000000000000000000000000000000000000000000000000000000+1107
## 20 |
## 21 | 00000000000000000000000000000000000000000000000000000000000000000000+1811
## 21 |
## 22 | 00000000000000000000000000000000000000000000000000000000000000000000+1124
## 22 |
## 23 | 00000000000000000000000000000000000000000000000000000000000000000000+259
## 23 |
## 24 | 000000000000000000000
## 24 |
## 25 | 00
stem(alumnos$edad, width = 0)
##
## The decimal point is at the |
##
## 17 | +2
## 17 |
## 18 | +44
## 18 |
## 19 | +310
## 19 |
## 20 | +1187
## 20 |
## 21 | +1891
## 21 |
## 22 | +1204
## 22 |
## 23 | +339
## 23 |
## 24 | +21
## 24 |
## 25 | +2