Cálculo de medidas estadísticas descriptivas en R y Python

UNIVERSIDAD DE EL SALVADOR
FACULTAD MULTIDISCIPLINARIA DE OCCIDENTE
DEPARTAMENTO DE MATEMÁTICAS
TECNOLOGÍA Y EDUCACIÓN


CÁLCULO DE MEDIDAS ESTADÍSTICAS DESCRIPTIVAS EN R Y PYTHON

Trabajo: Investigación
Alumno: Carlos Andrés García Monterrosa
Docente: Jaime Isaac Peña
Fecha de entrega: 2025-10-09


Introducción

Las medidas estadísticas descriptivas permiten resumir y analizar conjuntos de datos de manera práctica.
En este trabajo se muestran ejemplos de cómo calcular estos estadísticos básicos y de dispersión en R y en Python, aplicando tres escenarios diferentes:

  1. Datos sin agrupar (colección simple de valores).
  2. Datos con frecuencias (agrupados en tablas).
  3. Datos almacenados en una base externa (.xlsx).

1. Datos sin agrupar

Ejemplo en R

# Conjunto de datos
x <- c(4, 6, 7, 9, 10, 11, 12, 15, 17, 19)

# Medidas de tendencia central
max(x)        # máximo
[1] 19
min(x)        # mínimo
[1] 4
mean(x)       # media
[1] 11
median(x)     # mediana
[1] 10.5
# Moda (requiere paquete)
library(modeest)
mfv(x)
 [1]  4  6  7  9 10 11 12 15 17 19
# Dispersión
var(x)        # varianza muestral
[1] 23.55556
sd(x)         # desviación típica
[1] 4.853407
cv <- sd(x)/mean(x)   # coeficiente de variación
cv
[1] 0.4412188
# Medidas de posición
quantile(x, probs = seq(0, 1, 0.25))  # cuartiles
   0%   25%   50%   75%  100% 
 4.00  7.50 10.50 14.25 19.00 
quantile(x, probs = seq(0, 1, 0.10))  # deciles
  0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
 4.0  5.8  6.8  8.4  9.6 10.5 11.4 12.9 15.4 17.2 19.0 
quantile(x, probs = seq(0, 1, 0.01))  # percentiles
   0%    1%    2%    3%    4%    5%    6%    7%    8%    9%   10%   11%   12% 
 4.00  4.18  4.36  4.54  4.72  4.90  5.08  5.26  5.44  5.62  5.80  5.98  6.08 
  13%   14%   15%   16%   17%   18%   19%   20%   21%   22%   23%   24%   25% 
 6.17  6.26  6.35  6.44  6.53  6.62  6.71  6.80  6.89  6.98  7.14  7.32  7.50 
  26%   27%   28%   29%   30%   31%   32%   33%   34%   35%   36%   37%   38% 
 7.68  7.86  8.04  8.22  8.40  8.58  8.76  8.94  9.06  9.15  9.24  9.33  9.42 
  39%   40%   41%   42%   43%   44%   45%   46%   47%   48%   49%   50%   51% 
 9.51  9.60  9.69  9.78  9.87  9.96 10.05 10.14 10.23 10.32 10.41 10.50 10.59 
  52%   53%   54%   55%   56%   57%   58%   59%   60%   61%   62%   63%   64% 
10.68 10.77 10.86 10.95 11.04 11.13 11.22 11.31 11.40 11.49 11.58 11.67 11.76 
  65%   66%   67%   68%   69%   70%   71%   72%   73%   74%   75%   76%   77% 
11.85 11.94 12.09 12.36 12.63 12.90 13.17 13.44 13.71 13.98 14.25 14.52 14.79 
  78%   79%   80%   81%   82%   83%   84%   85%   86%   87%   88%   89%   90% 
15.04 15.22 15.40 15.58 15.76 15.94 16.12 16.30 16.48 16.66 16.84 17.02 17.20 
  91%   92%   93%   94%   95%   96%   97%   98%   99%  100% 
