Как записать коэффициент корреляции Пирсона в нижней панели матрицы рассеяния, когда данные имеют 2 уровня? - PullRequest
2 голосов
/ 24 июня 2019

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

# 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" и "B".Следовательно, я хотел бы иметь два коэффициента корреляции в каждом «ящике» моей нижней панели: один для данных с уровнем A, а другой для данных с уровнем B. Например, при построении пар (df [2:4]), я хотел бы видеть эти два коэффициента в первом поле второй строки (нижней панели) моей матрицы.

Эта строка кода

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

будет построенаматрица диаграммы рассеяния на верхней панели.Назначив параметры цвета для bg, я могу различать точки данных A и B.В идеале мой коэффициент корреляции Пирсона будет отображаться так же, как и их соответствующие данные.


Попытка # 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

1 Ответ

0 голосов
/ 25 июня 2019

Функция ggscatmat из библиотеки GGally сделает свое дело.

Например, для сгенерированных данных будет построена удовлетворительная матрица рассеяния с

ggscatmat(df, columns = 2:4, color = "Type", alpha = 0.25) 

Далее будут работать также спецификации ggplot, такие как scale_color_... и theme.,Конечно, как и в случае с любой другой функцией пакета, может потребоваться немного изменить ее, чтобы получить желаемый результат.Однако эта функция - отличное начало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...