Proyecto 01 | Estadística Descriptiva

Análisis de Tendencia Central

Calculadora interactiva para determinar media, mediana, moda y rango en conjuntos de datos. Documentación técnica completa con implementación en JavaScript.

🧪 Calculadora Interactiva

Ingresa un conjunto de datos separados por comas para ver los cálculos en tiempo real:

Media Aritmética (x̄) -
Mediana (M) -
Moda -
Rango -
Total de Datos -

01. Definición del Problema

En el análisis de datos para IA, es fundamental entender la distribución de la información. Esta calculadora procesa arreglos de datos para extraer los valores que representan el "centro" de la muestra, lo cual es crucial para:

02. Fundamento Matemático

Fórmulas matemáticas utilizadas en esta implementación:

Media Aritmética ($\bar{x}$):

Promedio de todos los valores:

$$\bar{x} = \frac{\sum_{i=1}^{n} x_i}{n}$$

Mediana ($M$):

Valor central ordenado. Si $n$ es impar:

$$M = x_{\frac{n+1}{2}}$$

Si $n$ es par:

$$M = \frac{x_{\frac{n}{2}} + x_{\frac{n}{2}+1}}{2}$$

Moda:

Valor con mayor frecuencia: $\text{Moda} = \arg\max_{x_i} f(x_i)$

Rango:

Diferencia máxima: $R = x_{\text{max}} - x_{\text{min}}$

03. Implementación en JavaScript

Código fuente completo con explicación línea por línea:

statistics-engine.js

// ========================================
// MOTOR DE ANÁLISIS ESTADÍSTICO
// Proyecto: Calculadora Estadística
// Autor: Gabriel - Técnico en IA
// ========================================

/**
 * Calcula la media aritmética
 * @param {number[]} datos - Array de números
 * @returns {number} Media
 */
function calcularMedia(datos) {
    if (datos.length === 0) throw new Error('Array vacío');
    const suma = datos.reduce((acc, val) => acc + val, 0);
    return suma / datos.length;
}

/**
 * Calcula la mediana
 * @param {number[]} datos - Array de números
 * @returns {number} Mediana
 */
function calcularMediana(datos) {
    if (datos.length === 0) throw new Error('Array vacío');
    const ordenados = [...datos].sort((a, b) => a - b);
    const mitad = Math.floor(ordenados.length / 2);
    
    return ordenados.length % 2 === 0 
        ? (ordenados[mitad - 1] + ordenados[mitad]) / 2 
        : ordenados[mitad];
}

/**
 * Calcula la moda
 * @param {number[]} datos - Array de números
 * @returns {number|string} Moda o mensaje
 */
function calcularModa(datos) {
    if (datos.length === 0) throw new Error('Array vacío');
    
    const frecuencia = {};
    datos.forEach(v => frecuencia[v] = (frecuencia[v] || 0) + 1);
    
    let maxFrec = 0;
    let moda = null;
    
    for (const v in frecuencia) {
        if (frecuencia[v] > maxFrec) {
            maxFrec = frecuencia[v];
            moda = parseFloat(v);
        }
    }
    
    if (maxFrec === 1 && datos.length > 1) return "No hay moda única";
    return moda;
}

/**
 * Calcula el rango
 * @param {number[]} datos - Array de números
 * @returns {number} Rango
 */
function calcularRango(datos) {
    if (datos.length === 0) throw new Error('Array vacío');
    return Math.max(...datos) - Math.min(...datos);
}
                

04. Complejidad Algorítmica

Media:

Tiempo: $O(n)$ | Espacio: $O(1)$

Mediana:

Tiempo: $O(n \log n)$ | Espacio: $O(n)$

Moda:

Tiempo: $O(n)$ | Espacio: $O(k)$

Rango:

Tiempo: $O(n)$ | Espacio: $O(1)$

05. Ejemplos de Uso

Dataset 1:

Entrada: 10, 20, 20, 30, 45, 50, 60
Media: 33.57 | Mediana: 30 | Moda: 20 | Rango: 50

Dataset 2:

Entrada: 5, 10, 15, 20, 25, 30
Media: 17.5 | Mediana: 17.5 | Moda: No hay moda | Rango: 25

← Volver al Portfolio