R-当数据具有2个级别时,如何在散点图矩阵的下面板中写下Pearson相关系数



我想从以下数据框架中生成一个散点图的矩阵。

# Generate some fake data
set.seed(123)
fakeData <- rnorm(10)
df <- data.frame(Type=c(rep("A", 5), rep("B", 5)), 
                 Syst=fakeData, Bio=2*fakeData, Blr=fakeData^2)

如果我使用pairs函数,则在我的散点图矩阵的对角线下方和上方都得到散点图。

我确实想将散点图保留在上部面板中,但是,我想在下图中"绘制"数据的相关系数。

我已经在网上寻找答案,尽管找到了一些很好的解释,但到目前为止,我还没有成功。像这里一样,这里,这里也在这里。在阐明数据框架中有不同级别的数据时,这些示例并没有跨越案例。

正如我的数据所示,我的数据框架中有两个级别," A"one_answers" B"。因此,我想在下部面板的每个"框"中具有两个相关系数,一个用于数据的数据,其级别为A,用于其级别B。4](,我想在我的矩阵的第二行(下面板(的第一个框中看到这两个系数。

这条代码

pairs(df[2:4], main="", pch=21, bg=c("red","blue"), lower.panel=NULL)

将绘制上面板上的散点图矩阵。通过将颜色选项分配给bg,我可以区分A和B数据点。理想情况下,我的Pearson相关系数将与它们各自的数据相同。


尝试#1 - 我在下面采取了评论功能并进行了一些更改,以适应所需结果所需的更改。

# panel.cor <- function(x, y, digits=2, prefix="", cex.cor, ...)
# {
#   usr <- par("usr"); on.exit(par(usr))
#   par(usr = c(0, 1, 0, 1))
#   r <- abs(cor(x, y))
#   txt <- format(c(r, 0.123456789), digits=digits)[1]
#   txt <- paste(prefix, txt, sep="")
#   if(missing(cex.cor)) cex.cor <- 2
#   text(0.5, 0.5, txt, cex = cex.cor)
# }

我知道我的数据框" DF"有10行。假设我想仅打印仅在下部面板中a的数据的相关性。我想到更改X和Y维度以限制两个变量仅获取A级数据。

panel.cor <- function(x, y, digits=2, prefix="", cex.cor, ...)
{
  x <- x[1:5,1:3]
  y <- y[1:5,1:3]
  usr <- par("usr"); on.exit(par(usr))
  par(usr = c(0, 1, 0, 1))
  r <- abs(cor(x, y))
  txt <- format(c(r, 0.123456789), digits=digits)[1]
  txt <- paste(prefix, txt, sep="")
  if(missing(cex.cor)) cex.cor <- 2
  text(0.5, 0.5, txt, cex = cex.cor)
}

不幸的是,这也没有起作用。我收到一条错误消息,说incorrect number of dimensions

GGally库中的函数 ggscatmat将可以解决问题。

例如,对于生成的数据,将使用

绘制令人满意的散点图矩阵
ggscatmat(df, columns = 2:4, color = "Type", alpha = 0.25) 

进一步的ggplot规格(如scale_color_...theme(也将起作用。当然,与任何包装功能一样,可能需要对其进行一些调整以获得所需的结果。但是,此功能是一个很好的开始。

相关内容

  • 没有找到相关文章

最新更新