Я хотел бы сгенерировать матрицу диаграмм рассеяния из следующего фрейма данных.
# 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