从R gamlss对象预测新拟合值时出现错误

7

我有一个gamlss模型,想用它来预测新的y值(以及置信区间),以便可视化模型与真实数据的拟合程度。我想从一个随机化的预测变量新数据集中进行预测(而不是原始数据),但是出现了错误信息。以下是一些示例代码:

library(gamlss)    

# example data
irr <- c(0,0,0,0,0,0.93,1.4,1.4,2.3,1.5)
lite <- c(0,1,2,2.5)
blck <- 1:8
raw <- data.frame(
   css =abs(rnorm(500, mean=0.5, sd=0.1)),
   nit =abs(rnorm(500, mean=0.72, sd=0.5)),
   irr =sample(irr, 500, replace=TRUE),
   lit =sample(lite, 500, replace=TRUE),
   block =factor(sample(blck, 500, replace=TRUE))
)

# the model
mod <- gamlss(css~nit + irr + lit + random(block), 
       sigma.fo=~irr*nit + random(block), data=raw, family=BE)

# new data (predictors) for making css predictions
pred <- data.frame(
nit =abs(rnorm(500, mean=0.72, sd=0.5)),
irr =sample(irr, 500, replace=TRUE),
lit =sample(lite, 500, replace=TRUE),
block =factor(sample(blck, 500, replace=TRUE))
)

# make predictions
predmu <- predict(mod, newdata=pred, what="mu", type="response")

这将会产生以下错误:
Error in data[match(names(newdata), names(data))] : 
  object of type 'closure' is not subsettable

当我在真实数据上运行时,它会给出略微不同的错误:
Error in `[.data.frame`(data, match(names(newdata), names(data))) : 
  undefined columns selected

当我在没有使用 newdata 的情况下使用 predict 时,它可以很好地对原始数据进行预测,例如:

predmu <- predict(mod, what="mu", type="response")

我使用predict方法的方式有误吗?非常感谢任何建议!谢谢。

4个回答

6
不,你没有错。我也遇到了同样的问题。
文档表明predict的实现是不完整的。这似乎是一个不完整的特性/功能的例子。

糟糕!好的,感谢您的验证和信息,@Hedgehog!我已经将此模型移入lmer()中,它可以正常工作。但是,如果能够在gamlss中解决这个问题会很有帮助。 - BonnieM
抱歉,在实现完成之前,这就是你能得到的最接近答案的回复。 - Hedgehog

1

刺猬提到基于新数据的预测目前还不可能。 因此,BonnieM将模型转移到了lmer()中。

我想进一步评论这个想法: BonniM试图根据对象mod进行预测。

mod <- gamlss(css~nit + irr + lit + random(block), 
   sigma.fo=~irr*nit + random(block), data=raw, family=BE)

在这种情况下,“移动到lme()”可能如下所示:
mod2 <- gamlss(css~nit + irr + lit + re(random=~1|block), 
               sigma.fo=~irr*nit + re(random=~1|block), 
               data=raw, 
               family=BE)

基于 mod2 的新数据预测是在 gamlss2 包中实现的。 此外,modmod2 应该是相同的模型。 参见: Stasinopoulos, M. D., Rigby, R. A., Heller, G. Z., Voudouris, V., & De Bastiani, F. (2017). Flexible regression and smoothing: using GAMLSS in R. Chapman and Hall/CRC. 第10.9.1章。

最好的祝愿 Kai


0

在这个方向上我遇到了很多随机问题,后来发现可以使用权重参数来解决,并且添加一些额外的虚拟观察值并将其权重设为零(但保留我感兴趣的预测变量),这是一个可行的解决方法。


0

我通过确保newdata参数的新数据具有与运行gamlss模型时使用的精确列结构相同的方式,成功解决了未定义的列选择错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接