Dada una serie de números para los eventos X e Y, calcule el coeficiente de correlación de Pearson. La probabilidad de cada evento es igual, por lo que los valores esperados se pueden calcular simplemente sumando cada serie y dividiendo por el número de ensayos.
Entrada
1 6.86
2 5.92
3 6.08
4 8.34
5 8.7
6 8.16
7 8.22
8 7.68
9 12.04
10 8.6
11 10.96
Salida
0.769
El código más corto gana. La entrada puede ser por stdin o arg. La salida será por stdout.
Editar: No se deben permitir las funciones integradas (es decir, el valor esperado calculado, la varianza, la desviación, etc.) para permitir una mayor diversidad en las soluciones. Sin embargo, siéntase libre de demostrar un lenguaje que sea adecuado para la tarea usando builtins (para exhibición).
Basado en la idea de David de entrada para Mathematica (86 caracteres usando la media incorporada)
m=Mean;x=d[[All,1]];y=d[[All,2]];(m@(x*y)-m@x*m@y)/Sqrt[(m@(x^2)-m@x^2)(m@(y^2)-m@y^2)]
m = Mean;
x = d[[All,1]];
y = d[[All,2]];
(m@(x*y) - m@x*m@y)/((m@(x^2) - m@x^2)(m@(y^2) - m@y^2))^.5
Bordeando usando nuestra propia media (101 caracteres)
m=Total[#]/Length[#]&;x=d[[All,1]];y=d[[All,2]];(m@(x*y)-m@x*m@y)/((m@(x^2)-m@x^2)(m@(y^2)-m@y^2))^.5
m = Total[#]/Length[#]&;
x = d[[All,1]];
y = d[[All,2]];
(m@(x*y)-m@x*m@y)/((m@(x^2)-m@x^2)(m@(y^2)-m@y^2))^.5
fuente
m=Total@#/Length@#&
Respuestas:
PHP 144 bytes
Toma la entrada de STDIN, en el formato proporcionado en la publicación original. Resultado:
Usando el producto punto vectorial:
donde están los vectores de entrada ajustados hacia abajo por y respectivamente.
Perl 112 bytes
Mismo alg, diferente idioma. En ambos casos, se han agregado nuevas líneas para 'legibilidad', y no son necesarias. La única diferencia notable en la longitud es la primera línea: el análisis de la entrada.
fuente
Mathematica 34 bytes
Aquí hay algunas maneras de obtener la correlación de momento del producto Pearson. Todos producen el mismo resultado. Del Dr. belisario: 34 bytes
Función de correlación incorporada I : 15 caracteres
Esto supone que
x
yy
son listas correspondientes a cada variable.Función de correlación incorporada II : 31 caracteres
Esto supone que d es una lista de pares ordenados.
El uso de
;;
porAll
gracias a A Simmons.Confiando en la función de desviación estándar :
118115 caracteresLa correlación puede determinarse por:
Correlación enrollada a mano : 119 caracteres
Asumiendo
x
yy
son listas ...fuente
s
paraSum
./(n-1)
que la solución anterior lo transfirió por error . Ahora corregido.Q
Suponiendo que los valores incorporados están permitidos y los datos x, y son vectores separados (7 caracteres):
Si los datos se almacenan como pares ordenados, como lo indica David Carraher, obtenemos (para 12 caracteres):
fuente
MATLAB / Octave
Con el fin de demostrar únicamente los elementos integrados:
fuente
APL 57
Usando el enfoque del producto punto:
fuente
J,
3027 bytesEsta vez como una función tomando dos argumentos. Utiliza la fórmula vectorial para calcularlo.
Uso
Explicación
Toma dos listas una y b como argumentos separados.
fuente
x
yy
en la línea final uniéndolos,.
para darle((m@:*/@|:-*/@m)%%:@*/@(m@:*:-*:@m))x,.y
+/ .*&(%+/&.:*:)&(-+/%#)
reconocido por Oleg sobre los J foros .Python 3, 140 bytes
Se definen 2 funciones auxiliares (
E
yS
, para el valor esperado y la desviación estándar, respectivamente). La entrada se espera como 2 iterables (listas, tuplas, etc.). Pruébalo en línea .fuente
Oracle SQL 11.2, 152 bytes (para exhibición)
Sin golf
La cadena de entrada debe usar el mismo separador decimal que la base de datos.
fuente
Python 3 con SciPy, 52 bytes (para exhibición)
Una función anónima que toma la entrada de los dos conjuntos de datos como listas
x
yy
, y devuelve el coeficiente de correlación.Cómo funciona
No hay mucho que hacer aquí; SciPy tiene un valor incorporado que devuelve tanto el coeficiente como el valor p para probar la no correlación, por lo que la función simplemente pasa los conjuntos de datos a esto y devuelve el primer elemento de la
(coefficient, p-value)
tupla devuelto por el valor incorporado.Pruébalo en Ideone
fuente