У меня есть набор данных, который я строю с линейной регрессией (всего на geom_smooth()
). У меня также есть список уклонов и перехватов для других линий. Мне интересно, как лучше всего проверить, попадают ли эти другие линии в CI регрессии. В реальном наборе данных будет много строк для тестирования, поэтому я надеюсь, что есть какой-то способ массового тестирования.
library(tidyverse)
# sample data
set.seed(0)
df = tibble(
x = runif(20,min=5,max=10),
y = x + rnorm(20,mean=2,sd=3)
)
# df of lines
lines.df <- data.frame(line = c("line 1","line 2","line 3","line 4"),
slope = c(.9,1.2,1.4,1.1),
intercept = c(2.5,-.5,-.44,0))
# plot
ggplot(df) +
aes(x = x, y = y) +
geom_point(size = 2) +
geom_smooth(method = "lm", level = 0.95, fullrange = TRUE, color = "black")+
geom_abline(data=lines.df,aes(slope=slope,intercept=intercept,color=line))
Мы видим выше, что строки 1, 2 и 4 находятся в пределах CI этой регрессии, а строка 3 - нет. Как я могу проверить это (визуально или иным образом), чтобы добавить столбец ay / n в мой файл lines.df относительно того, будут ли они находиться в этом доверительном интервале или нет?
Единственная идея, которую я имею до сих пор, - это создать регрессионная модель, рассчитайте CI, затем измените столбец в файле lines.df, экстраполируя эту строку и добавляя «если y (line1) при x = 0 находится между y (модель (0) ± CI (0)) & y (line1) при x = .5 находится между y (модель (.5) ± CI (.5)) & y (line1) при x = 1 находится между y (модель (1) ± CI (1)) «затем insideCI ==» да". Но это довольно неуклюже и глупо, поэтому я думаю, что должен быть лучший способ.
Для справки, это не обязательно должно быть графически, это просто самый простой способ объяснить, что я ищу.
Было бы лучше, если бы код был в синтаксисе dplyr / tidyverse, если это возможно.
Спасибо!