Как создать значимый чертежник / корреляционный график для дискретных значений
Один из моих любимых инструментов для исследовательского анализа pairs()
однако, в случае ограниченного числа дискретных значений, оно не совпадает, так как все точки идеально совпадают. Учтите следующее:
y <- t(rmultinom(n=1000,size=4,prob=rep(.25,4)))
pairs(y)
Это действительно не дает хорошего чувства корреляции. Есть ли альтернативный стиль сюжета?
4 ответа
Если вы измените y на data.frame, вы можете добавить некоторое "дрожание", а с помощью опции col вы можете установить уровень прозрачности (4-е число в rgb):
y <- data.frame(y)
pairs(sapply(y,jitter), col = rgb(0,0,0,.2))
Или вы можете использовать plotmatrix ggplot2:
library(ggplot2)
plotmatrix(y) + geom_jitter(alpha = .2)
Изменить: Так как plotmatrix в ggplot2 устарела, используйте ggpairs (пакет GGally упоминается в комментарии @hadley выше)
library(GGally)
ggpairs(y, lower = list(params = c(alpha = .2, position = "jitter")))
Вот пример использования corrplot
:
M <- cor(y)
corrplot.mixed(M)
Вы можете найти больше примеров во вступлении
http://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html
Вот несколько вариантов использования ggplot2:
library(ggplot2)
## re-arrange data (copied from plotmatrix function)
prep.plot <- function(data) {
grid <- expand.grid(x = 1:ncol(data), y = 1:ncol(data))
grid <- subset(grid, x != y)
all <- do.call("rbind", lapply(1:nrow(grid), function(i) {
xcol <- grid[i, "x"]
ycol <- grid[i, "y"]
data.frame(xvar = names(data)[ycol], yvar = names(data)[xcol],
x = data[, xcol], y = data[, ycol], data)
}))
all$xvar <- factor(all$xvar, levels = names(data))
all$yvar <- factor(all$yvar, levels = names(data))
return(all)
}
dat <- prep.plot(data.frame(y))
## plot with transparent jittered points
ggplot(dat, aes(x = x, y=y)) +
geom_jitter(alpha=.125) +
facet_grid(xvar ~ yvar) +
theme_bw()
## plot with color representing density
ggplot(dat, aes(x = factor(x), y=factor(y))) +
geom_bin2d() +
facet_grid(xvar ~ yvar) +
theme_bw()
У меня еще недостаточно кредитов, чтобы прокомментировать сообщение @Vincent - когда делаю
library(GGally)
ggpairs(y, lower = list(params = c(alpha = .2, position = "jitter")))
я получил
Error in stop_if_params_exist(obj$params) :
'params' is a deprecated argument. Please 'wrap' the function to supply arguments. help("wrap", package = "GGally")
Таким образом, исходя из указанной страницы справки, кажется, что в этом случае это должно быть здесь:
ydf <- as.data.frame(y)
regularPlot <- ggpairs(ydf, lower = list(continuous = wrap(ggally_points, alpha = .2, position = "jitter")))
regularPlot