Используя ggplot()
, я пытаюсь построить результаты ANCOVA, в которых наклоны двух линейных компонентов равны: т. Е. lm(y ~ x + A)
.Поведение по умолчанию для geom_smooth(method = "lm")
заключается в построении отдельных уклонов и пересечений для каждого уровня каждого фактора.Например, с двумя уровнями A
library(ggplot2)
set.seed(1234)
n <- 20
x1 <- rnorm(n); x2 <- rnorm(n)
y1 <- 2 * x1 + rnorm(n)
y2 <- 3 * x2 + (2 + rnorm(n))
A <- as.factor(rep(c(1, 2), each = n))
df <- data.frame(x = c(x1, x2), y = c(y1, y2), A = A)
p <- ggplot(df, aes(x = x, y = y, color = A))
p + geom_point() + geom_smooth(method = "lm")
я могу добавить ANCOVA отдельно с lm()
, а затем использовать geom_abline()
, чтобы вручную добавить строки.Этот подход имеет несколько недостатков, таких как то, что линии выходят за пределы диапазона данных и вручную задают цвета.
fm <- lm(y ~ x + A, data = df)
summary(fm)
a1 <- coef(fm)[1]
b <- coef(fm)[2]
a2 <- a1 + coef(fm)[3]
p + geom_point() +
geom_abline(intercept = a1, slope = b) +
geom_abline(intercept = a2, slope = b)
Я знаю ancova()
в ЧЧПакет автоматизирует построение графиков, но мне не особо важна графика решетки.Поэтому я ищу ggplot()
-центрическое решение.
library(HH)
ancova(y ~ x + A, data = df)
Есть ли способ сделать это с помощью ggplot()
?В этом примере A
имеет два уровня, но у меня есть ситуации с 3, 4 или более уровнями.Кажется, что аргумент formula
к geom_smooth()
не имеет ответа (насколько я могу судить).