सहसंबंध गुणांक की गणना करें


9

एक्स और वाई की घटनाओं की संख्या को देखते हुए, पियर्सन के सहसंबंध गुणांक की गणना करें। प्रत्येक घटना की संभावना बराबर है, इसलिए अपेक्षित मूल्यों की गणना प्रत्येक श्रृंखला को संक्षेप में और परीक्षणों की संख्या से विभाजित करके की जा सकती है।

इनपुट

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

उत्पादन

0.769

सबसे छोटा कोड जीतता है। इनपुट स्टड या आर्ग द्वारा हो सकता है। आउटपुट स्टडआउट द्वारा होगा।

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

गणित के लिए इनपुट के लिए डेविड के विचार के आधार पर (बिलिन मीन का उपयोग करके 86 चार)

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

हमारे अपने मतलब का उपयोग करके स्कर्टिंग (101 char)

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

अपने खुद के मतलब का उपयोग करते हुए, गणितज्ञ कोड की बहुत अच्छी सुव्यवस्थितता!
डेविड नोव

MMa कोड को छोटा किया जा सकता है। डेविड के जवाब के तहत मेरी टिप्पणी देखें। इसके अलावा, आपके कोड में आप परिभाषित कर सकते हैंm=Total@#/Length@#&
डॉ। बेलिसरियस

जवाबों:


3

PHP 144 बाइट्स

<?
for(;fscanf(STDIN,'%f%f',$$n,${-$n});$f+=${-$n++})$e+=$$n;
for(;$$i;$z+=$$i*$a=${-$i++}-=$f/$n,$y+=$a*$a)$x+=$$i*$$i-=$e/$n;
echo$z/sqrt($x*$y);

मूल पोस्ट में दिए गए प्रारूप में, STDIN से इनपुट लेता है। परिणाम:

.76909044055492

वेक्टर डॉट उत्पाद का उपयोग करना:

जहां इनपुट वैक्टर क्रमशः और क्रमशः नीचे की ओर समायोजित होते हैं।

पर्ल 112 बाइट्स

