我怎样才能使用 stat_smooth 在二元图上显示一条线?
How can I use stat_smooth to show one line, on a two factor figure?
我有一个 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 ) 只是为了 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()
我们将不胜感激。
这样就可以了,现在它不再按因素分组:
ggplot(data = df ) +
geom_point(aes(x=a, y = b, color = factor(d))) +
geom_smooth(aes(x=a, y = pred))
您现在可以在指定数据的地方创建一个 ggplot。最重要的是,您添加一个带有点(a 和 b)的图层,并在该图层之上添加几何平滑线。
但请确保您也查看了两个图的 y 轴。在您的 geom_smooth() 图中,您会看到漂亮的 S 形曲线。但是,Y 轴范围是从 0.51 到 0.47。
如果我们再看看你的总图,限制为 0 和 1。你的线看起来几乎是直的,这只是因为限制。
does not work for me. However, I've found how to solve it here: http://www.ats.ucla.edu/stat/r/faq/smooths.htm
简而言之:
在stat_smooth
中设置aes(group = 1)
(但图例有额外的行)
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)
我有一个 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 ) 只是为了 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()
我们将不胜感激。
这样就可以了,现在它不再按因素分组:
ggplot(data = df ) +
geom_point(aes(x=a, y = b, color = factor(d))) +
geom_smooth(aes(x=a, y = pred))
您现在可以在指定数据的地方创建一个 ggplot。最重要的是,您添加一个带有点(a 和 b)的图层,并在该图层之上添加几何平滑线。
但请确保您也查看了两个图的 y 轴。在您的 geom_smooth() 图中,您会看到漂亮的 S 形曲线。但是,Y 轴范围是从 0.51 到 0.47。
如果我们再看看你的总图,限制为 0 和 1。你的线看起来几乎是直的,这只是因为限制。
简而言之:
在stat_smooth
中设置aes(group = 1)
(但图例有额外的行)
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)