使用 R 中的 predict() 函数绘制 glm 时,如何确保我的 x 和 y 长度没有差异?

How do I ensure that my x and y lengths don't differ when plotting a glm using the predict() function in R?

我是运行以下代码:

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)

出现错误,"Error in xy.coords(x, y) : 'x' and 'y' lengths differ"。我不太确定是什么导致了这个错误。

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

获取数据
model.frame(~cars$dist, data.frame(dist=c.x))

因此,因为您的公式中明确包含 cars$dist,所以不会从您的 newdata 参数中获取 "free" 符号。将其与

的结果进行比较
model.frame(~dist, data.frame(dist=c.x))

这一次,dist 没有特别绑定到 cars 变量,在新数据 data.frame.[=18 的上下文中可以是 "resolved" =]

此外,您要确保将 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)

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