Рассчёт матрицы расстояний с помощью пользовательского расстояние Махаланобиса
Мне нужно рассчитать расстояние Махаланобиса по известной формуле: 
Я проделал следущёе: у меня есть функция которая использует эту формулу:
overall_dist<-function(a, b, c, p, W){
if(c=="Mahalanobis dist"){
dist <- t(a-b)
print(dist)
dist <- dist%*%W
print(dist)
dist <- sqrt(dist%*%(a-b))
print(dist)
#dist <- dist * (a-b)
#dist
#dist <- sqrt(dist*(a-b))
}
return(dist)
}
Матрица коэфициентов выглядит следующим образом:
w1<-c(1,0)
w2<-c(0,1)
W<-rbind(w1,w2,w3)
Дальше есть другая функция, которая ведет рассчёт матрицы расстояний:
X<-matrix(c(-1,1,2,-1,2,3,1,2,3,0), nrow=5, ncol=2, byrow = TRUE)
X
make_dm<-function(mat){
matrix_dist<-matrix(0, nrow = nrow(mat), ncol = nrow(mat))
for (i in 1:nrow(mat)) {
for (j in 1:(i-1)){
matrix_dist[i,j] <- overall_dist(mat[i,], mat[j,], c="Mahalanobis dist", p, W)
matrix_dist[j,i] <- matrix_dist[i,j]
}
}
return(matrix_dist)
}
make_dm(X)
Если, например, у меня есть 2 вектора:
a<-c(1,2,3)
b<-c(4,6,1)
, то расстояние считает правильно, а при использовании функции для рассчёта матрицы расстояний получается вот такая ошибка.
Подскажите, пожалуйста, почему я получаю нули, в чем может быть проблема с ошибкой и как это исправить?
Ответы (1 шт):
Как и говорится в ошибке, матрицы разной размерности. Во вложенных циклах размерность постоянно меняется. Нужно приводить к одной. https://fooobar.com/questions/1234120/error-in-r-nonconformable-arguments-not-true 2 вектора были одной длины, поэтому ошибки не выдает.
