Коэффициенты на фасет с output.type = "numeric" в ggpmisc :: stat_poly_eq
ggpmisc::stat_poly_eq
есть возможность output.type = "numeric"
позволяющий получить оценки параметров подобранной модели. Ниже моя попытка использовать его сfacet_wrap
. Я получаю другойR²
на фасет, но коэффициенты одинаковы для двух граней. Я что-то не так делаю или это ошибка?
library(ggpmisc)
set.seed(4321)
x <- 1:100
y <- (x + x^2 + x^3) + rnorm(length(x), mean = 0, sd = mean(x^3) / 4)
my.data <- data.frame(x = x,
y = y,
group = c("A", "B"))
my.data[my.data$group=="A",]$y <- my.data[my.data$group=="A",]$y + 200000
formula <- y ~ poly(x, 1, raw = TRUE)
myformat <- "Intercept: %s\nSlope: %s\nR²: %s"
ggplot(my.data, aes(x, y)) +
facet_wrap(~ group) +
geom_point() +
geom_smooth(method = "lm", formula = formula) +
stat_poly_eq(formula = formula, output.type = "numeric",
mapping = aes(label =
sprintf(myformat,
formatC(stat(coef.ls)[[1]][[1, "Estimate"]]),
formatC(stat(coef.ls)[[1]][[2, "Estimate"]]),
formatC(stat(r.squared)))))
редактировать
Мы должны поймать номер панели. Странно, чтоformatC(stat(as.integer(PANEL)))
возвращает номер панели для каждого фасета:
но, как бы то ни было formatC(stat(coef.ls)[[stat(as.integer(PANEL))]][[1, "Estimate"]])
не работает, потому что здесь PANEL = c(1,2)
.
2 ответа
Хорошо, я разобрался.
ggplot(my.data, aes(x, y)) +
facet_wrap(~ group) +
geom_point() +
geom_smooth(method = "lm", formula = formula) +
stat_poly_eq(
formula = formula, output.type = "numeric",
mapping = aes(label =
sprintf(myformat,
c(formatC(stat(coef.ls)[[1]][[1, "Estimate"]]),
formatC(stat(coef.ls)[[2]][[1, "Estimate"]])),
c(formatC(stat(coef.ls)[[1]][[2, "Estimate"]]),
formatC(stat(coef.ls)[[2]][[2, "Estimate"]])),
formatC(stat(r.squared)))))
Версия 0.3.2 программы 'ggpmisc' теперь находится в CRAN. Отправлено ранее на этой неделе. В документации я приведу несколько примеров использованияgeom_debug()
из моего пакета 'gginnards', чтобы посмотреть на фрейм данных, возвращаемый статистикой (можно использовать с любой статистикой ggplot или отдельно). В вашем примере это будет работать так:
library(ggpmisc)
library(gginnards)
set.seed(4321)
x <- 1:100
y <- (x + x^2 + x^3) + rnorm(length(x), mean = 0, sd = mean(x^3) / 4)
my.data <- data.frame(x = x,
y = y,
group = c("A", "B"))
my.data[my.data$group=="A",]$y <- my.data[my.data$group=="A",]$y + 200000
formula <- y ~ poly(x, 1, raw = TRUE)
myformat <- "Intercept: %s\nSlope: %s\nR²: %s"
ggplot(my.data, aes(x, y)) +
facet_wrap(~ group) +
geom_point() +
geom_smooth(method = "lm", formula = formula) +
stat_poly_eq(formula = formula, output.type = "numeric",
aes(label = ""),
geom = "debug")
Которая выводит на консоль два тиббла, по одному на каждую панель:
Пример ниже добавлен в адресный комментарий:
ggplot(my.data, aes(x, y)) +
facet_wrap(~ group) +
geom_point() +
geom_smooth(method = "lm", formula = formula) +
stat_poly_eq(formula = formula, output.type = "numeric",
aes(label = ""),
summary.fun = function(x) {x[["coef.ls"]][[1]]})
печатает только coefs.ls
.
Я добавил "numeric"
вариант недавно в ответ на предложение, и в этом примере я заметил ошибку: aes(label = "")
не должно было быть необходимо, но необходимо, потому что отображение по умолчанию для label
эстетика - это неправильно. Я исправлю это в следующем выпуске.