添加从 glm 到 ggplot2 的预测线,大于原始数据集

Aar*_*one 3 r ggplot2 glm

我已经包含了一个示例数据集只是为了演示我正在尝试做的事情。

Speed <- c(400,220,490,210,500,270,200,470,480,310,240,490,420,330,280,210,300,470,230,430,460,220,250,200,390)

Hit <- c(0,1,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,1,0)

obs <- c(1:25)

msl2.data <- as.data.frame(cbind(obs,Hit,Speed))

msl2.glm <- glm(Hit ~ Speed, data = msl2.data, family = binomial)
Run Code Online (Sandbox Code Playgroud)

在基本包中做我想做的事。

plot(Hit~ Speed, data = msl2.data, xlim = c(0,700), xlab = "Speed", ylab = "Hit", main = "Plot of hit vs Speed")

pi.hat<-(predict( msl2.glm, data.frame(Speed=c(0:700)), type="response" ))

lines( 0:700, pi.hat, col="blue" )
Run Code Online (Sandbox Code Playgroud)

我正在尝试重新创建上面的图,但在ggplot. 我一直无法解决的错误是aes(x,y)长度不同,这是真的,但我希望它们具有不同的长度。

在 gg 中有什么想法吗?

use*_*650 6

你有几种方法;第一个在 内部进行所有建模ggplot,第二个在外部进行建模并将相关数据传递给绘图。

第一的

gplot(dat=msl2.data, aes(Speed, Hit)) + 
      geom_point() +
      geom_smooth(method="glm", method.args=list(family="binomial"), 
                  fullrange=TRUE, se=FALSE) +
      xlim(0, 700)
Run Code Online (Sandbox Code Playgroud)

fullrange指定为预测线覆盖 x 范围。xlim扩展 x 轴。

第二

#Create prediction dataframe
pred <- data.frame(Speed=0:700, pi.hat)

ggplot() + 
  # prediction line
  geom_line(data=pred, aes(Speed, pi.hat)) +
  # points - note different dataframe is used
  geom_point(dat=msl2.data, aes(Speed, Hit))
Run Code Online (Sandbox Code Playgroud)

我通常更喜欢在外面进行建模(第二种方法),并且ggplot纯粹用作绘图机制。