Вычислить квадратичную энтропию Рао

Rao QE - это взвешенная матрица евклидовых расстояний. У меня есть векторы для элементов d_ijs в таблице данных dt, по одному столбцу на элемент (скажем, их x). p - последний столбец. nrow = S. Двойные суммы относятся к нижнему левому (или верхнему правому, поскольку он симметричен) элементам матрицы расстояний. Формула количественного смягчения Рао

Если бы мне нужна была только невзвешенная матрица расстояний, я мог бы просто выполнить dist () для столбцов x. Как мне взвесить d_ijs на произведение p_i и p_j?

И пример набора данных находится по адресу https://github.com/GeraldCNelson/nutmod/blob/master/RaoD_example.csv с ps в столбце foodQ.ratio.


person JerryN    schedule 13.12.2016    source источник
comment
Если вы ищете функцию квадратичной энтропии Рао, вы можете попробовать выполнить поиск на Рао по этой ссылке: ссылка   -  person David    schedule 13.12.2016
comment
Файл csv содержит 56 строк (1 из которых - заголовки) и 21 столбец. Если вы конвертируете в data.frame с именем df, отбрасываете последний столбец (который содержит значения p) и запускаете dist (df) R возвращает матрицу расстояний.   -  person JerryN    schedule 13.12.2016


Ответы (1)


Вы по-прежнему начинаете с dist для необработанной матрицы евклидовых расстояний. Пусть будет D. Как вы прочитаете из R - Как получить индексы строк и столбцов согласованных элементов из матрицы расстояний, "dist" объект - это не реальная матрица, а одномерный массив. Поэтому сначала выполните D <- as.matrix(D) или D <- dist2mat(D), чтобы преобразовать его в полную матрицу, прежде чем выполнять следующее.

Теперь пусть p будет вектором весов, количественное смягчение Рао - это просто квадратичная форма q'Dq / 2:

c(crossprod(p, D %*% p)) / 2

Заметьте, я делаю не все максимально эффективно. Я выполнил симметричное умножение матрицы на вектор D %*% p, используя полное D, а не только его нижнюю треугольную часть. Однако в R нет процедуры умножения треугольной матрицы на вектор. Поэтому я вычисляю полную версию, чем делю 2.

Это удваивает необходимое количество вычислений; Кроме того, создание D полной матрицы удваивает затраты на память. Но если ваша проблема небольшого или среднего размера, это абсолютно нормально. В случае большой проблемы, если вы являетесь мастером R и C, вызовите процедуру BLAS dtrmv или даже

person Zheyuan Li    schedule 13.12.2016