[R-sig-eco] repeated measures NMDS?

Gavin Simpson gavin.simpson at ucl.ac.uk
Thu Nov 11 00:11:42 CET 2010


On Wed, 2010-11-10 at 23:33 +0100, Kay Cecil Cichini wrote:
> hi eduard,
> 
> i faced similar problems recently and came to the below solution.
> i only try to address the pseudoreplication with an appropiate  
> permutation scheme.
> when it comes to testing the interactions, things may get more complicated.
> 
> the code is in no way approven of, but at least it maybe good enough  
> for a starter.
> 
> best,
> kay

Hi Kay,

I don't think you have this right.

If you have measured repeatedly, say 5 times, on the same 10
individuals, or if you have ten fields and you take 5 quadrats from
each, you need to permute *within* the individuals/fields, not permute
the individuals/fields which is what permute.strata does. permute.strata
would be useful in evaluating factors that vary at the block
(individuals/fields) level, not at the sample levels.

>From what Eduard and you describe, the code you show is not the correct
permutation. But I may have misunderstood your intention.

Also, be careful with permuted.index2 - there are reasons why it hasn't
been integrated (design goals changed and we felt it would work best in
a separate package that others could draw upon without loading all of
vegan) and the code has festered a bit and may contain bugs - buyer
beware!

G

> library(vegan)
> 
> ### species matrix with 5 sp.
> ### one env.variable
> ### a factor denoting blocks of repeated measurments
> 
> sp<-matrix(runif(24*3*5,0,100),24*3,5)
> env<-rnorm(24*3,10,2)
> rep.mes<-gl(24,3)
> 
> ### NMDS:
> sol<-metaMDS(sp,trymax=5)
> 
> fit<-envfit(sol~env)
> plot(sol)
> plot(fit)
> 
> ### testing code for appropiate randomization,
> ### permuting blocks of 3 as a whole:
> permuted.index2(nrow(sp),permControl(strata = rep.mes,permute.strata=T))
> 
> B=4999
> 
> ### setting up frame for population of r2 values:
> pop<-rep(NA,B+1)
> pop[1]<-fit$vectors$r
> 
> ### loop:
> for(i in 2:(B+1)){
> fit.rand<-envfit(sol~env[permuted.index2(nrow(sp),
>                           permControl(strata = rep.mes,permute.strata=T))])
>            pop[i]<-fit.rand$vectors$r
> }
> 
> ### p-value:
> print(pval<-sum(pop>pop[1])/B+1)
> 
> ### compare to anti-conservative p-value from envfit(),
> ### not restricting permutations:
> 
> envfit(sol~env,perm=B)
> 
> 
> Zitat von Eduard Szöcs <szoe8822 at uni-landau.de>:
> 
> > Thanks, that helped.
> >
> > permuted.index2() generates these types of permutations. But  
> > envfit() does not use this yet.
> > What if I modify vectorfit() (used by envfit() ) in such a way that  
> > it uses permuted.index2() instead of permuted.index()?
> >
> >
> > Eduard Szöcs
> >
> >
> >
> >
> >
> > Am 08.11.2010 22:01, schrieb Gavin Simpson:
> >> On Mon, 2010-11-08 at 15:39 +0100, Eduard Szöcs wrote:
> >>> Hi listers,
> >>>
> >>> I have species and environmental data for 24 sites that were sampled
> >>> thrice. If I want to analyze the data with NMDS I could run metaMDS on
> >>> the whole dataset (24 sites x 3 times = 72) and then fit environmental
> >>> data, but this would be some kind of pseudoreplication given that the
> >>> samplings are not independent and the gradients may be overestimated,
> >>> wouldn`t it?
> >>>
> >>> For environmental data a factor could be included for the sampling
> >>> dates - but this would not be possible for species data.
> >>>
> >>> Is there an elegant way either to aggregate data before ordination or
> >>> to conduct sth. like a repeated measures NMDS?
> >>>
> >>> Thank you in advance,
> >>> Eduard Szöcs
> >> Depends on how you want to fit the env data - the pseudo-replication
> >> isn't relevant o the nMDS. If you are doing it via function `envfit()`,
> >> then look at argument `'strata'` which should, in your case, be set to a
> >> factor with 24 levels. This won't be perfect because your data are a
> >> timeseries and, strictly, one should permute them whilst maintaining
> >> their ordering in time, but as yet we don't have these types of
> >> permutations hooked into vegan.
> >>
> >> If you are doing the fitting some other way you'll need to include
> >> "site" as a fixed effect factor to account for the within site
> >> correlation.
> >>
> >> You don't need to worry about the species data and accounting for
> >> sampling interval. You aren't testing the nMDS "axes" or anything like
> >> that, and all the species info has been reduced to dissimilarities and
> >> thence to a set of nMDS coordinates. You need to account for the pseudo
> >> rep at the environmental modelling level, not the species level.
> >>
> >> HTH
> >>
> >> G
> >>
> >
> > _______________________________________________
> > R-sig-ecology mailing list
> > R-sig-ecology at r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-sig-ecology
> >
> 
> _______________________________________________
> R-sig-ecology mailing list
> R-sig-ecology at r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-ecology

-- 
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
 Dr. Gavin Simpson             [t] +44 (0)20 7679 0522
 ECRC, UCL Geography,          [f] +44 (0)20 7679 0565
 Pearson Building,             [e] gavin.simpsonATNOSPAMucl.ac.uk
 Gower Street, London          [w] http://www.ucl.ac.uk/~ucfagls/
 UK. WC1E 6BT.                 [w] http://www.freshwaters.org.uk
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%



More information about the R-sig-ecology mailing list