在 R 中使用 predict() 函数绘制 glm 时,如何确保我的 x 和 y 长度不不同?

Att*_*s29 3 plot r glm

我正在运行以下代码:

c.model<-glm(cars$speed~cars$dist, family=gaussian)
summary(c.model)
c.x<-seq(0,1,0.01)
c.x
c.y<-predict.glm(c.model,as.data.frame(c.x), type="response")
c.y
plot(cars$dist)
lines(c.x,c.y)
Run Code Online (Sandbox Code Playgroud)

并收到错误消息,“xy.coords(x, y) 中的错误:'x' 和 'y' 长度不同”。我不太确定是什么导致了这个错误。

MrF*_*ick 6

在匹配模型中使用的变量名称和预测期间使用的变量名称时,您需要更加小心。您得到的错误是因为 preidct 函数中 data.frame 中的名称与模型中术语的名称不匹配,因此您实际上并未预测新值。问题是predict本质上是从

model.frame(~cars$dist, data.frame(dist=c.x))
Run Code Online (Sandbox Code Playgroud)

因此,因为您cars$dist的公式中明确存在,所以不会从您的 newdata 参数中获取“免费”符号。将其与来自的结果进行比较

model.frame(~dist, data.frame(dist=c.x))
Run Code Online (Sandbox Code Playgroud)

这一次,dist没有特别绑定到cars变量,可以在 newdata data.frame 的上下文中“解析”。

此外,您要确保将 dist 值保持在相同的范围内。例如。

c.model <- glm(speed~dist, data=cars, family=gaussian)
summary(c.model)
c.x <- seq(min(cars$dist),max(cars$dist),length.out=101)
c.y <- predict.glm(c.model,data.frame(dist=c.x), type="response")
plot(speed~dist, cars)
lines(c.x,c.y)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

在这里,我们预测观察值的范围而不是 0-1,因为实际上没有距离值小于 1。