[R] [mgcv][gam] Odd error: Error in PredictMat(object$smooth[[k]], data) : , `by' variable must be same dimension as smooth arguments

Andrew Crane-Droesch andrewcd at gmail.com
Fri Mar 22 20:24:53 CET 2013


Solved my own problem.  If interested: 
http://stackoverflow.com/questions/15563589/odd-error-error-in-predictmatobjectsmoothk-data-by-variable-must


On 03/21/2013 02:14 PM, Andrew Crane-Droesch wrote:
> Dear List,
>
> I'm getting an error in mgcv, and I can't figure out where it comes 
> from.  The setup is the following:  I've got a fitted GAM object 
> called "MI", and a vector of "prediction data" (with default values 
> for predictors).  I feed this into predict.gam(object, newdata = 
> whatever) via the following function:
>
> 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)
>     }
>
> I then make predictions that look like this:
>
> 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")
>
> where "makepHplot" is a different function that I made.
>
> This worked for quite some time.  Then I added some data to the model 
> and changed the specification slightly.  Now I'm getting this error 
> message:
>
> 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
>
> I never got this message with the old fitted model (and still don't).  
> What is happening?  I can't figure out what about the new fitted model 
> is causing this problem.  Typing "PredictMat" isn't helping me, nor is 
> google.  The problem isn't that all of the variables aren't in the 
> prediction data.
>
> Would appreciate any help here.
>
> Thanks,
> Andrew
>
>
>



More information about the R-help mailing list