如何使用geom_smooth绘制组趋势线来保持斜率恒定?

问题描述 投票:0回答:2

对于一个常见的、琐碎的统计问题,我在

ggplot2
中找不到明显的解决方案。我希望
geom_smooth(method = "lm")
color
美学中保持组之间的斜率恒定。

我开始的朴素模型是

lm(Sepal.Width ~ Sepal.Length, data = iris)
。将其绘制在
ggplot2
中:

library(ggplot2)
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width) +
    geom_point() + 
    geom_smooth(method = "lm")

为了添加

Species
的控制,我想测试
lm(Sepal.Width ~ Sepal.Length + factor(Species), data = iris
,它保持不同物种之间的斜率常数(该模型配备了一个萼片长度系数,只有物种之间的常数不同)。我还想测试
lm(Sepal.Width ~ Sepal.Length*Species, data = iris)
,它允许萼片长度和萼片宽度之间的关联因物种而异。

第二个模型绘制起来很简单:

library(ggplot2)
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species) + 
    geom_point() + 
    geom_smooth(method = "lm")

该图允许斜率变化。 有没有办法防止坡度变化?

r ggplot2 data-visualization
2个回答
3
投票

您想要的结果需要一些手动工作,即估计

ggplot
之外的模型,并将包含预测值的列添加到数据框中,然后可以使用
geom_line
进行绘制。对于您要测试的其他型号也是如此:

library(ggplot2)

iris2 <- iris
iris2$fit <- predict(lm(Sepal.Width ~ Sepal.Length + factor(Species), data = iris2))

ggplot(iris2, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) + 
  geom_point() + 
  geom_line(aes(y = fit))


0
投票

执行此操作的另一种非常简单的方法是使用

ggeffects
包为您预测值(如其他答案中所示,然后使用
ggpredict()
函数快速绘制它们。我将在下面展示如何执行相同的操作用这个方法:

#### Load Library ####
library(ggeffects)

#### Fit Model ####
fit <- lm(Sepal.Width ~ Sepal.Length + Species, data = iris)

#### Get Predictions ####
pred <- ggpredict(
  model = fit,
  terms = c("Sepal.Length", "Species")
)

#### Plot ####
plot(
  pred,
  show_data = T
)

如下图:

enter image description here

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.