Zwykły współczynnik korelacji (w 2d) mierzy, jak dobrze zestaw punktów można opisać linią, a jeśli tak, jego znak mówi nam, czy mamy korelację dodatnią czy ujemną. Zakłada się jednak, że współrzędne punktów mogą być interpretowane ilościowo, na przykład jako pomiary.
Jeśli nie możesz tego zrobić, ale nadal możesz uporządkować współrzędne, istnieje współczynnik korelacji rang : mierzy, jak dobrze punkty można opisać funkcją monotoniczną .
Wyzwanie
Biorąc pod uwagę listę punktów 2d, określ ich współczynnik korelacji rang .
Detale
- Możesz założyć, że dane wejściowe są dodatnimi liczbami całkowitymi (ale nie musisz) lub dowolnymi innymi „sortowalnymi” wartościami.
- Punkty można traktować jako listę punktów lub dwie listy dla współrzędnych xiy, macierzy lub tablicy 2d itp.
- Dane wyjściowe muszą być zmiennoprzecinkowe lub wymierne, ponieważ powinny reprezentować liczbę rzeczywistą z zakresu od 0 do 1.
Definicje
Ranga: Na podstawie listy liczb X=[x(1),...,x(n)]
możemy przypisać dodatnią liczbę o rx(i)
nazwie ranga do każdego wpisu x(i)
. Robimy to, sortując listę i przypisując indeks x(i)
w posortowanej liście rx(i)
. Jeśli dwa lub więcej x(i)
mają tę samą wartość, to po prostu używamy średniej arytmetycznej wszystkich odpowiednich wskaźników jako rangi. Przykład:
List: [21, 10, 10, 25, 3]
Indices sorted: [4, 2, 3, 5, 1]
Liczba 10
pojawia się tutaj dwa razy. Na posortowanej liście zajmowałby indeksy 2
i 3
. Średnia arytmetyczna tych liczb jest 2.5
taka, jak w przypadku rang
Ranks: [4, 2.5, 2.5, 5, 1]
Współczynnik korelacji rang : Pozwolić [(x(1),y(1)),(x(2),y(2)),...,(x(n),y(n))]
być podane punkty, w których każdy x(i)
i y(i)
jest to liczba rzeczywista Dla każdego (wlog można założyć, że jest liczbą całkowitą.) i=1,...,n
Możemy obliczyć rangę rx(i)
i ry(i)
od x(i)
i y(i)
odpowiednio.
Niech d(i) = rx(i)-ry(i)
będzie różnica rang i niech S
będzie sumą S = d(1)^2 + d(2)^2 + ... + d(n)^2
. Następnie współczynnik korelacji rang rho
jest podawany przez
rho = 1 - 6 * S / (n * (n^2-1))
Przykład
x y rx ry d d^2
21 15 4 5 -1 1
10 6 2&3 -> 2.5 2 0.5 0.25
10 7 2&3 -> 2.5 3 -0.5 0.25
25 11 5 4 1 1
3 5 1 1 0 0
rho = 1 - 6 * (1+0.25+0.25+1)/(5*(5^2-1)) = 0.875
źródło
2.5
.Odpowiedzi:
MATL , 33 bajty
Wypróbuj online!
Wyjaśnienie
źródło
R ,
6460 bajtówWypróbuj online!
rank
w R jest wbudowanym, który oblicza pożądaną rangę; reszta to tylko matematyka do wykonania reszty pracy.Podziękowania dla CriminallyVulgar za zapisanie 4 bajtów
Jak wspomniano w komentarzach , podana definicja współczynnika korelacji rang nie odpowiada dokładnie współczynnikowi korelacji Spearmana, w przeciwnym razie poprawna odpowiedź wynosiłaby 26 bajtów:
źródło
Python 3 , 141 bajtów
Definiuje to anonimową funkcję, która pobiera dane wejściowe jako dwie listy odpowiadające wartościom
x
iy
. Dane wyjściowe są zwracane jako wartość zmiennoprzecinkowa.Wypróbuj online!
źródło
Mathematica, 89 bajtów
Wypróbuj online! (aby pracować z matematyką, „Tr” zastępuje się „Total”)
źródło
Wolfram Language (Mathematica) , 18 bajtów
Wypróbuj online!
źródło