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:
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:
- Identificar patrones en datasets de entrenamiento
- Preprocesar datos antes de aplicar algoritmos de Machine Learning
- Comprender la distribución de características en modelos predictivos
- Establecer benchmarks para comparar rendimiento de modelos
02. Fundamento Matemático
Fórmulas matemáticas utilizadas en esta implementación:
Promedio de todos los valores:
$$\bar{x} = \frac{\sum_{i=1}^{n} x_i}{n}$$
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}$$
Valor con mayor frecuencia: $\text{Moda} = \arg\max_{x_i} f(x_i)$
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:
// ========================================
// 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
Tiempo: $O(n)$ | Espacio: $O(1)$
Tiempo: $O(n \log n)$ | Espacio: $O(n)$
Tiempo: $O(n)$ | Espacio: $O(k)$
Tiempo: $O(n)$ | Espacio: $O(1)$
05. Ejemplos de Uso
Entrada: 10, 20, 20, 30, 45, 50, 60
Media: 33.57 | Mediana: 30 | Moda: 20 | Rango: 50
Entrada: 5, 10, 15, 20, 25, 30
Media: 17.5 | Mediana: 17.5 | Moda: No hay moda | Rango: 25