/ /,$e+=$`,$f+=$',@v=($',@v)for@u=<>;
$x+=($_-=$e/$.)*$_,$y+=($;=$f/$.-pop@v)*$;,$z-=$_*$;for@u;
print$z/sqrt$x*$y

.76909044055492

वही अलग, अलग भाषा। दोनों मामलों में, 'पठनीयता' के लिए नई लाइनें जोड़ी गई हैं, और आवश्यक नहीं हैं। लंबाई में एकमात्र उल्लेखनीय अंतर पहली पंक्ति है: इनपुट का पार्सिंग।


5

गणितज्ञ 34 बाइट्स

Pearson उत्पाद क्षण सहसंबंध प्राप्त करने के कुछ तरीके यहां दिए गए हैं। वे सभी एक ही परिणाम उत्पन्न करते हैं। डॉ। बिसरिसेर से: 34 बाइट्स

Dot@@Normalize/@(#-Mean@#&)/@{x,y}

अंतर्निहित सहसंबंध समारोह I : 15 वर्ण

यह मानता है कि xऔर yप्रत्येक चर के अनुरूप सूची हैं।

x~Correlation~y

.७६,९०९


अंतर्निहित सहसंबंध समारोह II : 31 वर्ण

यह माना जाता है कि डी ऑर्डर किए गए जोड़े की एक सूची है।

d[[;;,1]]~Correlation~d[[;;,2]]

.७६,९०९

ए सिमंस के ;;लिए Allधन्यवाद का उपयोग ।


मानक विचलन समारोह पर निर्भर : 118 115 वर्ण

सहसंबंध द्वारा निर्धारित किया जा सकता है:

s=StandardDeviation;
m=Mean;
n=Length@d;
x=d[[;;,1]];
y=d[[;;,2]];
Sum[((x[[i]]-m@x)/s@x)((y[[i]]-m@y)/s@y),{i,n}]/(n-1)

.७६,९०९


हाथ से लुढ़का सहसंबंध : 119 वर्ण

मान लिया xऔर yसूचियाँ हैं ...

s=Sum;n=Length@d;m@p_:=Tr@p/n;
(s[(x[[i]]-m@x)(y[[i]]-m@y),{i,n}]/Sqrt@(s[(x[[i]]-m@x)^2,{i,n}] s[(y[[i]] - m@y)^2,{i,n}]))

.७६,९०९


मुझे आखिरी कोड स्निपेट के लिए 0.076909 मिलता है। इसके अलावा आपके पास s = StandardDeviation क्यों है; जब एस कभी लागू नहीं होता है?
मील

क्यू-भाषा के जवाब में, गणित में मान्यताओं को ध्यान में रखते हुए, यह सिर्फ x ~ सहसंबंध ~ y है
विटालि कौरोव

@VitaliyKaurov, हाँ, अच्छी बात है, अब इस पर ध्यान दिया गया।
नोव

@milest। बेशक! StandardDeviation पहले के समाधानों से "विरासत" था। मैं आरक्षित करेंगे के बारे में सोचो sके लिए Sum
डेविड नोव

@milest अंतिम आउटपुट में त्रुटि /(n-1)पहले के समाधान से गलती से होने के कारण भी थी। अब सही किया गया।
डेविड नोव

2

क्यू

मान लिया गया कि अनुमति दी गई है और x, y डेटा सेपरेट वैक्टर (7 वर्ण) हैं:

x cor y

यदि डेटा को ऑर्डर किए गए जोड़े के रूप में संग्रहीत किया जाता है, जैसा कि डेविड कारहर द्वारा इंगित किया गया है, तो हमें (12 वर्णों के लिए) मिलता है:

{(cor).(+)x}

सहसंबंध डेटा आमतौर पर आदेशित जोड़े से मिलकर नहीं बनता है?
डेविड नोव

मैंने उस मामले के लिए अल विकल्प जोड़ा
स्कीवे

2

MATLAB / सप्टक

केवल बिल-इन का प्रदर्शन करने के उद्देश्य से:

octave:1> corr(X,Y)
ans =  0.76909
octave:2> 

2

एपीएल 57

डॉट उत्पाद दृष्टिकोण का उपयोग करना:

a←1 2 3 4 5 6 7 8 9 10 11

b←6.86 5.92 6.08 8.34 8.7 8.16 8.22 7.68 12.04 8.6 10.96

(a+.×b)÷((+/(a←a-(+/a)÷⍴a)*2)*.5)×(+/(b←b-(+/b)÷⍴b)*2)*.5

0.7690904406         

2

जे, 30 27 बाइट्स

([:+/*%*&(+/)&.:*:)&(-+/%#)

इस बार दो तर्कों को लेते हुए एक समारोह के रूप में। इसकी गणना के लिए वेक्टर फॉर्मूला का उपयोग करता है।

प्रयोग

   f =: ([:+/*%*&(+/)&.:*:)&(-+/%#)
   (1 2 3 4 5 6 7 8 9 10 11) f (6.86 5.92 6.08 8.34 8.7 8.16 8.22 7.68 12.04 8.6 10.96)
0.76909

व्याख्या

अलग-अलग तर्कों के रूप में दो सूचियों को और बी लेता है।

([:+/*%*&(+/)&.:*:)&(-+/%#)  Input: a on LHS, b on RHS
                   &(     )  For a and b
                         #     Get the count
                      +/       Reduce using addition to get the sum
                        %      Divide the sum by the count to get the average
                     -         Subtract the initial value from the average
                             Now a and b have both been shifted by their average
                             For both a and b
                *:             Square each value
         (+/)&.:               Reduce the values using addition to get the sum
                               Apply in the inverse of squaring to take the square root
                               of the sum to get the norm
       *&                    Multiply norm(a) by norm(b)
     *                       Multiply a and b elementwise
      %                      Divide a*b by norm(a)*norm(b) elementwise
 [:+/                        Reduce using addition to the sum which is the
                             correlation coefficient and return it

आप उन्हें देने के लिए एक साथ सिलाई करके अंतिम पंक्ति में xऔर बाहर कर सकते हैंy,.((m@:*/@|:-*/@m)%%:@*/@(m@:*:-*:@m))x,.y
गैरेथ

मुझे स्वीकार करना होगा, अपने आप में कोड बहुत खूबसूरत लग रहा है ... किसी ऐसे व्यक्ति के रूप में बोल रहा है जो अपने गैर-अल्फ़ान्यूमेरिक कोड से प्यार करता है ...;)
WallyWest

+/ .*&(%+/&.:*:)&(-+/%#)ओलेग द्वारा जे मंचों पर मान्यता प्राप्त एक छोटा 24 बाइट्स संस्करण है ।
मीलों

1

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

E=lambda x:sum(x)/len(x)
S=lambda x:(sum((E(x)-X)**2for X in x)/len(x))**.5
lambda x,y:E([(X-E(x))*(Y-E(y))for X,Y in zip(x,y)])/S(x)/S(y)

2 सहायक कार्य ( Eऔर S, क्रमशः मूल्य और मानक विचलन के लिए) परिभाषित किए गए हैं। इनपुट 2 पुनरावृत्तियों (सूचियों, टुपल्स, आदि) के रूप में अपेक्षित है। इसे ऑनलाइन आज़माएं


1

Oracle SQL 11.2, 152 बाइट्स (प्रदर्शनी के लिए)

SELECT CORR(a,b)FROM(SELECT REGEXP_SUBSTR(:1,'[^ ]+',1,2*LEVEL-1)a,REGEXP_SUBSTR(:1,'[^ ]+',1,2*LEVEL)b FROM DUAL CONNECT BY INSTR(:1,' ',2,LEVEL-1)>0);

संयुक्त राष्ट्र के golfed

SELECT CORR(a,b)
FROM
(
  SELECT REGEXP_SUBSTR(:1, '[^ ]+', 1, 2*LEVEL-1)a, REGEXP_SUBSTR(:1, '[^ ]+', 1, 2*LEVEL)b
  FROM DUAL
  CONNECT BY INSTR(:1, ' ', 2, LEVEL - 1) > 0
)

इनपुट स्ट्रिंग को डेटाबेस के समान दशमलव विभाजक का उपयोग करना चाहिए।


1

साइपाय के साथ पायथन 3, 52 बाइट्स (प्रदर्शनी के लिए)

from scipy.stats import*
lambda x,y:pearsonr(x,y)[0]

एक अनाम फ़ंक्शन जो सूची के रूप में दो डेटा सेट का इनपुट लेता है x और y, सहसंबंध गुणांक देता है।

यह काम किस प्रकार करता है

यहाँ बहुत कुछ नहीं चल रहा है; SciPy में एक बिल्डिन है जो गुणांक और p- मान दोनों को गैर-सहसंबंध के परीक्षण के लिए लौटाता है, इसलिए फ़ंक्शन बस डेटा सेट को इस तक पहुंचाता है और पहले तत्व को लौटाता है(coefficient, p-value) पहुंचाता है ट्यूल बिल्डिन द्वारा ।

Ideone पर इसे आज़माएं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.