Многомерная шкала в R - данные - PullRequest
0 голосов
/ 06 апреля 2020

Я хотел бы иметь многомерный масштабный график в соответствии со следующей таблицей (это всего лишь более короткая форма всей таблицы).

Я пытался сделать это в R (я здесь довольно новый ...), но сейчас. Я даже не уверен в том, что этот тип данных хорош для многомерного масштабирования. Вся таблица должна отражать карту semanti c (linguisti c) (вот почему я думал, что MDS должен быть хорошим), а строки означают, что информаторы видели некоторые картинки и давали разные выражения (столбцы) для картинок, поэтому они описал их по-разному. Числа в столбцах не являются суждениями в том смысле, что они имеют шкалу от 1 до 10 или что-то в этом роде, но они показывают, сколько людей использовали выражение для pic1, pic2 и т. Д.

Может Кто-нибудь помочь мне объяснить, что MDS на самом деле является подходящей моделью, которую я пытаюсь использовать? (Извините, я слишком запутался после того, как много читал в последние дни о разных методах ...) Если так, вот код, который я использовал (просто чтобы быть уверенным).

Большое спасибо за любой совет!

daten <- structure(list(photos = c("p1", "p5", "p8", "p13", "p19", "p23", "p29", "p34", "p36", "p40", "p59", "p2", "p14"), expression1 = c(18,  8, 11, 15, 14, 16, 10, 12, 15, 18, 18, 0, 0), expression2 = c(0,  0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0), expression3 = c(0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 1, 1), expression4 = c(0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 15, 17), expression5 = c(0, 3, 5, 0, 0, 0,  1, 5, 1, 0, 0, 0, 0), expression6 = c(0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0), expression7 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0), expression8 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0)), row.names = c(NA, -13L), class = c("tbl_df", "tbl", "data.frame"))
library("tibble")
has_rownames(daten)
cr<-column_to_rownames(daten, var="photo")
has_rownames(cr)

matr_cr <- as.matrix(cr[,-1])
matr_cr
d<-dist(matr_cr)
fit <- cmdscale(d, eig = TRUE, k = 2)
x <- fit$points[, 1]
y <- fit$points[, 2]
plot(x, y, xlab="Coordinate 1", ylab="Coordinate 2",
 main="Multidimensional Scaling", type="n")
text(x, y, labels = row.names(matr_cr), cex=.6, col="red")
cr

1 Ответ

0 голосов
/ 06 апреля 2020

Построение многомерных данных затруднительно и зависит от типа данных и анализа, что нужно сделать. Прежде всего, если у вас есть несколько переменных, может быть полезно кластеризовать ваши данные, одним из возможных методов является k-означает, что вы можете найти их в пакете "ClusterR". Другая возможная вещь, которую нужно сделать, - это преобразовать переменную, повернув ось, чтобы понизить измерение с помощью анализа основных компонентов (PCA), вы можете найти больше информации о PCA в R в http://www.sthda.com/english/articles/31-principal-component-methods-in-r-practical-guide/

Если вы хотите построить свои данные без предварительного анализа, вы можете использовать пакет ggplot2 для создания более полезных и элегантных графиков. А для построения различных атрибутов данных вы можете попробовать изменить размер, цвет, форму и т. Д. c шкал, представляющих разные измерения. Проблема с этой опцией заключается в том, что вы не можете построить несколько измерений.

Если я вас хорошо понимаю, у вас есть фотографии и люди (информаторы), которые делают обзор фотографий. И критики разделены на разных уровнях (измерениях). Если это так, вы получаете в качестве изображений измерений, рецензентов и каждого уровня рецензий, которые составляют 2 + N переменных. Обратите внимание, что вы можете легко построить до 5 измерений в данных такого типа, установив оси X и Y, у вас будет 2 измерения, затем вы можете использовать шкалу размеров для другого измерения, цветовую шкалу для другого измерения и в зависимости от ваши данные и ваши предпочтения вы можете использовать текст или форму фигуры для пятого измерения. Я не вижу в таблице, которую вы предоставляете измерение информаторов (рецензентов). Ниже вы найдете два примера этих графиков с использованием ggplot2, обратите внимание, что для масштабирования формы должна использоваться дискретная переменная. Чтобы получить красивые графики и со смыслом, вы должны будете попробовать, какой тип масштаба лучше для каждой из ваших переменных и будет сильно зависеть от ваших данных. Наконец, если у вас обычно есть несколько измерений, вы должны сначала попытаться оценить, кластеризованы ли ваши данные или есть PCA.

library(ggplot2)
daten <- structure(list(photos = c("p1", "p5", "p8", "p13", "p19", "p23", "p29", "p34", "p36", "p40", "p59", "p2", "p14"), expression1 = c(18,  8, 11, 15, 14, 16, 10, 12, 15, 18, 18, 0, 0), expression2 = c(0,  0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0), expression3 = c(0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 1, 1), expression4 = c(0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 15, 17), expression5 = c(0, 3, 5, 0, 0, 0,  1, 5, 1, 0, 0, 0, 0), expression6 = c(0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0), expression7 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0), expression8 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0)), row.names = c(NA, -13L), class = c("tbl_df", "tbl", "data.frame"))

# with shape scale
ggplot(data = daten,aes(x=photos, y=expression1, col=expression2, size=expression3, shape=as.factor(expression4))) +
geom_point()

# with text scale
ggplot(data = daten,aes(x=expression4, y=expression1, col=expression2, size=expression3, label=photos)) +
geom_text()
...