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