2010-03-16 101 views
8

En una tabla de base de datos MySQL (5.1) hay datos que representa:MySQL Math - ¿Es posible calcular una correlación en una consulta?

  • el tiempo que un usuario tarda en realizar una tarea y
  • el número de elementos que el usuario maneja durante la tarea.

¿Soportaría MySQL correlacionar los datos o necesito usar PHP/C# para calcular?

¿Dónde encontraría una buena fórmula para calcular la correlación (ha pasado mucho tiempo desde la última vez que hice esto)?

Respuesta

13

Aquí hay una aplicación aproximada del coeficiente de correlación de la muestra como se describe en:

Wikipedia - Correlation and Dependence

create table sample(x float not null, y float not null); 
insert into sample values (1, 10), (2, 4), (3, 5), (6,17); 

select @ax := avg(x), 
     @ay := avg(y), 
     @div := (stddev_samp(x) * stddev_samp(y)) 
from sample; 

select sum((x - @ax) * (y - @ay))/((count(x) -1) * @div) from sample; 
+---------------------------------------------------------+ 
| sum((x - @ax) * (y - @ay))/((count(x) -1) * @div) | 
+---------------------------------------------------------+ 
|          0.700885077729073 | 
+---------------------------------------------------------+ 
+0

Gracias Martin. Funciona muy bien - Tengo una correlación de .39 - un poco débil pero en el camino correcto. –

0

Hay dos sabores del coeficiente de correlación de Pearson, uno para una muestra y una para toda una población. Estas son fórmulas de paso único y, creo, correctas para ambos:

-- Methods for calculating the two Pearson correlation coefficients 
SELECT 
     -- For Population 
     (avg(x * y) - avg(x) * avg(y))/
     (sqrt(avg(x * x) - avg(x) * avg(x)) * sqrt(avg(y * y) - avg(y) * avg(y))) 
     AS correlation_coefficient_population, 
     -- For Sample 
     (count(*) * sum(x * y) - sum(x) * sum(y))/
     (sqrt(count(*) * sum(x * x) - sum(x) * sum(x)) * sqrt(count(*) * sum(y * y) - sum(y) * sum(y))) 
     AS correlation_coefficient_sample 
    FROM your_table; 

Desarrollé y probé esto como T-SQL. El código que generó los datos de prueba no se tradujo a MySQL pero las fórmulas deberían. Asegúrate de que tus valores x e y sean decimales; las matemáticas enteras pueden tener un impacto significativo en estos cálculos.

Cuestiones relacionadas