17.38 17.56 17.74 17.92 18.10 18.28 18.46 18.64 18.82 19.00 
# Datos: notas de estudiantes
notas <- c(6, 7, 8, 6, 9, 7, 8, 6, 7, 10, 5, 6)

# Estadísticos básicos
max(notas)
[1] 10
min(notas)
[1] 5
mean(notas)
[1] 7.083333
median(notas)
[1] 7
library(modeest)
mfv(notas)
[1] 6
var(notas)
[1] 2.083333
sd(notas)
[1] 1.443376
sd(notas)/mean(notas)
[1] 0.2037707
quantile(notas, probs = c(0.25, 0.5, 0.75))
25% 50% 75% 
  6   7   8 
# Datos: edades
edades <- c(18, 20, 22, 19, 25, 30, 22, 21, 20, 19, 18, 22, 24, 26, 21)

summary(edades)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   18.0    19.5    21.0    21.8    23.0    30.0 
var(edades)
[1] 10.88571
sd(edades)
[1] 3.299351
IQR(edades)
[1] 3.5
quantile(edades, seq(0, 1, 0.1))
  0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
18.0 18.4 19.0 20.0 20.6 21.0 22.0 22.0 24.2 25.6 30.0 

un ejemplo completo en R que parte de una tabla de frecuencias (valores + frecuencias) y calcula:

Frecuencias relativas (fr)
Frecuencias relativas acumuladas (fra)
Frecuencias relativas porcentuales (fr%)
Medidas de tendencia central (media, mediana, moda)
Medidas de dispersión (varianza, desviación típica, coeficiente de variación)

# ============================================================
# 1. Datos ya agrupados en tabla de frecuencias
# ============================================================
xi  <- c(2, 3, 5, 7, 8)   # valores
fi  <- c(3, 5, 8, 4, 2)   # frecuencias absolutas
n   <- sum(fi)            # tamaño muestral

# ============================================================
# 2. Frecuencias relativas, acumuladas y porcentuales
# ============================================================
fr   <- fi / n            # frecuencia relativa
Fri  <- cumsum(fi)        # frecuencia absoluta acumulada
Fra  <- cumsum(fr)        # frecuencia relativa acumulada
fr_pct <- round(fr * 100, 2)

# Mostramos la tabla con líneas
knitr::kable(
  data.frame(
    xi  = xi,
    fi  = fi,
    fri = round(fr, 4),
    `fi ac` = Fri,
    `fr ac` = round(Fra, 4),
    `fr %`  = fr_pct
  ),
  row.names = FALSE
)
xi fi fri fi.ac fr.ac fr..
2 3 0.1364 3 0.1364 13.64
3 5 0.2273 8 0.3636 22.73
5 8 0.3636 16 0.7273 36.36
7 4 0.1818 20 0.9091 18.18
8 2 0.0909 22 1.0000 9.09

============================================================

3. Medidas de tendencia central

============================================================

Media

media <- sum(xi * fi) / n

Mediana (ubicamos la primera posición donde Fri >= n/2)

pos_med <- min(which(Fri >= n / 2))
mediana <- xi[pos_med]

# Moda (valor con mayor fi)
pos_moda <- which.max(fi)
moda <- xi[pos_moda]

============================================================

4. Medidas de dispersión

============================================================

Varianza muestral

varianza <- sum(fi * (xi - media)^2) / (n - 1)

# Desviación típica
desv_tip <- sqrt(varianza)

# Coeficiente de variación
cv <- desv_tip / media

============================================================

5. Resumen

============================================================

c(Media = media,
  Mediana = mediana,
  Moda = moda,
  Varianza = varianza,
  `Desv. típica` = desv_tip,
  `CV (%)` = round(cv * 100, 2))
       Media      Mediana         Moda     Varianza Desv. típica       CV (%) 
    4.772727     5.000000     5.000000     3.803030     1.950136    40.860000