我在mgcv中遇到错误,我无法弄清楚它来自哪里 . 设置如下:我有一个称为“MI”的拟合GAM对象,以及“预测数据”的矢量(具有预测变量的默认值) . 我通过以下函数将其提供给predict.gam(object,newdata = whatever):

makepred = function(varstochange,val){
     for (i in 1:length(varstochange)){
         if (varstochange[i] == "pot.trial"){j=1}
         if (varstochange[i] == "year"){j=2}
         if (varstochange[i] == "crop.legume"){j=3}
         if (varstochange[i] == "crop.fruit"){j=4}
         if (varstochange[i] == "feedstock"){j=5}
         if (varstochange[i] == "BCAR.imp"){j=8}
         if (varstochange[i] == "INAR.imp"){j=9}
         if (varstochange[i] == "bcph.imp"){j=10}
         if (varstochange[i] == "phi.imp"){j=11}
         if (varstochange[i] == "htt.imp"){j=12}
         if (varstochange[i] == "bc.prc.C.imp"){j=13}
         if (varstochange[i] == "CEC.imp"){j=14}
         if (varstochange[i] == "soc.imp"){j=15}
         if (varstochange[i] == "sand.imp"){j=16}
         if (varstochange[i] == "clay.imp"){j=17}
         if (varstochange[i] == "abslat.imp"){j=18}
         preddat[j] = val[i]
         }
     predict.gam(MI,newdata=preddat,se.fit=TRUE)
     }

然后我做出如下预测:

a = makepred(c("phi.imp","bcph.imp","year"),c(4.5,7.25,1))
b = makepred(c("phi.imp","bcph.imp","year"),c(5.5,7.25,1))
c = makepred(c("phi.imp","bcph.imp","year"),c(6.5,7.25,1))
d = makepred(c("phi.imp","bcph.imp","year"),c(7.5,7.25,1))
makepHplot(a,b,c,d,title="1st harvest, BC pH = 7.25")

其中“makepHplot”是我所做的不同功能 .

这工作了相当长的一段时间 . 然后我向模型添加了一些数据并稍微改变了规范 . 现在我收到此错误消息:

1> a = makepred(c("bcph.imp","year"),c(7.5,1))
Error in PredictMat(object$smooth[[k]], data) :
   `by' variable must be same dimension as smooth arguments

我从来没有用旧装的模型得到这个消息(但仍然没有) .
怎么了?我不知道新装的模型导致了这个问题 . 键入"PredictMat" isn 't helping me, nor is google. The problem isn' t所有变量都不在预测数据中 .

非常感谢这里的任何帮助 .

(在R-help上交叉发布的道歉)

值得注意的是,在输入缺失数据后,我将这个模型多次拟合,然后使用Rubin规则组合输出 . 但这不应该是相关的 - 我使用任何一个组成拟合模型而不是组合版本得到相同的错误

PROBLEM SOLVED: 问题是"trialid,"是一个因子变量,其水平不包括"1" . 当我将preddat中的trialid设置为其他东西时,它可以工作 . 我设置模型的方式,将随机效果与dummy = 0相互作用,这个变量没有效果,但是mgcv仍然需要它来做预测 .