Un diagrama de dispersión representa pares de valores para explorar la relación entre dos variables cuantitativas. La nube de puntos permite observar dirección, forma, fuerza, grupos y valores atípicos.
Cuando cada observación tiene dos medidas relacionadas, podemos representarla como un punto (x, y). La primera variable se coloca en el eje horizontal y la segunda en el eje vertical.
La colección de puntos se denomina nube de dispersión. Su forma puede sugerir una relación positiva, negativa, inexistente, lineal, curva o formada por varios grupos.
Se utiliza cuando interesa estudiar si dos variables cuantitativas cambian juntas:
No es el gráfico principal para una única variable, categorías nominales o una serie temporal en la que solo interesa el orden cronológico.
Consideremos el tamaño de una solicitud en kilobytes y el tiempo necesario para procesarla:
| Observación | Tamaño x (KB) | Tiempo y (ms) | Punto |
|---|---|---|---|
| 1 | 10 | 42 | (10, 42) |
| 2 | 20 | 48 | (20, 48) |
| 3 | 30 | 53 | (30, 53) |
| 4 | 40 | 61 | (40, 61) |
| 5 | 50 | 65 | (50, 65) |
| 6 | 60 | 72 | (60, 72) |
| 7 | 70 | 78 | (70, 78) |
Cada fila debe conservar la correspondencia entre x e y. Mezclar el orden de una columna destruiría la relación entre las variables.
| Dirección | Patrón | Lectura |
|---|---|---|
| Positiva | Los puntos tienden a subir hacia la derecha. | Valores altos de x suelen acompañarse de valores altos de y. |
| Negativa | Los puntos tienden a bajar hacia la derecha. | Valores altos de x suelen acompañarse de valores bajos de y. |
| Nula | No se observa una orientación definida. | No hay evidencia visual de relación lineal. |
La forma describe si la nube es aproximadamente lineal, curva, escalonada o tiene varios grupos. La fuerza indica cuánto se concentran los puntos alrededor de ese patrón.
Una relación fuerte no exige que todos los puntos estén exactamente sobre una línea. Una relación débil puede conservar una dirección general, aunque con mucha dispersión vertical.
Cambia el conjunto de datos, muestra una recta de tendencia y observa cómo varían la pendiente y el coeficiente de correlación de Pearson.
El coeficiente de correlación de Pearson, representado por r, resume la dirección y la intensidad de una relación lineal:
Un valor cercano a cero no descarta una relación curva. Correlación mide asociación lineal, no cualquier patrón posible.
La correlación compara cómo se alejan x e y de sus respectivas medias:
Si las observaciones que están por encima de la media de x también suelen estar por encima de la media de y, la covarianza es positiva. Si una variable queda arriba cuando la otra queda abajo, la relación tiende a ser negativa.
El valor de r no tiene unidades y no cambia si se convierten metros a centímetros, aunque sí puede cambiar la lectura del gráfico si las escalas se eligen mal.
Una recta de regresión lineal puede resumir la tendencia media:
La recta no tiene que pasar por todos los puntos. Describe una tendencia promedio y permite estimar dentro del rango observado.
En el ejemplo de tamaño y latencia, una pendiente positiva indica que las solicitudes mayores tienden a tardar más. El intercepto puede no tener una interpretación práctica si x = 0 queda fuera del rango de datos.
La pendiente no debe interpretarse como una ley exacta para cada caso individual. Es un cambio promedio dentro del contexto y del rango estudiado.
En una regresión lineal simple, R² = r² indica qué proporción de la variabilidad de y queda asociada con el modelo lineal de x.
Por ejemplo, R² = 0,64 puede describirse como un 64 % de variabilidad explicada por el modelo lineal en esa muestra. No significa que el 64 % de cada observación sea causado por x.
Un punto alejado puede cambiar mucho la pendiente y la correlación, especialmente si también está lejos en el eje x. Por eso conviene observar el gráfico antes de confiar en un único número.
Un atípico puede ser un error, un caso excepcional o una señal importante. Nunca se elimina automáticamente: primero se revisan los datos y el contexto.
Una nube general puede esconder varios grupos. Por ejemplo, dos tipos de dispositivo pueden tener relaciones diferentes entre tamaño y latencia aunque el gráfico combinado parezca débil.
El color o la forma de los puntos puede representar una tercera variable categórica. Si se usa, debe incluirse una leyenda y no debe depender solo del color.
Que dos variables se muevan juntas no demuestra que una provoque la otra. Puede existir una causa común, una relación inversa, una coincidencia temporal o un sesgo de selección.
Por ejemplo, ventas y temperatura pueden aumentar juntas durante una temporada, pero eso no prueba que una variable cause directamente la otra. Para hablar de causalidad se necesitan diseño, contexto y análisis adicionales.
Una escala truncada puede hacer que una relación parezca más fuerte; una escala excesivamente amplia puede ocultarla. Los ejes deben mostrar límites razonables y estar claramente etiquetados.
En algunas variables, como tiempos o ingresos, una escala logarítmica puede facilitar la lectura. La transformación debe informarse porque cambia la interpretación de distancias y pendientes.
Este ejemplo calcula una recta de regresión, imprime sus parámetros y dibuja los puntos con ejes, escala y línea de tendencia.
const datos = [
{ x: 10, y: 42 }, { x: 20, y: 48 }, { x: 30, y: 53 },
{ x: 40, y: 61 }, { x: 50, y: 65 }, { x: 60, y: 72 },
{ x: 70, y: 78 }
];
const mediaX = datos.reduce((suma, dato) => suma + dato.x, 0) / datos.length;
const mediaY = datos.reduce((suma, dato) => suma + dato.y, 0) / datos.length;
const numerador = datos.reduce((suma, dato) => suma + (dato.x - mediaX) * (dato.y - mediaY), 0);
const denominador = datos.reduce((suma, dato) => suma + (dato.x - mediaX) ** 2, 0);
const pendiente = numerador / denominador;
const intercepto = mediaY - pendiente * mediaX;
const correlacion = numerador / Math.sqrt(
denominador * datos.reduce((suma, dato) => suma + (dato.y - mediaY) ** 2, 0)
);
console.log('Recta: y =', intercepto.toFixed(2), '+', pendiente.toFixed(2), 'x');
console.log('Correlación r:', correlacion.toFixed(3));
if (typeof document !== 'undefined') {
const canvas = document.getElementById('canvasDispersionCodigo');
const contexto = canvas.getContext('2d');
const area = { izquierda: 70, derecha: 770, arriba: 60, base: 360 };
const escalaX = valor => area.izquierda + (valor - 0) / 80 * (area.derecha - area.izquierda);
const escalaY = valor => area.base - (valor - 30) / 60 * (area.base - area.arriba);
contexto.clearRect(0, 0, canvas.width, canvas.height);
contexto.fillStyle = '#fbfdff';
contexto.fillRect(0, 0, canvas.width, canvas.height);
contexto.fillStyle = '#17324d';
contexto.font = 'bold 18px Segoe UI, Arial';
contexto.fillText('Diagrama de dispersión', 22, 29);
contexto.strokeStyle = '#d8e8f7';
contexto.lineWidth = 1;
contexto.font = '11px Segoe UI, Arial';
contexto.fillStyle = '#28587d';
contexto.textAlign = 'center';
for (let valor = 0; valor <= 80; valor += 10) {
const x = escalaX(valor);
contexto.beginPath(); contexto.moveTo(x, area.arriba); contexto.lineTo(x, area.base); contexto.stroke();
contexto.fillText(valor, x, area.base + 18);
}
contexto.textAlign = 'right';
for (let valor = 30; valor <= 90; valor += 10) {
const y = escalaY(valor);
contexto.beginPath(); contexto.moveTo(area.izquierda, y); contexto.lineTo(area.derecha, y); contexto.stroke();
contexto.fillText(valor, area.izquierda - 8, y + 4);
}
contexto.strokeStyle = '#28587d';
contexto.lineWidth = 2;
contexto.beginPath(); contexto.moveTo(area.izquierda, area.arriba); contexto.lineTo(area.izquierda, area.base); contexto.lineTo(area.derecha, area.base); contexto.stroke();
contexto.fillStyle = '#28587d';
contexto.textAlign = 'center';
contexto.font = '13px Segoe UI, Arial';
contexto.fillText('Tamaño de entrada (KB)', (area.izquierda + area.derecha) / 2, area.base + 42);
contexto.save(); contexto.translate(18, (area.arriba + area.base) / 2); contexto.rotate(-Math.PI / 2); contexto.fillText('Tiempo (ms)', 0, 0); contexto.restore();
contexto.fillStyle = '#e76f51';
datos.forEach(dato => {
contexto.beginPath(); contexto.arc(escalaX(dato.x), escalaY(dato.y), 6, 0, Math.PI * 2); contexto.fill();
});
contexto.strokeStyle = '#245b7c';
contexto.lineWidth = 3;
contexto.beginPath(); contexto.moveTo(escalaX(0), escalaY(intercepto)); contexto.lineTo(escalaX(80), escalaY(intercepto + pendiente * 80)); contexto.stroke();
}El gráfico debe indicar qué representa cada eje, sus unidades, el tamaño de muestra y el significado de la línea de tendencia. El resumen textual debe incluir dirección, correlación y posibles atípicos.
Si se codifica una tercera variable con color, también deben utilizarse formas, etiquetas o una tabla. El gráfico no debe depender exclusivamente de la visión del color.
El diagrama de dispersión es una herramienta fundamental para estudiar relaciones entre dos variables cuantitativas. Antes de calcular un coeficiente, conviene mirar la nube: la forma de los datos puede revelar patrones que un único número oculta.
La recta de regresión y la correlación ayudan a resumir una relación, pero deben interpretarse con cuidado, dentro del rango observado y sin convertir automáticamente una asociación en una explicación causal. En el próximo tema estudiaremos las medidas de tendencia central.