User Tools

Site Tools


anadat:cs:fun:reduce.pca

Ponechání jen dobře fitujících se druhů v PCA

Někdy může být ordinační diagram PCA nepřehledný, pokud jsou zobrazeny všechny druhy. Canoco nabízí možnost zobrazit jen druhy se specifikovaným lineárním fitem. Obvykle nás zajímají právě ty druhy, které mají fit nejvyšší, tedy ty, jejichž šipka opravdu znamená, že početnost daného druhu tím směrem konzistentně roste.

Jednoduchá funkce reduce.pca() odstraní z PCA výsledku druhy s menším než specifikovaným fitem. Pro nastavení požadované hranice fitu slouží argument reduce=. Pokud je zadán v rozmezí od 0 do 1, představuje hraniční fit a jen druhy s fitem alespoň takovým jsou v ordinaci ponechány. Pokud je zadáno celé číslo vyšší než jedna, v ordinaci je ponecháno dané množství druhů s nejvyšším fitem.

Funkce může být nazdrojována takto (po projetí kódu je připravena k použití):

source(url("http://vitsyrovatka.info/lib/exe/fetch.php?media=zpradat:functions:reduce.pca.r"))

Soubor .r s definicí funkce si můžete stáhnout zde.

Poznámka: užitečnou alternativou je funkce orditorp() balíku vegan, která zobrazí popisky tak, aby se nepřekrývaly (některé druhy ale zobrazí jen jako symboly).

# Description
# -----------
# reduce.pca() deletes species scores from a PCA result so that only species
# with a linear fit higher than (or same as) specified using the reduction argument 
# are kept.
# Default is 0.5.
# If reduction is an integer >0, the reduction number of best-fitted species are kept.
# In such case the returned species scores are ordered according to the fit 
# in decreasing order.
# Species fit of the kept species is attached to the PCA result $species.fit
 
# Uses vegan:envfit to get the fit.
# The function only helps in plotting PCA ordinations.
 
# Arguments
# ---------
# x - PCA ordination returned by function vegan::rda
# reduction - Either a numeric in the range (0,1) setting the borderline fit,
#             or an integer giving the number of best-fitted species to be kept.
#             Default is 0.5.
# choices - the axes of the ordination space into which the species are fitted 
 
reduce.pca<- function(x, reduction= 0.5, choices= 1:2){
 
    if(is.null(reduction)){
    stop("Specify reduction!")
  }
 
  if(reduction >= 1){
    n<- reduction
  } else{
    r<- reduction  
    n<- NULL
  }
 
  new.ord<- x
  ef.r<- envfit(x, x$CA$Xbar, choices= choices, permutations = 0)$vectors$r
 
  if(!is.null(n)){
    new.ord$CA$v<- x$CA$v[order(-ef.r)[1:n], , drop= F]
  } else {
    new.ord$CA$v<- x$CA$v[ef.r >= r, , drop= F]
  }
 
    new.ord$species.fit<- envfit(new.ord, new.ord$CA$Xbar[, rownames(new.ord$CA$v)],
                                 choices= choices, permutations = 0)$vectors$r
  return(new.ord)
}
 
# Example
#library(vegan) # attach vegan library
#data(dune) # load example data
#pca<- rda(dune) # calculate PCA
#pca.reduced<- reduce.pca(pca, 0.6) # reduce to species with fit at least 0.6
#pca.reduced<- reduce.pca(pca, 15) # reduce to 15 best-fitted species
#pca.reduced$species.fit # check the fit of species that passed the fit criterion 
  # and are kept in the analysis
#plot(pca.reduced) # plot the ordination
anadat/cs/fun/reduce.pca.txt · Last modified: 2017/04/09 08:56 by vitek