R中的错误 - 没有适用于“预测”的方法应用于类“公式”的对象

时间:2016-12-12 18:47:12

标签: r predict model-fitting

我想请求预测函数的帮助。我希望得到一个与我的数据类似的拟合线abline()。对于不同的系统,我之前使用过这种方法。

mod1<-glm(data$Lengthmm ~ data$qbH.yr.med, family=quasipoisson,
    subset = data$Age==1)

xv <- seq(min(data$qbH.yr.med), max(data$qbH.yr.med), 
    length.out = length(data$Lengthmm))                #    poisson regression

yv <- predict(mod1 ~ data$qbH.yr.med, family=quasipoisson, list(x = xv))
  

UseMethod(“预测”)中的错误:     没有适用于“预测”的方法适用于“公式”类的对象

typeof(mod1)
# [1] "list"
typeof(xv)
# [1] "double"
class(mod1)
# [1] "glm" "lm" 
class(xv)
# [1] "numeric"

我不知道为什么它要求“公式”,因为我的因素不属于这个类......我会很乐意帮助,或者想出这个错误。

2 个答案:

答案 0 :(得分:2)

正如其他人所评论的那样,很难看出这在过去是如何发挥作用的。这里有几点:

  • 最佳做法是提供data参数并仅使用变量的名称(即Lengthhmm,而不是data$Lengthmm),尤其是如果您需要{{1和其他后拟合机械工作
  • 对于predict(),您应该提供拟合的模型和(可选)与原始数据框匹配的predict参数
  • 最好不要调用您的数据newdata(这会屏蔽内置的R函数,尽管它通常 导致问题)

制作一个可重复的例子:

data

小配件:

set.seed(101)
dd <- data.frame(Lengthmm=1:10,qbH.yr.med=rpois(10,1),
                 Age=rep(1,10))

顺便说一句,将mod1 <- glm(Lengthmm ~ qbH.yr.med, family=quasipoisson, data=dd, subset = (Age==1)) xv <- with(dd, data.frame(qbH.yr.med=seq(min(qbH.yr.med), max(qbH.yr.med), length.out = length(Lengthmm)))) yv <- predict(mod1, newdata=xv) 用于名为family=quasipoisson的响应似乎有点可疑 - 我通常会认为长度是连续的,因此更可能是正常或对数正常(或正常的一些其他变换)而不是泊松分布或分布与其均值成比例的方差(即&#34;准泊松&#34; ...)

答案 1 :(得分:0)

您正在预测mod1 ~ data$qbH.yr.med这是类公式的对象。您可以通过注意~轻松识别此信息。在您的情况下,您希望使用您创建的模型对象,即mod1