如何使用stat_smooth显示一行,在双因素数字上?

时间:2015-05-31 23:49:38

标签: r ggplot2

我有一个data.frame:

df <- data.frame(a = runif(1000), b = runif(1000), c = runif(1000),  d = sample(c("yes", "no"), 1000, replace=TRUE))

我进行了逻辑回归:

lm <- glm(data = df, factor(d) ~ a + b + c, family = binomial)

产生预测的概率:

df$pred <- predict(lm, type = "response")

并希望使用ab的抖动图,d的颜色填充和使用geom_smooth的平滑线(仅使用geom_smooth)绘制结果图表a上的d

我试过这个:

ggplot(data = df , aes(x=a, y = b, color = factor(d))) + geom_jitter() +
geom_smooth(data = df, aes(x=a, y = pred))

但它并没有产生我想要的东西。我想要的是这一行:

ggplot(data = df , aes(x=a, y = pred)) + geom_smooth()

重叠在此:

ggplot(data = df , aes(x=a, y = b, color = factor(d))) + geom_jitter()

任何和所有帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

这就是诀窍,现在它不再对每个因素进行分组:

  ggplot(data = df ) +  
  geom_point(aes(x=a, y = b, color = factor(d))) +
  geom_smooth(aes(x=a, y = pred))

现在,您可以在ggplot中指定数据。最重要的是,你添加一个带有点(a和b)的图层,并在其上面添加geom平滑线。

但请确保您还要查看两个图的y轴。在你的geom_smooth()图中,你会看到漂亮的S形曲线。但是,Y轴范围为0.51至0.47。

enter image description here

如果我们再看一下你的总图,其限制为0和1.你的线看起来几乎是直的,这只是因为限制。 enter image description here

答案 1 :(得分:2)

other solution (by MichaelVE)对我不起作用。但是,我在这里找到了解决方法:http://www.ats.ucla.edu/stat/r/faq/smooths.htm

简而言之:

aes(group = 1)中设置stat_smooth(但图例中有其他行)

ggplot(mtcars, aes(x = hp, y = mpg, colour = factor(vs))) + geom_point() +
  stat_smooth(aes(group = 1), method = "lm", formula = y ~ x, se = FALSE)

或更好 - 仅在geom_point中使用因子字段,而不是ggplot(这个东西有干净的图例):

ggplot(mtcars, aes(x = hp, y = mpg)) + geom_point(aes(colour = factor(vs))) +
  stat_smooth(method = "lm", formula = y ~ x, se = FALSE)