Re: [R] gam and ordination (vegan and labdsv surf and ordisurf)

From: Gavin Simpson <>
Date: Thu, 20 Nov 2008 13:52:37 +0000

[Have CC'd Jari here as lead author and maintainer of vegan]

Hi Stephen,

On Thu, 2008-11-20 at 07:41 -0500, stephen sefick wrote:
> I have a general question about using thin plate splines in the surf
> and ordisurf routines. My rudimentary knowledge of a gam is that with
> each predictive variable there is a different smooth for each one and
> then they are added together with no real interaction term (because
> they don't handle this well?).

If this is really about ordisurf then what you write is not really accurate. The model ordisurf fits is not additive, given the defaults. By default ordisurf fits a smooth of Ax1 and Ax2 together, not separate smooths of Ax1 and Ax2 which then sum up to predict the response (plus the intercept of course, if one is included in the model).

In mgcv::gam the default model fitted by ordisurf is of the form

mod1 <- gam(y ~ s(Ax1, Ax2), data = X, ...)

whilst you seem to be describing the following additive model

mod2 <- gam(y ~ s(Ax1) + s(Ax2), data = X, ...)

Simon Wood's GAM book goes on to explain that given the thinplate regression spline bases used in this example, mod2 is not actually nested in mod1. To compare nested models then we need to replace mod1 by

mod3 <- gam(y ~ s(Ax1) + s(Ax2) + s(Ax1, Ax2), data = X, ...)

In the case or ordisurf, to my mind mod1 is the correct model to fit as one is often interested in the configuration (i.e. the two axes together) and not the individual axes per se.

The smooths in mod1 are isotropic and useful when Var1 and Var2 (in s(Var1, Var2) ) are on the same scale and we expect the same degree of smoothness to apply to both covariates. mgcv provides tensor product terms via te() (instead of s() ) for situations where isotropy is not appropriate, but these are not available in ordisurf.

You can get mod2 in ordisurf by specifying 'thinplate = FALSE'. Looking at ordisurf now, I'm not sure thinplate is the correct name for this - whether thinplate is FALSE or TRUE, thinplate regression splines are used in the model fit, all thinplate controls is whether a model of the form mod1 or mod2 is computed.

> Now, If I have two variables that
> have a high D^2 score and a low GCV score (I am thinking of this as a
> goodness of fit which may be wrong) I would like to add these together
> to produce one surface fitted to the ordination. Is this possible?
> Am I going down the right track? Any help is greatly appreciated.

It isn't clear what you want to do (to me at least). ordisurf certainly doesn't do this as you provide the response (argument 'y') and an ordination (plus which axes to use) and fits a model like mod1. So you provide only the *univariate* response.

So what do you mean by "two variables"? Have you used ordisurf on your var1 and your var2 separately and now want to combine them? If so, that doesn't make sense (with ordisurf at least) as your "two variables" are responses. The only predictor variables ordisurf knows about are ordination axes.

If you want to fit a multivariate response with smooth functions of the predictors, take a look at Thomas Yee's VGAM package - coincidentally there is a nice article by Thomas in the current R News on VGAM.

If this is not what you meant, perhaps an example might help elucidate things? At least up to the part you want help with.


 Dr. Gavin Simpson             [t] +44 (0)20 7679 0522
 ECRC, UCL Geography,          [f] +44 (0)20 7679 0565
 Pearson Building,             [e]
 Gower Street, London          [w]
 UK. WC1E 6BT.                 [w]

______________________________________________ mailing list
PLEASE do read the posting guide
and provide commented, minimal, self-contained, reproducible code.
Received on Thu 20 Nov 2008 - 13:57:51 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Thu 20 Nov 2008 - 15:30:25 GMT.

Mailing list information is available at Please read the posting guide before posting to the list.

list of date sections of archive