Dada uma série de números para os eventos X e Y, calcule o coeficiente de correlação de Pearson. A probabilidade de cada evento é igual; portanto, os valores esperados podem ser calculados simplesmente somando cada série e dividindo pelo número de tentativas.
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
Resultado
0.769
O menor código vence. A entrada pode ser feita por stdin ou arg. A saída será por stdout.
Editar: Funções internas não devem ser permitidas (ou seja, valor esperado calculado, variação, desvio, etc.) para permitir mais diversidade nas soluções. No entanto, sinta-se à vontade para demonstrar um idioma adequado para a tarefa usando os recursos internos (para exibição).
Com base na idéia de David para entrada no Mathematica (86 caracteres usando a média 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
Contornando usando nossa própria média (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
fonte
m=Total@#/Length@#&
Respostas:
PHP 144 bytes
Recebe a entrada de STDIN, no formato fornecido na postagem original. Resultado:
Usando o produto de pontos vetoriais:
onde os vetores de entrada são ajustados para baixo por e respectivamente.
Perl 112 bytes
Mesmo alg, idioma diferente. Nos dois casos, novas linhas foram adicionadas para 'legibilidade' e não são necessárias. A única diferença notável no comprimento é a primeira linha: a análise da entrada.
fonte
Mathematica 34 bytes
Aqui estão algumas maneiras de obter a correlação do momento do produto Pearson. Todos eles produzem o mesmo resultado. Do Dr. belisarius: 34 bytes
Função de Correlação Integrada I : 15 caracteres
Isso pressupõe que
x
ey
são listas correspondentes a cada variável.Função de correlação interna II : 31 caracteres
Isso pressupõe que d é uma lista de pares ordenados.
O uso de
;;
paraAll
graças a A Simmons.Confiando na função de desvio padrão :
118115 caracteresA correlação pode ser determinada por:
Correlação enrolada à mão : 119 caracteres
Assumindo
x
ey
são listas ...fonte
s
paraSum
./(n-1)
uma transferência incorreta da solução anterior. Agora corrigido.Q
Supondo que os buildins são permitidos ex, os dados x, y são vetores separados (7 caracteres):
Se os dados são armazenados como pares ordenados, conforme indicado por David Carraher, obtemos (para 12 caracteres):
fonte
MATLAB / Octave
Com o objetivo de demonstrar apenas os integrados:
fonte
APL 57
Usando a abordagem do produto escalar:
fonte
J,
3027 bytesDesta vez, como uma função, tendo dois argumentos. Usa a fórmula do vetor para calculá-lo.
Uso
Explicação
Toma duas listas um e b como argumentos separados.
fonte
x
ey
na linha final por costura-los juntos com,.
a dar-lhe((m@:*/@|:-*/@m)%%:@*/@(m@:*:-*:@m))x,.y
+/ .*&(%+/&.:*:)&(-+/%#)
reconhecido por Oleg nas J fóruns .Python 3, 140 bytes
2 funções auxiliares (
E
eS
, para o valor esperado e desvio padrão, respectivamente) são definidas. A entrada é esperada como 2 iteráveis (listas, tuplas, etc.). Experimente online .fonte
Oracle SQL 11.2, 152 bytes (para exibição)
Sem golfe
A sequência de entrada deve usar o mesmo separador decimal que o banco de dados.
fonte
Python 3 com SciPy, 52 bytes (para exibição)
Uma função anônima que leva a entrada dos dois conjuntos de dados como listas
x
ey
, e retorna o coeficiente de correlação.Como funciona
Não há muita coisa acontecendo aqui; O SciPy possui um built-in que retorna o coeficiente e o valor-p para testar a não-correlação; portanto, a função simplesmente passa os conjuntos de dados para ele e retorna o primeiro elemento da
(coefficient, p-value)
tupla retornada pelo built-in.Experimente no Ideone
fonte