Применяя то, что Джон внес выше, вы можете настроить эту функцию для ваших данных следующим образом.
Опять же, трудно полностью понять, как выглядят ваши базовые данные, но давайте предположим, что ваше поле, FieldType , содержит три фактора: BSSFields, CSSFields, DSSFields.
# Load data
library(tidyverse)
native <- read.csv("native.gather.C4C5C6C7.csv")
# Define function
lm_eqn <- function(df){
m <- lm(PercentNative ~ YearsPostRelease, df);
eq <- substitute(italic(native) == a + b %.%
italic(YearsPostRelease)*","~~italic(r)^2~"="~r2,
list(a = format(coef(m)[1], digits = 2),
b = format(coef(m)[2], digits = 2),
r2 = format(summary(m)$r.squared, digits = 3)))
as.character(as.expression(eq));
}
# Plot data
ggplot(native, aes(x = YearsPostRelease,
y = PercentNative,
col = FieldType,
linetype = FieldType)) +
geom_point(size=0.7) +
geom_smooth(data = native,
method ="glm", alpha = 0, show.legend = FALSE, linetype = 'solid') +
scale_x_continuous(breaks = c(0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55)) +
scale_y_continuous(limits = c(0, 100),
breaks = c(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100)) +
annotate("text", x = 3, y = 30,
label = lm_eqn(native %>% filter(FieldType == "BSSFields")), parse = TRUE) +
annotate("text", x = 4, y = 20,
label = lm_eqn(native %>% filter(FieldType == "CSSFields")), parse = TRUE) +
annotate("text", x = 5, y = 10,
label = lm_eqn(native %>% filter(FieldType == "DSSFields")), parse = TRUE)
ggtitle("Percent Native Through Time")
Важно отметить, что расположение этих уравнений регрессии будет изменено в зависимости от диапазона YearsPostRelease и PercentNative . Кроме того, если FieldTypes содержит более трех уровней, вам придется добавить соответствующие вызовы annotate()
, настроенные для имени уровня.