У меня 92 набора однотипных данных.
Я хочу создать корреляционную матрицу для любых двух возможных комбинаций.
т.е. хочу матрицу 92 х92.
такой, что элемент (ci, cj) должен быть корреляцией между ci и cj.
Как я могу это сделать?
r
matrix
visualization
correlation
Свапнил 'Tux' Takle
источник
источник
cor
функцию или наrcorr
функцию вHmisc
пакетеОтветы:
Пример,
d <- data.frame(x1=rnorm(10), x2=rnorm(10), x3=rnorm(10)) cor(d) # get correlations (returns matrix)
источник
Вы можете использовать пакет corrplot.
d <- data.frame(x1=rnorm(10), x2=rnorm(10), x3=rnorm(10)) M <- cor(d) # get correlations library('corrplot') #package corrplot corrplot(M, method = "circle") #plot matrix
Дополнительная информация здесь: http://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html
источник
Функция cor будет использовать столбцы матрицы при вычислении корреляции. Итак, количество строк должно быть одинаковым в вашей матрице x и матрице y . Например:
set.seed(1) x <- matrix(rnorm(20), nrow=5, ncol=4) y <- matrix(rnorm(15), nrow=5, ncol=3) COR <- cor(x,y) COR image(x=seq(dim(x)[2]), y=seq(dim(y)[2]), z=COR, xlab="x column", ylab="y column") text(expand.grid(x=seq(dim(x)[2]), y=seq(dim(y)[2])), labels=round(c(COR),2))
Редактировать:
Вот пример настраиваемых меток строк и столбцов в корреляционной матрице, рассчитанной с помощью одной матрицы:
png("corplot.png", width=5, height=5, units="in", res=200) op <- par(mar=c(6,6,1,1), ps=10) COR <- cor(iris[,1:4]) image(x=seq(nrow(COR)), y=seq(ncol(COR)), z=cor(iris[,1:4]), axes=F, xlab="", ylab="") text(expand.grid(x=seq(dim(COR)[1]), y=seq(dim(COR)[2])), labels=round(c(COR),2)) box() axis(1, at=seq(nrow(COR)), labels = rownames(COR), las=2) axis(2, at=seq(ncol(COR)), labels = colnames(COR), las=1) par(op) dev.off()
источник
image(x=seq(dim(x)[2]), y=seq(dim(y)[2]), z=COR, col=rev(heat.colors(20)), xlab="x column", ylab="y column")
image
Функция автоматически не принимает имена строк и столбцов, так что это должно быть добавлено.Взгляните на qtlcharts . Он позволяет создавать интерактивные корреляционные матрицы:
library(qtlcharts) data(iris) iris$Species <- NULL iplotCorr(iris, reorder=TRUE)
Это более впечатляюще, когда вы коррелируете больше переменных, как в виньетке пакета:
источник
Есть и другие способы добиться этого здесь: ( Нанесите корреляционную матрицу на график ), но мне нравится ваша версия с корреляциями в полях. Есть ли способ добавить имена переменных в столбцы x и y вместо этих номеров индексов? Для меня это было бы идеальным решением. Благодарность!
edit: Я пытался прокомментировать сообщение [Марк в рамке], но я явно не знаю, что делаю. Однако мне удалось ответить для себя на этот вопрос.
если d - это матрица (или исходный фрейм данных), а имена столбцов - это то, что вы хотите, то работает следующее:
axis(1, 1:dim(d)[2], colnames(d), las=2) axis(2, 1:dim(d)[2], colnames(d), las=2)
las = 0 вернет имена в их нормальное положение, мои были длинными, поэтому я использовал las = 2, чтобы сделать их перпендикулярными оси.
edit2: чтобы подавить функцию image (), печатающую числа в сетке (в противном случае они перекрывают ваши метки переменных), добавьте xaxt = 'n', например:
image(x=seq(dim(x)[2]), y=seq(dim(y)[2]), z=COR, col=rev(heat.colors(20)), xlab="x column", ylab="y column", xaxt='n')
источник