Заполнение матрицы расстояний с использованием вложенного цикла for - PullRequest
0 голосов
/ 23 сентября 2018

У меня проблемы с использованием набора данных ("бабочка").Проблема:

Проблема 4: Установите пакет «ade4», за которым следуют данные (бабочка).Наш вопрос: «Коррелируется ли генетическое сходство с географическими расстояниями между колониями бабочек?» Заполните матрицу генетического расстояния, используя меру расстояния, которую мы назвали d1.Выполните рандомизацию Mantel и интерпретируйте результаты.Повторите тест, используя меру расстояния d2.Это имело значение?Покажите свой код цикла for как часть вашего ответа, а также графики рассеяния и графики рандомизации из тестов рандомизации Мантеля.

Вот функция, используемая для вычисления различий.Я не понимаю, как

dissimilarity <- function(p1, p2){
d1 <- sum( abs(p1 - p2) / 2 )
d2_num <- sum(p1*p2)
d2_denom <- sqrt( sum(p1^2) * sum(p2^2) )
d2 <- 1 - d2_num / d2_denom
return(list(d1=d1, d2=d2))
}

Вот код, который я использовал для настройки генетической матрицы расстояний.

library(ade4)
data("butterfly")

butterflydat<-data.frame(butterfly)
plot(butterfly$contour[,1:2], pch=16, cex=.4)
polygon(butterfly$contour[,1:2], lty=2)
points(butterfly$xy, pch=7)
nrow(butterfly$xy)
text(butterfly$xy, labels=1:16, pos=2, cex=.8)
apply(butterfly$genet,1,sum)
(Ddist <- dist(butterfly$xy))

Я могу рассчитать разницу между двумя географическими расстояниями (Например:

dissimilarity(butterfly$genet[1,],butterfly$genet[2,])$d2

, но я не понимаю, как применить цикл for для заполнения матрицы для всех географических расстояний.Я также не понимаю критерий рандомизации Мантеля.Вопрос подразумевает, что мы выполняем тест рантелизации Мантеля для каждой матрицы, но разве этот тест не сравнивает корреляцию между двумя матрицами (т.е. d1 и d2?)

Любая помощь будет принята с благодарностью, я новичокстатистике и р.

1 Ответ

0 голосов
/ 23 сентября 2018

Вы можете вычислить матрицу различий с помощью двойной петли for или двойной петли apply.

fun_d2 <- function(x, y) dissimilarity(x, y)$d2

apply(butterfly$genet, 1, function(x)
  apply(butterfly$genet, 1, function(y) fun_d2(x, y)))

Необходимо определить функцию fun_d2, поскольку ваша функция dissimilarity возвращаетсписок с двумя участниками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...