У меня есть 92 набора данных того же типа.
Я хочу создать матрицу корреляции для любой возможной комбинации.
то есть. Я хочу матрицу 92 х92.
так что элемент (ci, cj) должен быть корреляцией между ci и cj.
Как это сделать?
У меня есть 92 набора данных того же типа.
Я хочу создать матрицу корреляции для любой возможной комбинации.
то есть. Я хочу матрицу 92 х92.
так что элемент (ci, cj) должен быть корреляцией между ci и cj.
Как это сделать?
Пример,
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()
Посмотрите qtlcharts. Он позволяет создавать корреляционные матрицы интерактивные:
library(qtlcharts)
data(iris)
iris$Species <- NULL
iplotCorr(iris, reorder=TRUE)
Это более впечатляет, когда вы сопоставляете больше переменных, например, в виньетике пакета:
Есть и другие способы достижения этой цели: (матрица корреляции сюжетов в граф), но мне нравится ваша версия с корреляциями в полях. Есть ли способ добавить имена переменных в столбец x и y вместо этих индексов? Для меня это сделало бы это идеальным решением. Спасибо!
edit: Я пытался прокомментировать сообщение [Marc in the box], но я, очевидно, не знаю, что я делаю. Однако мне удалось ответить на этот вопрос для себя.
если 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: для подавления функции печати изображений() в сетке (в противном случае они перекрывают ваши метки переменных), добавьте 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')