Какие методы существует в R для визуализации “матрицы расстояния”?

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

До сих пор я столкнулся с графиками воздушного шара (я использовал его здесь, но я не думаю, что это будет работать в этом случае), heatmaps (вот хороший пример, но они не позволяют представлять числа в таблице, исправлять меня, если я неправ. Возможно, половина таблицы в цветах и половине с числами была бы прохладна), и наконец графики эллипса корреляции (вот некоторый код и пример - который прохладен для использования формы, но я не уверен, как использовать его здесь).

Существуют также различные методы кластеризации, но они агрегируют данные (который не является тем, что я хочу), в то время как то, что я хочу, должно представить все данные.

Данные в качестве примера:

nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv")
dist(nba[1:20, -1], )

Я открыт для идей.

52
задан llrs 29 January 2018 в 04:02
поделиться

4 ответа

Таль, это быстрый способ наложения текста на тепловую карту. Обратите внимание, что здесь используется изображение , а не ] heatmap , поскольку последняя смещает график, что затрудняет размещение текста в правильном месте.

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

также, другой более быстрый вариант - сохранить ваш график в формате pdf, импортировать его в Inkscape (или аналогичное программное обеспечение) и вручную добавить текст там, где это необходимо.

Надеюсь, это поможет

nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv")

dst <- dist(nba[1:20, -1],)
dst <- data.matrix(dst)

dim <- ncol(dst)

image(1:dim, 1:dim, dst, axes = FALSE, xlab="", ylab="")

axis(1, 1:dim, nba[1:20,1], cex.axis = 0.5, las=3)
axis(2, 1:dim, nba[1:20,1], cex.axis = 0.5, las=1)

text(expand.grid(1:dim, 1:dim), sprintf("%0.1f", dst), cex=0.6)

enter image description here

20
ответ дан 7 November 2019 в 09:22
поделиться
  1. Дендрограмма, основанная на иерархическом кластерном анализе, может быть полезна: http://www.statmethods.net/advstats/cluster.html

  2. Двухмерный или трехмерный анализ многомерного масштабирования в R: http://www.statmethods.net/advstats/mds.html

  3. Если вы хотите перейти в 3+ измерения, вы можете изучить ggobi / rggobi: http://www.ggobi.org/rggobi/

9
ответ дан 7 November 2019 в 09:22
поделиться

Вы можете рассмотреть возможность просмотра двухмерной проекции вашей матрицы (многомерное масштабирование ). Вот ссылка на то, как это сделать в R .

В противном случае, я думаю, вы на правильном пути с тепловыми картами. Вы можете добавить свои числа без особого труда. Например, создание off Learn R :

library(ggplot2)
library(plyr)
library(arm)
library(reshape2)
nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv")
nba$Name <- with(nba, reorder(Name, PTS))
nba.m <- melt(nba)
nba.m <- ddply(nba.m, .(variable), transform,
rescale = rescale(value))
(p <- ggplot(nba.m, aes(variable, Name)) + geom_tile(aes(fill = rescale),
colour = "white") + scale_fill_gradient(low = "white",
high = "steelblue")+geom_text(aes(label=round(rescale,1))))

enter image description here

16
ответ дан 7 November 2019 в 09:22
поделиться

A Диаграмма Вороного (график разложения Вороного) - это один из способов визуального представления матрицы расстояний (DM).

Их также просто создать и построить с помощью R - вы можете сделать и то, и другое в одной строке кода R.

Если вы не знакомы с этим аспектом вычислительной геометрии, взаимосвязь между ними (VD и DM) очевидна, хотя краткое изложение может оказаться полезным.

Матрицы расстояний - т. Е. Двумерная матрица, показывающая расстояние между точкой и каждой другой точкой, являются промежуточным результатом вычисления kNN (т. Е. K-ближайший сосед, алгоритм машинного обучения, который предсказывает значение заданных данных точка, основанная на средневзвешенном значении ее ближайших соседей 'k' по расстоянию, где 'k' - некоторое целое число, обычно от 3 до 5.)

kNN концептуально очень прост - каждая точка данных в вашем обучении set по сути является «позицией» в некотором n-мерном пространстве, поэтому следующим шагом будет вычисление расстояния между каждой точкой и каждой другой точкой с использованием некоторой метрики расстояния (например, евклидова, манхэттенского и т. д.). Хотя этап обучения, то есть построение матрицы расстояний, прост, его использование для прогнозирования значения новых точек данных практически затруднено извлечением данных - поиском ближайших 3 или 4 точек из нескольких тысяч или нескольких миллионов. разбросаны в n-мерном пространстве.

Для решения этой проблемы обычно используются две структуры данных: kd-деревья и разложения Ворони (также известные как «тесселяция Дирихле»).

Разложение Вороного (VD) однозначно определяется матрицей расстояний, т.е., есть карта 1: 1; так что на самом деле это визуальное представление матрицы расстояний, хотя, опять же, это не их цель - их основная цель - эффективное хранение данных, используемых для прогнозирования на основе kNN.

Кроме того, правильность представления матрицы расстояний таким образом, вероятно, больше всего зависит от вашей аудитории. Для большинства взаимосвязь между ВД и предшествующей матрицей расстояний не будет интуитивно понятной. Но это не делает его неверным - если бы кто-то без какой-либо подготовки в области статистики хотел узнать, имеют ли две популяции схожие распределения вероятностей, и вы показали им график Q-Q, они, вероятно, подумали бы, что вы не ответили на их вопрос. Так что для тех, кто знает, на что они смотрят, ВД - это компактное, полное и точное представление DM.

Так как же сделать один?

Декомпозиция Вороного создается путем выбора (обычно случайным образом) подмножества точек из обучающего набора (это число зависит от обстоятельств, но если бы у нас было 1000000 точек, то 100 является разумным числом для этого подмножества). Эти 100 точек данных являются центрами Вороного («ВК»).

Основная идея декомпозиции Вороного заключается в том, что вместо того, чтобы просеивать 1000000 точек данных, чтобы найти ближайших соседей, вам нужно только посмотреть на эти 100, а затем, как только вы найдете ближайший VC, ваш поиск фактического Ближайшие соседи ограничены только точками в этой ячейке Вороного. Затем для каждой точки данных в обучающем наборе вычислите ближайший к ней виртуальный канал.Наконец, для каждого виртуального контейнера и связанных с ним точек вычислите выпуклую оболочку - концептуально только внешнюю границу, образованную назначенными этим виртуальным контейнером точками, которые наиболее удалены от этого виртуального контейнера. Эта выпуклая оболочка вокруг центра Вороного образует «ячейку Вороного».«Полный VD - это результат применения этих трех шагов к каждому VC в вашем обучающем наборе. Это даст вам идеальную мозаику поверхности (см. Диаграмму ниже).

Чтобы вычислить VD в R, используйте пакет tripack . Ключевой функцией является 'voronoi.mosaic', которому вы просто передаете координаты x и y отдельно - необработанные данные, не DM - тогда вы можете просто передайте voronoi.mosaic в 'plot'.

library(tripack)
plot(voronoi.mosaic(runif(100), runif(100), duplicate="remove"))

enter image description here

20
ответ дан 7 November 2019 в 09:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: