如何确保我的x和y长度不';在R中使用predict()函数绘制glm时,是否存在差异?

如何确保我的x和y长度不';在R中使用predict()函数绘制glm时,是否存在差异?,r,plot,glm,R,Plot,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) c.model在匹配模型中使用的变量名和预测过程中使用的变量名时,需要更加小心。

我正在运行以下代码:

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)

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

model.frame(~cars$dist, data.frame(dist=c.x))
因此,因为在公式中明确地包含了
cars$dist
,所以不会从newdata参数中获取任何“免费”符号。将其与

model.frame(~dist, data.frame(dist=c.x))
这一次,
dist
cars
变量没有明确关联,可以在newdata.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)

c.model之所以会出现错误,是因为
length(c.x)=101
length(c.y)=50
c.y所以,我想我的问题然后会归结为,“如何让predict()函数产生与我输入的序列一样多的值?”。建议您开始使用回归函数的
data
参数。您能否进一步澄清一下“您得到的错误是因为preidct函数的data.frame中的名称与模型中的术语名称不匹配,因此您实际上没有预测新值”的意思?你的改变效果很好,但我不能说我完全理解为什么。谢谢你,顺便说一句。@Atticus29我已经更新了,试图包含更多细节。基本上,您不应该将
$
~
结合使用(*可能存在一些例外,但通常是正确的)。