Как вычислить матрицу расстояний Очиаи с попарным удалением в R

У меня есть набор данных присутствия / отсутствия и мне нужно рассчитать матрицу расстояний Ochiai с попарным удалением пропущенных значений. Какой самый простой способ сделать это?

Я могу использовать designdist из пакета vegan для генерации матрицы, но не уверен, что он делает с отсутствующими значениями. Если они закодированы как "?" это дает результат, но если закодировано как "NA", то это производит матрицу всех NA. В vegdist вы можете указать, хотите ли вы парное удаление, но не можете реализовать коэффициент Ochiai. Насколько я могу судить, ни одна из других функций матрицы расстояний в других пакетах не имеет этой комбинации. Есть идеи?

Ура,

Джеймс

1 ответ

Это может быть реализовано в vegan::designdist(), но с текущим дизайном только для terms="minimum", Двоичные данные должны обрабатываться с 0/1 преобразованием ввода либо в прямом R или используя decostand(..., "pa"), Следующие изменения сделают это в vegan::designdist():

--- a/R/designdist.R
+++ b/R/designdist.R
@@ -1,7 +1,7 @@
 `designdist` <-
     function (x, method = "(A+B-2*J)/(A+B)",
               terms = c("binary", "quadratic", "minimum"),
-              abcd = FALSE, alphagamma = FALSE, name) 
+              abcd = FALSE, alphagamma = FALSE, name, na.rm = FALSE)
 {
     terms <- match.arg(terms)
     if ((abcd || alphagamma) && terms != "binary")
@@ -9,13 +9,16 @@
     x <- as.matrix(x)
     N <- nrow(x)
     P <- ncol(x)
+    ## check NA
+    if (na.rm && terms != "minimum" && any(is.na(x)))
+        stop("'na.rm = TRUE' can only be used with 'terms = \"minimum\"\' ")
     if (terms == "binary") 
         x <- ifelse(x > 0, 1, 0)
     if (terms == "binary" || terms == "quadratic") 
         x <- tcrossprod(x)
     if (terms == "minimum") {
-        r <- rowSums(x)
-        x <- dist(x, "manhattan")
+        r <- rowSums(x, na.rm = na.rm)
+        x <- vegdist(x, "manhattan", na.rm = na.rm)
         x <- (outer(r, r, "+") - as.matrix(x))/2
     }
     d <- diag(x)
Другие вопросы по тегам