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

时间:2017-03-12 00:51:19

标签: r predict gam

我有一个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

当我使用predict而没有newdata时,它可以很好地对原始数据进行预测,如:

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

我使用预测错了吗?任何建议都非常感谢!谢谢。

4 个答案:

答案 0 :(得分:1)

不,你没错。我遇到过同样的问题。

文档表明预测的实施不完整。这似乎是功能/功能不完整的一个例子。

答案 1 :(得分:1)

刺猬提到,尚不可能基于新数据进行预测。 因此,BonnieM将模型“移至” lmer()。

我想对此想法做进一步评论: BonniM尝试根据对象def extract_components(s): components = {} for sub in s.split(','): if 'x' in sub: prod, count = sub.split('x') components[prod.strip()] = int(count) else: components[sub.strip()] = 1 return components print(df['items'].apply(extract_components).apply(pd.Series).fillna(0)) abc efg def 0 1 0 0 1 1 2 1 2 2 0 0 3 0 3 7 4 5 0 0

来获取预测
mod

在这种情况下,“进入lme()”可能如下所示:

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

基于mod2 <- gamlss(css~nit + irr + lit + re(random=~1|block), sigma.fo=~irr*nit + re(random=~1|block), data=raw, family=BE) 的新数据的预测在gamlss2包中实现。 此外,mod2mod应该是相同的模型。 看到: Stasinopoulos,M.D.,Rigby,R.A.,Heller,G.Z.,Voudouris,V.,&De Bastiani,F.(2017年)。灵活的回归和平滑:在R. Chapman和Hall / CRC中使用GAMLSS。第10.9.1章

最好的问候 凯

答案 2 :(得分:0)

我在这个方向上有很多随机问题,并使用权重参数找到合适的方法,并且一些额外的虚拟观察值设置为权重零(但我感兴趣的预测变量)是一种解决方法。

答案 3 :(得分:0)

通过确保newdata参数的新数据具有运行gamlss模型时使用的EXACT列结构,我能够克服未定义的列选择错误。