scaling issues with vegan's envfit()
That's great, many thanks for your help Gavin. Best wishes Arnaud
On 22/09/2014 19:12, Gavin Simpson wrote:
If I understand correctly Arnaud, you just need `predict()`: predict(pca1, newdata = varechem, type = "sp", scaling = 1)[, 1:2] where you set newdata to be the data frame of new variables you want to add. This will add so-called passive species to the plot base on the linear combinations of the site scores produced from the ordination of the original data. Hence the new data need to be measured on the same sites and have the same row names as the data used to fit the PCA (as that is how vegan identifies them). Using the example you gave I get:
scores(pca1, scaling = 1, choices = 1:2, display = "sp")
PC1 PC2 N 0.4008477 0.5267927 P -1.5075888 -0.8781843 K -1.5384951 -0.6850869 Ca -1.5239497 -0.3582552 Mg -1.4922949 -0.4141239 S -1.4083631 -1.2567985 Al 0.4893605 -2.0353607 Fe 0.8599106 -1.6224771 Mn -1.2181461 0.8183585 Zn -1.4658174 -0.6861639 Mo -0.1759892 -0.9685048 Baresoil -0.6925869 1.3373455 Humdepth -0.9968279 1.4290890 pH 0.7037755 -1.3647204 attr(,"const") [1] 4.236078
predict(pca1, varechem, type = "sp", scaling = 1)[, 1:2]
PC1 PC2
N 0.4008477 0.5267927
P -1.5075888 -0.8781843
K -1.5384951 -0.6850869
Ca -1.5239497 -0.3582552
Mg -1.4922949 -0.4141239
S -1.4083631 -1.2567985
Al 0.4893605 -2.0353607
Fe 0.8599106 -1.6224771
Mn -1.2181461 0.8183585
Zn -1.4658174 -0.6861639
Mo -0.1759892 -0.9685048
Baresoil -0.6925869 1.3373455
Humdepth -0.9968279 1.4290890
pH 0.7037755 -1.3647204
So we are able to recover exactly the correct scores - you just need
to draw arrows (perhaps using ordiArrow()) from (0,0) to those
coordinates.
I don't think `evnfit()` is the right approach here, especially trying
to fake this via `ordiArrowMul()` as that is trying to fill the space
and in scaling 1 you need to scale variables independently.
HTH
Gavin
On 12 September 2014 12:06, ADuranel <arnaud.duranel.09 at ucl.ac.uk
<mailto:arnaud.duranel.09 at ucl.ac.uk>> wrote:
Hello
I am running a PCA of some environmental variables. I have a
second set of
environmental variables that I would like to project passively
onto the
ordination plot, but with the same arrow length scaling as that
used for the
first dataset. I used envfit() in vegan for that purpose. To check
that I
get the same arrow length scaling in plot.envfit() as in plot.cca(), I
fitted the same dataset:
require(vegan)
data(varechem)
pca1<-rda(varechem, scale=T)
ef<-envfit(pca1, scale(varechem))
plot(pca1, type="points")
sp.sc <http://sp.sc><-scores(pca1, display="species")
ef.sc <http://ef.sc><-scores(ef, display="vectors")
plot(ef, arrow.mul=abs(sp.sc <http://sp.sc>[1,1]/ef.sc
<http://ef.sc>[1,1]), col="red")
# equivalent to:
plot(ef, arrow.mul=vegan:::ordiArrowMul(ef.sc
<http://ef.sc>)/vegan:::ordiArrowMul(sp.sc <http://sp.sc>))
The last two lines are the only two ways I managed to get the same
length
scaling for the plot.cca() "species" and plot.envfit() vectors.
However if I want to use another scaling (scaling=1 or 3) for the
PCA plot,
I can't get similar coordinates for the plot.cca() "species" and
plot.envfit() vectors:
ef1<-envfit(pca1, scale(varechem), scaling=1)
plot(pca1, scaling=1, type="points")
sp.sc1<-scores(pca1, scaling=1, display="species")
ef.sc1<-scores(ef1, scaling=1, display="vectors")
plot(ef1, arrow.mul=abs(sp.sc1[1,1]/ef.sc1[1,1]), col="red") #
wrong: the
ratio sp.sc/ef.sc <http://sp.sc/ef.sc> varies according to
"species" in this case...
plot(ef1,
arrow.mul=vegan:::ordiArrowMul(ef.sc1)/vegan:::ordiArrowMul(sp.sc1))
# the
arrow length scaling varies according to "species".
Can somebody tell me what I am doing wrong here?
I use R version 3.1.1 (2014-07-10) with vegan_2.0-10
Platform: x86_64-w64-mingw32/x64 (64-bit)
Many thanks
Arnaud
--
View this message in context:
http://r-sig-ecology.471788.n2.nabble.com/scaling-issues-with-vegan-s-envfit-tp7579076.html
Sent from the r-sig-ecology mailing list archive at Nabble.com.
_______________________________________________
R-sig-ecology mailing list
R-sig-ecology at r-project.org <mailto:R-sig-ecology at r-project.org>
https://stat.ethz.ch/mailman/listinfo/r-sig-ecology
--
Gavin Simpson, PhD