在一个图中绘制多个 lm() 模型
Plotting multiple lm() models in one plot
我在同一数据集上安装了 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))
包括每个 line/model 的 SE 和图例也是受欢迎的。
为了使其正常工作,您确实需要保存整个模型。因此,如果我们假设您拥有整个模型
# 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")
这给了我
我在同一数据集上安装了 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))
包括每个 line/model 的 SE 和图例也是受欢迎的。
为了使其正常工作,您确实需要保存整个模型。因此,如果我们假设您拥有整个模型
# 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")
这给了我