Sıra Korelasyon Katsayısı


13

Genel korelasyon katsayısı (2d'de) bir dizi noktanın bir çizgi ile ne kadar iyi tanımlanabileceğini ölçer ve eğer evet ise, işareti bize pozitif veya negatif bir korelasyonumuz olup olmadığını söyler. Ancak bu, noktaların koordinatlarının aslında nicel olarak örneğin ölçümler olarak yorumlanabileceğini varsayar.

Bunu yapamıyorsanız ancak yine de koordinatları sipariş edebiliyorsanız , sıralama korelasyon katsayısı vardır : Noktaların tekdüze bir işlevle ne kadar iyi tanımlanabileceğini ölçer .

Meydan okuma

2d noktalarının bir listesi verildiğinde, sıra korelasyon katsayılarını belirleyin .

ayrıntılar

  • Girdinin pozitif tamsayı (ancak zorunda değilsiniz) veya başka bir "sıralanabilir" değer olduğunu varsayabilirsiniz.
  • Noktalar bir nokta listesi veya x ve y koordinatları için iki liste veya bir matris veya 2d dizisi vb. Olarak alınabilir.
  • Çıktı, 0 ile 1 arasında gerçek bir sayıyı temsil etmesi gerektiği için bir kayan nokta veya rasyonel tip olmalıdır.

Tanımlar

Rütbe: Bir sayı listesi verildiğinde , her bir girişe rütbe adı verilen X=[x(1),...,x(n)]pozitif bir sayı atayabiliriz . Bunu listeyi sıralayarak ve sıralı listenin dizinini atayarak yaparız . İki veya daha fazla aynı değere sahipse, sadece ilgili tüm endekslerin aritmetik ortalamasını sıralama olarak kullanırız. Misal:rx(i)x(i)x(i)rx(i)x(i)

          List: [21, 10, 10, 25, 3]
Indices sorted: [4, 2, 3, 5, 1]

Sayı 10burada iki kez görünür. Sıralanan listede endeksleri işgal eder 2ve 3. Bunların aritmetik ortalaması 2.5, sıralamaların

         Ranks: [4, 2.5, 2.5, 5, 1]

Sıra Korelasyon Katsayısı : Let [(x(1),y(1)),(x(2),y(2)),...,(x(n),y(n))]verilen noktalar nerede olmak her x(i)ve y(i)gerçek bir sayıdır her biri için (wlog bunu bir tam sayıdır varsayabiliriz.) i=1,...,n, Hesapladığımız rütbe rx(i) ve ry(i)içinde x(i)ve y(i)sırasıyla.

Izin d(i) = rx(i)-ry(i)olmak rütbe farkı ve izin Stoplamı S = d(1)^2 + d(2)^2 + ... + d(n)^2. Sonra sıra korelasyon katsayısı rho verilir

rho = 1 - 6 * S / (n * (n^2-1))

Misal

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   

Gönderen wikipedia : "Tüm n rütbeleri Eğer yalnızca ayrı tamsayılar , popüler formül kullanılarak hesaplanabilir"
rahnema1

Bununla ne söylemek istiyorsun?
flawr

Sağladığınız formülün, sıralamaların wikipedia'ya göre tamsayı olduğu özel durumlar için olduğunu söylüyorum. Bununla birlikte, formülü gibi sıralamalar için kullandınız 2.5.
rahnema1

İlk etapta tamsayılar kullanıyorsanız. Ve bunu yapsanız bile, hala iyi bir yaklaşım elde edeceksiniz. Birçok yazar bu zorluğun formülünü tanım olarak bile kullanmaktadır. Ayrıca, bir sıralamanın kararsız olduğunu ve her zamanki korelasyon katsayısı kadar etkili bir anlama sahip olmadığını unutmayın . Fakat bütün bunlar bu meydan okuma için önemsizdir.
flawr

Yanıtlar:


5

MATL , 33 bayt

,it7#utb,&S]2XQw)]-Us6*1GntUq*/_Q

Çevrimiçi deneyin!

açıklama

,           % Do...twice
  it        %   Input a numeric vector. Duplicate
  7#u       %   Replace each element by a unique integer label (1, 2, ...)
  t         %   Duplicate
  b         %   Bubble up: moves original numeric vector to top
  ,         %   Do...twice
    &S      %     Sort and push the indices of the sorting
  ]         %   End
            %   The above do...twice loop gives the sorted indices (as
            %   explained in the challenge text) for the current input
  2XQ       %   Compute average for entries with the same integer label
  w         %   Swap: move vector of integer labels to top
  )         %   Index. This gives the rank vector for the current input
]           % End
-           % Subtract the two results. Gives d
Us          % Square each entry, sum of vector. S
6*          % Times 6. Gives 6*S
1G          % Push first input vector again
n           % Number of entries. Gives n
t           % Duplicate 
Uq          % Square, minus 1. Gives n^2-1
*           % Times. Gives n*(n^2-1)
/           % Divide. Gives 6*S/(n*(n^2-1))
_Q          % Negate, plus 1. Gives 1-6*S/(n*(n^2-1))

4
Daha önce bir şey yapan klavye ezmeye benzeyen bir şey görmedim. +1
HyperNeutrino

5

R , 64 60 bayt

function(x,y)1-6*sum((rank(x)-rank(y))^2)/((n=sum(x|1))^3-n)

Çevrimiçi deneyin!

rankR de istenen sıralamayı hesaplayan yapıdır; gerisi sadece işin geri kalanını yapmak için gereken matematiktir.

4 bayt tasarruf ettiği için CriminallyVulgar'a teşekkürler

Belirtildiği gibi yorumlarda , sıra korelasyon katsayısının belirtilen tanım geçerli bir cevap 26 byte olacaktır başka Spearman korelasyon katsayısı tam olarak uyuşmuyor:

function(x,y)cor(x,y,,"s")

2
Çiş 4 bayt tweak: (n ^ 3-n) son parantez için
CriminallyVulgar

@CriminallyVulgar teşekkürler! düğünüm yorumundan sonra çok uzun değildi, bu yüzden görmedim ...
Giuseppe

3

Python 3 , 141 bayt

lambda X,Y,Q=lambda U,S=sorted:[S(U).index(y)+S(U).count(y)/2+.5for y in U]:1-6*sum((i[1]-i[0])**2for i in zip(Q(X),Q(Y)))/(len(X)**3-len(X))

Bu, girdiyi xve ydeğerlerine karşılık gelen iki liste olarak alan anonim bir işlevi tanımlar . Çıktı bir kayan nokta değeri olarak döndürülür.

Çevrimiçi deneyin!


2

Mathematica, 89 bayt

(F[x_]:=Min@N@Mean@Position[Sort@x,#]&;1-6Tr[(F@#/@#-F@#2/@#2)^2]/((y=Length@#)(y^2-1)))&

Çevrimiçi deneyin! (matematik üzerinde çalışmak için "Tr" yerine "Total" yazılır)


0

Wolfram Dili (Mathematica) , 18 bayt

N[SpearmanRho@@#]&

Çevrimiçi deneyin!


Ne yazık ki, sorudaki RCC'nin tanımı Spearman Rho ile tam olarak eşleşmiyor gibi görünüyor - sadece farklı tamsayı girişleri durumunda çalışır. Örneğin, R cevabımı veya bağlantılı yorumu görün.
Giuseppe

Sorunun yazarı, bunun burada iyi olduğunu öne sürüyor gibi görünüyor . Soru Spearman Rho formülünü bir tanım olarak verdi, bu yüzden matematiksel yanlışlığına rağmen bunun geçerli olduğunu düşünürdüm.
nixpower
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.