2016-03-08 6 views
1

Я хочу рассчитать индексы различий на двоичной матрице и нашел несколько функций в R, но я не могу заставить их согласиться. Я использую коэффициент jaccard в качестве примера в четырех функциях: vegdist(), sim(), designdist() и dist(). Я собираюсь использовать результат для кластерного анализа.Разница между функциями dist в r

library(vegan) 
library(simba) 

#Create random binary matrix 
function1 <- function(m, n) { 
    matrix(sample(0:1, m * n, replace = TRUE), m, n) 
} 
test <- function1(30, 20) 

#Calculate dissimilarity indices with jaccard coefficient 
dist1 <- vegdist(test, method = "jaccard") 
dist2 <- sim(test, method = "jaccard") 
dist3 <- designdist(test, method = "a/(a+b+c)", abcd = TRUE) 
dist4 <- dist(test, method = "binary") 

Кто-нибудь знает, почему dist1 и dist4 отличаются от dist2 и dist3?

+2

Изучили вы документацию? Если это не дало ответа, изучили ли вы исходный код? – Roland

+0

И тогда вы забудете пакет stringdist :-). который имеет метрику для выполнения расстояния jaccard, но на основе профилей q-грамм. – phiver

+0

Я не смог получить ответ на свой вопрос из документации, и я не так сильно разбираюсь в исходных кодах, поэтому я надеюсь, что вы, ребята, поможете. –

ответ

0

Я положил это как ответ. Вот основные комментарии для несходства Вы вычислили:

  • dist1: Вы должны установить binary=TRUE в vegan::vegdist() (это документально).

  • dist2: simba::sim() рассчитывает сходство с Jaccard, и вы должны использовать 1-dist2. Документация ?sim дает неправильную формулу для сходства с Jaccard, но использует правильную формулу в коде. Однако документированная формула определяет сходство.

  • dist3: Ваша формула vegan::designdist() дает сходство с Jaccard, и вы должны изменить ее на несходство. Существует много способов сделать это, и приведенный ниже код дает одно.

  • dist4: это правильно сделано.

Замена ваших четырех последних строк с ними будет делать трюк и дать численно одинаковые результаты со всеми функциями:

#Calculate dissimilarity indices with jaccard coefficient 
dist1 <- vegdist(test, method = "jaccard", binary = TRUE) 
dist2 <- 1 - sim(test, method = "jaccard") 
dist3 <- designdist(test, method = "(b+c)/(a+b+c)", abcd = TRUE) 
dist4 <- dist(test, method = "binary") 
+0

Спасибо. Я не знал различий между функциями (сходство или несходство). –

+0

Все стандартные инструменты ** R ** предполагают, что у вас есть ** dis ** сходства. Это выбор дизайна. Некоторые другие программы имеют разные варианты дизайна, но в то время как ** R ** делают путь ** R **. –