[英]ggplot2: Logistic Regression - plot probabilities and regression line
我有一个data.frame包含一个连续预测器和一个二分响应变量。
> head(df)
position response
1 0 1
2 3 1
3 -4 0
4 -1 0
5 -2 1
6 0 0
我可以通过glm()
函数轻松计算逻辑回归,到目前为止没有问题。
接下来, 我想用ggplot
创建一个图,其中包含每个总体11个预测值的经验概率 和拟合的回归线 。
我继续用cast()
计算概率并将它们保存在另一个data.frame中
> probs
position prob
1 -5 0.0500
2 -4 0.0000
3 -3 0.0000
4 -2 0.2000
5 -1 0.1500
6 0 0.3684
7 1 0.4500
8 2 0.6500
9 3 0.7500
10 4 0.8500
11 5 1.0000
我绘制了概率:
p <- ggplot(probs, aes(x=position, y=prob)) + geom_point()
但是当我尝试添加拟合的回归线时
p <- p + stat_smooth(method="glm", family="binomial", se=F)
它返回一个警告: non-integer #successes in a binomial glm!
。 我知道为了正确地绘制stat_smooth
,我必须使用二分变量在原始df
数据上调用它。 但是,如果我在ggplot()
使用df
数据,我看不到绘制概率的方法。
我如何将概率和回归线组合在一个图中,就像它在ggplot2中的方式一样,即没有得到任何警告或错误消息?
基本上有三种解决方案:
最简单的方法是,将数据放在两个独立的data.frame
将按position
合并它们:
mydf <- merge( mydf, probs, by="position")
然后你可以在没有警告的情况下在这个data.frame
上调用ggplot
:
ggplot( mydf, aes(x=position, y=prob)) +
geom_point() +
geom_smooth(method = "glm",
method.args = list(family = "binomial"),
se = FALSE)
将来你可以直接避免创建两个独立的data.frames,你必须在以后合并。 就个人而言,我喜欢使用plyr
包:
librayr(plyr)
mydf <- ddply( mydf, "position", mutate, prob = mean(response) )
我忘了提及,您可以使用每个层的另一data.frame
这是一个很强的优势ggplot2
:
ggplot( probs, aes(x=position, y=prob)) +
geom_point() +
geom_smooth(data = mydf, aes(x = position, y = response),
method = "glm", method.args = list(family = "binomial"),
se = FALSE)
作为附加提示:避免使用变量名df
因为您通过分配此变量名来覆盖内置函数stats::df
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.