Как получить уникальные пары из матрицы ковариации? - PullRequest
0 голосов
/ 28 сентября 2019

Я пытаюсь получить уникальные пары из ковариационной матрицы, полученной с помощью R-кода.Это то, что я пробовал до сих пор:

data <- tibble(x = 1:3, y = 2:4, z = 3:5, w = 10:12)
cov_m <- reshape2::melt(cov(data))  %>%
    filter(Var1 != Var2) # I do this expecting to remove Cov(Var1, Var1) or similar cases
cov_m <- cov_m[duplicated(m_cov$Var1,]

Я почти уверен, что близок к правильному ответу: около 6 уникальных пар , если моя математика не ошибается.Может ли кто-нибудь помочь мне?

1 Ответ

1 голос
/ 28 сентября 2019

Установите для диагонали и верхнего треугольника какое-то специальное значение (Inf в примере ниже), а затем удалите их после выполнения melt

m = cov(data)
m[upper.tri(m)] = Inf
diag(m) = Inf
d = reshape2::melt(m)
d[d$value != Inf,]
#   Var1 Var2 value
#2     y    x     1
#3     z    x     1
#4     w    x     1
#7     z    y     1
#8     w    y     1
#12    w    z     1

Или, если вы хотите сделать это без reshape2

data.frame(m) %>%
    mutate(rows = rownames(.)) %>%
    gather(cols, val, -rows) %>%
    filter(val != Inf)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...