Построение нескольких моделей lm () на одном графике - PullRequest
0 голосов
/ 18 апреля 2019

Я установил модели 6 lm() и модель 1 gam() в одном наборе данных.

Теперь я хочу построить их все на одном графике друг над другом. Могу ли я сделать это без определения моделей снова в ggplot?

Мой случай таков

У меня есть

model1 <- lm(y~1, data = data) %>% coef()
model2 <- lm(y~x, data = data) %>% coef()
model3 <- lm(y~abs(x), data = data) %>% coef()
...
model7 <- gam(y~s(x), data = data) %>% coef()

можно ли передать сохраненные коэффициенты моих моделей в ggplot?

ggplot(data, mapping = aes(x = x, y = y)) +
geom_point() +
geom_abline(model1) +
geom_abline(model2) +
....

Или сделать Это единственный способ построить линии прогнозирования модели, чтобы вручную заполнить параметры следующим образом:

ggplot(data, mapping = aes(x = x, y = y)) +  
  geom_point() +  
  geom_abline(intercept = model1[1]) +  
  geom_abline(slope = model2[2], intercept = model2[1]) +  
  geom_abline(slope = model3[2], intercept = model3[1]) +  
  ...

Пример кода

set.seed(123)
x <- rnorm(50)
y <- rweibull(50,1)
d <- as.data.frame(cbind(x,y))
model1 <- coef(lm(y~1, data = d))
model2 <- coef(lm(y~x, data = d))
model3 <- coef(lm(y~abs(x), data = d))

Включая SE для каждой линии / модели и легенду.

1 Ответ

1 голос
/ 18 апреля 2019

Для того, чтобы это работало, вам действительно нужно сохранить всю модель.Так что, если мы предположим, что у вас есть вся модель

# set.seed(101) used for sample data
model1 <- lm(y~1, data = d)
model2 <- lm(y~x, data = d)
model3 <- lm(y~abs(x), data = d)

Мы можем написать вспомогательную функцию для прогнозирования новых значений из этих моделей в заданном диапазоне значений x.Вот такая функция

newvalsforx <- function(x) {
  xrng <- seq(min(x), max(x), length.out=100)
  function(m) data.frame(x=xrng, y=predict(m, data.frame(x=xrng)))
}
pred <- newvals(d$x)

Эта pred() будет делать прогнозы из моделей в наблюдаемом диапазоне x.Затем мы можем использовать их как новые данные для передачи в geom_lines, которые мы можем добавить к графику.Например

ggplot(d, aes(x,y)) +
  geom_point() + 
  geom_line(data=pred(model1), color="red") + 
  geom_line(data=pred(model2), color="blue") + 
  geom_line(data=pred(model3), color="green")

Это дает мне

multi-predict plot

...