2017-01-26 3 views
0

Julia 0.5を使用する。与えられた:行列上のジュリアで簡単な共分散を作成する方法

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

どのように私は共分散を得ることができます。 Excelでは、私はちょうど

=covariance.p(Supertech,Slowpoke) 

を言うと、それは、私はこれは私が「StatsBase.cov()

を使用して動作するように取得する方法を見つけ出すことができない私には私の人生のために-0.004875

の正しい答えを与えます

012:私の素敵なを与える

X = [Supertech; Slowpoke]' 

:のようなマトリックスにこれを入れてみましたVEの

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

しかし、私はこの単純なことを動作させることはできません。 WeightedVectorタイプを使用しようとすると、次元のミスマッチが発生します。

答えて

4

構文[-.2 .1 .3 .5]はベクトルを作成せず、1行の行列を作成します。 cov functionは、実際にはベースJuliaで定義されていますが、ベクターが必要です。したがって、最初にカンマで構文を使用して([-.2, .1, .3, .5])ベクトルを作成するか、またはvec関数を使用して行列を1次元ベクトルに再構成するだけです。デフォルトでは"corrected" covarianceが使用されていますが、Excelでは「未補正」共分散が使用されています。第3引数を使用して、この修正を望まないことを指定することができます。

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

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

ありがとうございます!今度は...ベクトル化された方法でこれを行う方法はありますか?A = nベクトルの行列を与えれば、私は 'cov(A、false)'と言うだけで、ベクトルまたは1次元配列を得ることができます。共分散のすべて? – bauhaus9

+0

はい、それは[共分散行列](https://en.wikipedia.org/wiki/Covariance_matrix)を返します。たとえば、3列の行列の場合、3x3行列を返します。ここで、 '(i、j)'の要素は列 'i'と' j'の共分散です。 –

+0

私はまだ混乱しています。上のコードを修正したものですが、今回は共分散を計算するためのループを使っています: 'StatsBaseを使う Supertech = [-.2; .1; .3; .5]; Slowpoke = [.05; .2; -12。 .09]; X =変形([SUPERTECH、はぐれた人]、4,2) MLEN =サイズ(X)[1] 手段= mean_and_cov(X)[1] covtmp =もの(MLEN) 手段[​​1] 用(x [i、j] - は[j]を意味する); covtmp [i] = covtmp [i] *(X [i、j] end end mycov = sum(covtmp)/ mlen; println( "行列Xの共分散を補正する"、mycov) println( "cov(X)="、cov(X)) ' – bauhaus9

関連する問題