[R-sig-Geo] randtest.enfa {adehabitat} -- erratum in calculating the tolerance
Mathieu Basille
basille at ase-research.org
Mon Jun 14 21:44:52 CEST 2010
Consuelo,
> Again, about the tolerance, using the code you told me:
>
> pc3 <- dudi.pca(kasc2df(map)$tab, scan=FALSE)
> sum(dudi.pca(pc3$tab, scale=FALSE, row.w =
> dataenfa1$pr/sum(dataenfa1$pr), scan=FALSE)$eig)
>
> I got* 3.129783*, is this correct?
Yes it is. You can double check it with niche.test:
bla <- niche.test(map, lynxjura$locs[tmp, c("X", "Y")])
bla$obs
0.1450481 3.1297832
The first value is the marginality (same as in enfa1), the second one is
the tolerance.
> But I don't understand, shouldn't tolerance have a value ranging from 0
> to 1? I thougth that was the idea, since specialization varies from 1 to
> infinite, right? [i.e. Reutter et al 2003***]
Not necessarily. But I guess you will find different definitions of
(global) tolerance and (global) specialization according to different
sources.
In any cases, I would not recommend the use of a *global*
tolerance/specialization index, unless it is used to compare:
- two species in the same study area
- the same species in two periods, given that the environment does not
change.
> In the other hand, I have estimated the global specializations using
> Hirzel et al (2002) formula, like this:
>
> S <- (sqrt(sum(enfa1$s)))/1.96
>
> Does it seem correct?
According to Hirzel et al. (2002)'s definition, it should be divided by
the number of specialization axes. It is just the mean eigenvalue of
specialization, which can be seen as a way to define a global
specialization. Now, as I said before, it is difficult to use it as is.
> I got this value S = 0.996322 (<1 though), and then, my tolerance (1/S)
> was 1.003692 (>1).
>
> It bothers me that we don't have the same values! grrr
My guess: the S = 1/T relation only hold on one dimension, but not in
the N-dimensions ecological space. Could be wrong, though. Anyway,
Hirzel et al. (2002)'s definition of specialization cannot not be used
in this context.
> What do you think?
>
> About my other question about the scatter plot of enfa, the scores and
> so on... I think I haven't been able to explain myself... I have
> uploaded a picture http://img808.imageshack.us/i/scatter.jpg/. I hope
> you can see what I mean there.
Now I see. The d=1 that you have in the upper-right corner just holds
for the projection of pixels (simplified with the use of MCPs). Try the
following:
> scatter(enfa1, pts = TRUE)
> summary(enfa1$li)
which should help. The arrows are just proportional to their real
values, in order to adequately fit in the graph.
Regards,
Mathieu.
> Thanks again guys!!!
>
> Consuelo
>
>
> *** Reutter, B.A, V. Helfer, A.H. Hirzel1 & P. Vogel. 2003. Modelling
> habitat-suitability using museum collections: an example with three
> sympatric Apodemus species from the Alps. Journal of Biogeography, 30,
> 581–590
>
> -------------
> Consuelo Hermosilla
> PhD student
> Departamento de Ecología y Biología Animal
> Departamento de Bioquímica, Genética e Inmunología, Área de Genética
> Facultad de Ciencias del Mar
> Campus de As Lagoas-Marcosende
> Universidad de Vigo
> 36310 Vigo
> SPAIN
> Mobile: +34 692 633 298
>
> oooO
> ( ) Oooo
> ( ( )
> _) ) /
> (_/
>
> Stop Gaza Massacre
>
>
> 2010/6/9 Clément Calenge <clement.calenge at gmail.com
> <mailto:clement.calenge at gmail.com>>
>
> On 06/09/2010 09:05 AM, Clément Calenge wrote:
>
>
>
> sum(dudi.pca(kasc2df(map), row.w =
> dataenfa1$pr/sum(dataenfa1$pr),
> scan=FALSE)$eig)
>
> which gives you 5 only. The weights should sum to 1 (i.e.
> they are
> proportions). But then, how would you interpret this? This
> is the same
> as for the "global specialization".
>
>
> Yes, but be careful: kasc2df returns a list with one component
> "tab" (the component of interest) and one component "index" (the
> component allowing to rebuild the original kasc), so that the
> correct code is:
>
> sum(dudi.pca(kasc2df(map)$tab, row.w =
> dataenfa1$pr/sum(dataenfa1$pr), scan=FALSE)$eig)
>
>
> I was a bit too hasty for this reply. Actually the code is
> incorrect. Consider the following code:
>
> pc <- dudi.pca(kasc2df(map)$tab, row.w = dataenfa1$pr/sum(dataenfa1$pr))
>
> This code performs a *centered and scaled* PCA of the environmental
> variables: this analysis first centers and scales the table
> containing the value of the environmental variables. Therefore, for
> each variable of pc$tab, the mean *weighted by the utilization
> weights* is equal to zero and the variance *weighted by the
> utilization weights* is equal to 1. Therefore, the sum of the
> eigenvalues of the PCA on this transformed table is equal to the
> number of environmental variables. This code is incorrect (thanks
> Mathieu for noting the inconsistency). First, to calculate the
> global tolerance, you would need to calculate:
>
> pc <- dudi.pca(kasc2df(map)$tab, scan=FALSE)
>
> This preliminary analysis is performed just to center/scale the
> variables with uniform weighting. This allows to compare the
> different variables in pc$tab (they all have the same average and
> the same scale). *Then*, calculate the weighted and *unscaled* PCA
> of the table pc$tab:
>
> sum(dudi.pca(pc$tab, scale=FALSE, row.w =
> dataenfa1$pr/sum(dataenfa1$pr), scan=FALSE)$eig)
>
> This gives the tolerance of the species on the area,
> Sorry for the confusion,
> HTH,
>
> Clément Calenge
>
> --
> Clément CALENGE
> Cellule d'appui à l'analyse de données
> Office national de la chasse et de la faune sauvage
> Saint Benoist - 78610 Auffargis
> tel. (33) 01.30.46.54.14
>
>
--
~$ whoami
Mathieu Basille, Post-Doc
~$ locate
Laboratoire d'Écologie Comportementale et de Conservation de la Faune
+ Centre d'Étude de la Forêt
Département de Biologie
Université Laval, Québec
~$ info
http://ase-research.org/basille
~$ fortune
``If you can't win by reason, go for volume.''
Calvin, by Bill Watterson.
More information about the R-sig-Geo
mailing list