2017-01-26 9 views
0

Использование Julia 0.5. С учетом:Как создать простую ковариацию в Юлии на матрице

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

Как в мире я могу получить ковариацию. В Excel я просто говорю

=covariance.p(Supertech,Slowpoke) 

, и это дает мне правильный ответ -0.004875

Для жизни меня я не могу понять, как получить эту работу, используя StatsBase.cov()

Я ве попытался положить это в матрицу, как:

X = [Supertech; Slowpoke]' 

, который дает мне приятно:

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] не создает вектор, он создает однострочную матрицу. cov function фактически определен в базе Julia, но для этого требуются векторы. Поэтому вам просто нужно использовать синтаксис с запятыми для создания векторов в первую очередь ([-.2, .1, .3, .5]), или вы можете использовать функцию vec, чтобы изменить матрицу на одномерный вектор. Он также использует "corrected" covariance по умолчанию, тогда как Excel использует «некорректированную» ковариацию. Вы можете использовать третий аргумент, чтобы указать, что вы не хотите эту коррекцию.

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). Например, с матрицей с тремя столбцами она вернет матрицу 3x3, где элемент в '(i, j)' является ковариацией между столбцами 'i' и' j'. –

+0

Хорошо, я все еще смущен. Здесь приведена модифицированная версия вышеприведенного кода, на этот раз с попыткой цикла для вычисления ковариации, которая работает: 'using StatsBase Supertech = [-.2; 0,1; 0,3; 0,5]; Slowpoke = [.05; 0,2; -.12; .09]; Х = Reshape ([Supertech; Slowpoke], 4,2) mlen = размер (X), [1] средства = mean_and_cov (Х) [1] covtmp = те (mlen) средства [1] для i = 1: mlen для j = 1: rank (X) covtmp [i] = covtmp [i] * (X [i, j] - означает [j]); конец конец mycov = sum (covtmp)/mlen; println («Корректная ковариация матрицы X =», mycov) println («В то время как cov (X) =", cov (X)) ' – bauhaus9