1

我在 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”对我没有帮助,谷歌也没有。问题不在于所有变量都不在预测数据中。

将不胜感激这里的任何帮助。

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

还值得注意的是,我在输入缺失数据后多次拟合此模型,然后使用鲁宾规则组合输出。但这不应该是相关的——我使用任何一个组成拟合模型,而不是组合版本都会得到同样的错误

已解决的问题: 问题在于“triid”是一个因子变量,其水平不包括“1”。当我将 preddat 中的 triid 设置为其他内容时,它可以工作。我设置模型的方式,将随机效应与虚拟 =0 交互,这个变量没有效果,但 mgcv 仍然需要它来进行预测。

4

0 回答 0