2017-01-26 5 views
0

Verwenden von Julia 0.5. Gegeben:So erstellen Sie einfache Kovarianz in Julia auf einer Matrix

Supertech = [-.2 .1 .3 .5]; 
Slowpoke = [.05 .2 -.12 .09]; 

Wie in der Welt kann ich eine Kovarianz bekommen. In Excel, ich sage nur

=covariance.p(Supertech,Slowpoke) 

und es gibt mir die richtige Antwort von -0.004875

Für das Leben von mir, dass ich nicht herausfinden kann, wie dies mit zur Arbeit kommen StatsBase.cov()

I‘ habe versucht, diese in eine Matrix, wie wenn man:

X = [Supertech; Slowpoke]' 

, die mir ein schönes gibt:

4×2 Array{Float64,2}: 
-0.2 0.05 
    0.1 0.2 
    0.3 -0.12 
    0.5 0.09 

aber ich kann nicht diese einfache Sache zu arbeiten. Wenn ich versuche, den WeightedVector-Typ zu verwenden, kommt es immer wieder zu Dimensionsabweichungen.

Antwort

4

Die Syntax [-.2 .1 .3 .5] erstellt keinen Vektor, sondern erstellt eine einreihige Matrix. Die cov function ist eigentlich in der Basis Julia definiert, benötigt aber Vektoren. Sie müssen also einfach die Syntax mit Kommas verwenden, um Vektoren an erster Stelle zu erstellen ([-.2, .1, .3, .5]), oder Sie können die vec-Funktion verwenden, um die Matrix zu einem eindimensionalen Vektor umzuformen. Es verwendet standardmäßig auch die "corrected" covariance, während Excel die "unkorrigierte" Kovarianz verwendet. Sie können das dritte Argument verwenden, um anzugeben, dass Sie diese Korrektur nicht möchten.

julia> cov(vec(Supertech), vec(Slowpoke)) 
-0.0065 

julia> cov(vec(Supertech), vec(Slowpoke), false) 
-0.004875 
+0

Danke! Nun ... Gibt es eine Möglichkeit, dies in einer vektorisierten Weise zu tun, so dass ich bei einer Matrix von A = n Vektoren einfach 'cov (A, false)' sagen und einen Vektor oder eine eindimensionale Matrix zurückbekommen kann alle Kovarianzen? – bauhaus9

+0

Ja, aber es wird eine [Kovarianzmatrix] (https://en.wikipedia.org/wiki/Covariance_matrix) zurückgegeben. Z. B. mit einer Drei-Säulen-Matrix, es wird eine 3x3-Matrix zurück, wo das Element an den '(i, j)' die Kovarianz zwischen Spalte 'I' und 'J'. –

+0

Ok, ich bin immer noch verwirrt. Hier ist eine modifizierte Version des Codes oben, diesmal mit einer Schleife Aufwand die Kovarianz calc, die funktioniert: 'mit StatsBase Supertech = [± 2; .1; .3; .5]; Slowpoke = [.05; .2; -12; .09]; X = reshape ([Supertech; Slowpoke], 4,2) mlen = size (X) [1] = Mittel mean_and_cov (X) [1] = covtmp Einsen (mlen) Mittel [1] für i = 1: für j = 1 mlen: Rang (X) covtmp [i] = covtmp [i] * (X [i, j] - Mittel [j]); Ende Ende mycov = Summe (covtmp)/mlen; println ("Correct Kovarianz Matrix X =", mycov) println ("Während cov (X) =" cov (X)) ' – bauhaus9

Verwandte Themen