【问题标题】:Error in R - no applicable method for 'predict' applied to an object of class "formula"R中的错误 - 没有适用于“预测”的方法应用于“公式”类的对象
【发布时间】:2017-04-27 17:03:47
【问题描述】:

我想就预测功能寻求帮助。我想为我的数据模拟 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("predict") 中的错误: 没有适用于“公式”类对象的“预测”方法

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

我不知道为什么它要求使用“公式”,因为我的所有因素都不属于此类...我很乐意获得帮助或解决此错误的想法。

【问题讨论】:

  • 您应该将模型对象 (mod1) 与 predict() 一起使用,但您也应避免在公式中使用 $,否则您可能无法获得所需的结果。但是在寻求帮助时,请务必在示例数据中包含reproducible example,以便我们可以运行代码。我不清楚这将如何与其他模型一起使用。可能请查看 ?predict 帮助页面以获取使用示例。

标签: r predict model-fitting


【解决方案1】:

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

  • 最好提供data 参数并仅使用变量名称(即Lengthhmm,而不是data$Lengthmm),尤其是如果您希望predict() 和其他安装后机制起作用李>
  • 对于predict,您应该提供拟合模型和(可选)与原始数据框匹配的newdata 参数
  • 最好不要调用您的数据data(这会掩盖内置的 R 函数,尽管它通常不会造成问题)

制作一个可重现的例子:

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 来响应名为Lengthmm 的响应似乎有点可疑 - 我通常认为长度是连续的,因此更有可能是正常或对数正常(或其他一些正态变换)而不是泊松分布或方差与其均值成正比的分布(即“准泊松”...)

【讨论】:

    【解决方案2】:

    您在mod1 ~ data$qbH.yr.med 上预测这是一个类公式的对象。您可以通过注意~ 轻松识别这一点。在您的情况下,您想使用您创建的模型对象,即mod1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多