रैंक सहसंबंध गुणांक


13

सामान्य सहसंबंध गुणांक (2 डी में) मापता है कि एक पंक्ति द्वारा बिंदुओं का एक सेट कितनी अच्छी तरह वर्णित किया जा सकता है, और यदि हाँ, तो इसका संकेत हमें बताता है कि क्या हमारे पास सकारात्मक या नकारात्मक सहसंबंध है। लेकिन यह मानता है कि अंक के निर्देशांक वास्तव में माप के रूप में मात्रात्मक रूप से व्याख्या कर सकते हैं।

यदि आप ऐसा नहीं कर सकते, लेकिन आप अभी भी निर्देशांक का आदेश दे सकते हैं , तो रैंक सहसंबंध गुणांक है : यह मापता है कि अंक एक मोनोटोनिक फ़ंक्शन द्वारा कितनी अच्छी तरह वर्णित किए जा सकते हैं ।

चुनौती

2d अंकों की सूची को देखते हुए, उनके रैंक सहसंबंध गुणांक का निर्धारण करें ।

विवरण

  • आप इनपुट को सकारात्मक पूर्णांक मान सकते हैं (लेकिन आपके पास नहीं है), या कोई अन्य "सॉर्टेबल" मान।
  • बिंदुओं को बिंदुओं की सूची के रूप में लिया जा सकता है, या x- और y- निर्देशांक या मैट्रिक्स या 2d सरणी आदि के लिए दो सूची।
  • आउटपुट एक अस्थायी बिंदु या तर्कसंगत प्रकार होना चाहिए, क्योंकि यह 0 और 1 के बीच एक वास्तविक संख्या का प्रतिनिधित्व करना चाहिए।

परिभाषाएं

रैंक: संख्याओं की सूची को देखते हुए X=[x(1),...,x(n)]हम प्रत्येक प्रविष्टि के लिए रैंकrx(i) नामक एक सकारात्मक संख्या प्रदान कर सकते हैं । हम सूची छंटाई और के सूचकांक बताए द्वारा ऐसा करने क्रमबद्ध सूची में । यदि दो या दो से अधिक समान मूल्य हैं, तो हम रैंक के रूप में सभी संबंधित सूचकांकों के अंकगणितीय माध्य का उपयोग करते हैं। उदाहरण:x(i)x(i)rx(i)x(i)

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

यहां संख्या 10दो बार दिखाई देती है। क्रमबद्ध सूची में यह सूचकांकों पर कब्जा कर लेगा 2और 3। उन लोगों का अंकगणित माध्य है 2.5इसलिए वे रैंक हैं

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

रैंक सहसंबंध गुणांक : Let [(x(1),y(1)),(x(2),y(2)),...,(x(n),y(n))]दिया अंक हो जहां प्रत्येक x(i)और y(i)एक वास्तविक संख्या है प्रत्येक के लिए (wlog आप इसे एक पूर्णांक है ग्रहण कर सकते हैं।) i=1,...,nहम गणना रैंक rx(i) और ry(i)की x(i)और y(i)क्रमशः।

आज्ञा देना d(i) = rx(i)-ry(i)हो वरीयता श्रेणी अंतर और जाने Sयोग S = d(1)^2 + d(2)^2 + ... + d(n)^2। फिर रैंक सहसंबंध गुणांक rho द्वारा दिया जाता है

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

उदाहरण

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   

से विकिपीडिया : "केवल अगर सभी n रैंकों हैं अलग पूर्णांकों , यह लोकप्रिय सूत्र का उपयोग कर की जा सकती है"
rahnema1

आप उसके साथ क्या कहना चाहते हैं?
त्रुटिपूर्ण

मैं कहता हूं कि आपने जो सूत्र प्रदान किया है वह उन विशेष मामलों के लिए है जहां रैंक विकिपीडिया के अनुसार पूर्णांक हैं। लेकिन अगर आप इस तरह के रूप रैंकों के लिए सूत्र का उपयोग किया 2.5
rahnema1

ठीक है कि अगर आप पहली बार में पूर्णांक का उपयोग कर रहे हैं। और अगर आप ऐसा कर रहे हैं, तो भी आप एक अच्छा अनुमान लगाने वाले हैं। कई लेखक इस चुनौती के सूत्र का भी परिभाषा के रूप में उपयोग करते हैं। इसके अलावा ध्यान रखें कि एक रैंकिंग अस्थिर है और जरूरी नहीं कि एक सामान्य सहसंबंध गुणांक के रूप में इस तरह के एक प्रभावशाली अर्थ हो। लेकिन यह सब इस चुनौती के लिए अप्रासंगिक है।
दोष

जवाबों:


5

MATL , 33 बाइट्स

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

इसे ऑनलाइन आज़माएं!

व्याख्या

,           % 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
मैंने कीबोर्ड मैशिंग के लिए ऐसी समानता के साथ कुछ नहीं देखा है जो वास्तव में पहले कुछ करता है। +1
हाइपरन्यूट्रिनो 20

5

आर , 64 60 बाइट्स

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

इसे ऑनलाइन आज़माएं!

rankआर में वांछित रैंक की गणना करने वाला बिलिन है; बाकी काम करने के लिए सिर्फ गणित है।

4 बाइट बचाने के लिए CriminallyVulgar का धन्यवाद

जैसा कि टिप्पणियों में उल्लेख किया गया है , रैंक सहसंबंध गुणांक की निर्दिष्ट परिभाषा स्पीयरमैन सहसंबंध गुणांक के अनुरूप नहीं है, अन्यथा एक मान्य उत्तर 26 बाइट्स होगा:

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

2
वी 4 बाइट ट्वीक: (एन ^ 3-एन) अंतिम ब्रैकेट के लिए
क्रिमिनल

@CriminallyVulgar धन्यवाद! मेरी शादी आपकी टिप्पणी के बाद बहुत लंबी नहीं थी इसलिए मैंने इसे नहीं देखा ...
Giuseppe

3

पायथन 3 , 141 बाइट्स

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))

यह एक अनाम फ़ंक्शन को परिभाषित करता है जो इनपुट को मूल्यों xऔर yमूल्यों के अनुरूप दो सूचियों के रूप में लेता है । आउटपुट को फ़्लोटिंग-पॉइंट मान के रूप में लौटाया जाता है।

इसे ऑनलाइन आज़माएं!



0

दुर्भाग्य से ऐसा लगता है कि प्रश्न में RCC की परिभाषा स्पीयरमैन Rho से बिल्कुल मेल नहीं खाती है - यह अलग पूर्णांक इनपुट के मामले में ही काम करती है। उदाहरण के लिए देखें मेरा R उत्तर या उससे जुड़ी टिप्पणी।
ग्यूसेप

प्रश्न के लेखक को लगता है कि यह यहाँ ठीक है । प्रश्न ने स्पीयरमैन रो फार्मूला को एक परिभाषा के रूप में दिया, इसलिए मैं इसके गणितीय अशुद्धि के बावजूद इसे वैध मानूंगा।
निक्सपॉवर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.