繁体   English   中英

ggplot2:Logistic回归 - 绘制概率和回归线

[英]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.frames

最简单的方法是,将数据放在两个独立的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

将来你可以直接避免创建两个独立的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM