R geom_smooth能否接受glm的逻辑变量?

R geom_smooth能否接受glm的逻辑变量?,r,ggplot2,regression,R,Ggplot2,Regression,我有一个数字和逻辑变量的TIBLE,例如: x f y <dbl> <int> <dbl> 1 -2 1 -0.801 2 -1.96 0 -2.27 3 -1.92 0 -1.75 4 -1.88 0 -2.44 5 -1.84 1 -0.123 ... 我想绘制点和回归线,一次以x作为预测因子,一次以f作为结果(逻辑回归),一次以x和

我有一个数字和逻辑变量的TIBLE,例如:

       x     f      y
   <dbl> <int>  <dbl>
 1 -2        1 -0.801
 2 -1.96     0 -2.27 
 3 -1.92     0 -1.75 
 4 -1.88     0 -2.44 
 5 -1.84     1 -0.123
          ...
我想绘制点和回归线,一次以
x
作为预测因子,一次以
f
作为结果(逻辑回归),一次以
x
f
作为预测因子,一次以
y
作为结果(线性回归)。这适用于逻辑回归

ggplot(tb1, aes(x, f)) +
  geom_point() +
  geom_smooth(method="glm", method.args=list(family="binomial"))
产生:

但是:

产生:

这是错误的。我希望将
f
视为一个因子,生成两条回归线,并生成一个离散的而不是连续的彩色图例。我可以手动将
f
强制为逻辑值:

tb2 = tb1 %>% mutate(f = f>0)
并获得正确的线性回归图:

但现在我无法绘制逻辑回归。我明白了

警告消息:
在统计平滑()中计算失败。:

y值必须为0在
ggplot
中使用
color=(f>0)
color=factor(f)
?@Andrew:是的,这是一个解决方法,但它会给我一个图例“f>0”,而不是简单的“f”。然而,在语义上,
f
是一个逻辑变量,我希望在代码的其余部分中这样处理它。相反的解决方法是使用
1*f
作为逻辑图中的预测值,但这会降低代码的可读性。您可以在
scale\u color
语句中轻松使用
name
参数来更改图例中变量的名称。问题是,
ggplot
倾向于将任何数字视为连续变量。如果
f
是逻辑的,我想你可以直接在逻辑图中使用
y=f
——它将被强制为数字。@安德鲁:我还以为逻辑会自动强制为数字
glm
似乎能够做到这一点,但不能
ggplot
。至于
scale\u color
,谢谢,但它看起来仍然是一个解决办法,与使用两个不同类型的变量没有太大区别。将f转换为逻辑(您也可以使用
As.logical(f)
)用于@AndrewGustar建议的颜色美学中有什么问题?这并不是一个真正的解决方法,只是使变量类适应函数的需要。这在脚本中也不应该是一个问题?
ggplot(tb1, aes(x, y, colour=f)) +
  geom_point() +
  geom_smooth(method="lm")
tb2 = tb1 %>% mutate(f = f>0)
summary(glm(f ~ x, binomial, tb1))
summary(lm(y ~ x + f, tb1))
summary(glm(f ~ x, binomial, tb2))
summary(lm(y ~ x + f, tb2))