我在同一数据集上拟合了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和图例。
答案 0 :(得分:1)
要使其正常工作,您确实需要保存整个模型。因此,如果我们假设您拥有整个模型
# 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")
这给了我