Numpy - Korrelationskoeffizienten und die zugehörigen statistischen Funktionen nicht geben, die gleichen Ergebnisse
Für Daten X = [0,0,1,1,0]
und Y = [1,1,0,1,1]
>> np.corrcoef(X,Y)
gibt
array([[ 1. , -0.61237244],
[-0.61237244, 1. ]])
Kann ich jedoch nicht reproduzieren dieses Ergebnis mit np.var
und np.cov
gegeben die Gleichung gezeigt, in http://docs.scipy.org/doc/numpy/reference/generated/numpy.corrcoef.html:
>> np.cov([0,0,1,1,0],[1,1,0,1,1])/sqrt(np.var([0,0,1,1,0])*np.var([1,1,0,1,1]))
array([[ 1.53093109, -0.76546554],
[-0.76546554, 1.02062073]])
Was ist denn hier Los?
InformationsquelleAutor neither-nor | 2014-04-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, weil
np.var
Standard-delta Grad der Freiheit ist0
, nicht1
.Oder sieht es die otherway:
Was wirklich Los ist,
np.cov(m, y=None, rowvar=1, bias=0, ddof=None)
, wennbias
undddof
beide nicht zur Verfügung gestellt, die Standard-Normalisierung wird durchN-1
, wobei N die Anzahl der Beobachtungen. So, das ist äquivalent zu haben von delta Freiheitsgrade1
. Leider ist die Standardeinstellung fürnp.var(a, axis=None, dtype=None, out=None, ddof=0, keepdims=False)
hat die Standard-delta-Grad-of-Freiheit der0
.Wann immer Sie sich unsicher sind, der sicherste Weg ist, greifen die diagonal-Elemente der Kovarianzmatrix anstatt berechnen
var
getrennt, um ein konsistentes Verhalten sicherzustellen.Wenn Sie nur
V*V
es wird ein elememnt-wise operation und das Ergebnis ist nicht der 2-by-2 matrix, die wir wollen. Die zweite Frage finden Sie unter msu.edu/user/sw/statrev/strv155.htm (Beispiel-Varianz v. s. populationsvarianz). Aber das ist nicht das richtige Thema hier, siehe edit.InformationsquelleAutor CT Zhu
Laut Ihrem link ( http://docs.scipy.org/doc/numpy/reference/generated/numpy.corrcoef.html ), müssen Sie darauf achten, die Indizes...
Es ist richtig!
InformationsquelleAutor Travis D.