我已经包含了一个示例数据集只是为了演示我正在尝试做的事情。
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 中有什么想法吗?
你有几种方法;第一个在 内部进行所有建模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
纯粹用作绘图机制。