我有一个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")
并希望使用a
和b
的抖动图,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()
任何和所有帮助将不胜感激。
答案 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。
如果我们再看一下你的总图,其限制为0和1.你的线看起来几乎是直的,这只是因为限制。
答案 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)