User Tools

Site Tools


Sidebar

Předkonferenční workshop 2017

ws17:cs:manual

Příprava pracovního prostředí

Instalace balíku vegan (pouze jednou)

install.packages("vegan")

Připojení knihovny balíku vegan (vždy po spuštění R)

library(vegan)

Změna defaultní barevné palety

palette(c("#999999", "#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", 
          "#D55E00", "#CC79A7"))

Načtení dat

co musím pohlídat:

  1. oddělovač buněk sep= “\t” pro tabul8tor
  2. desetinný oddělovač dec= “.” nebo “,”
  3. zda mám záhlaví - jména sloupců header= TRUE, ano, mám header
  4. a zda mám jména řádků, např. jména lokalit (většinou v prvním sloupci) row.names= 1

Načítám Tab-delimited text (tabulátorem oddělené buňky), mám desetinné tečky, záhlavi sloupců i jména řádku v prvním sloupci.

read.table("data/spe.txt", sep= "\t", dec= ".", header= T, row.names= 1)

Mohu použít jiný příkaz z rodiny read., který bude mít lépe přednastavené argumenty, v mém případě read.delim(), viz ?read.delim.

spe<- read.delim("data/spe.txt", row.names= 1, check.names= F)

argument check.names=FALSE zajistí, že R nebude kontrolovat a upravovat jména druhů v záhlaví (jinak by nahradilo mezery tečkami)

Načtení env dat

Je identické, jen vím, žejména proměnných jsou v pořádku, není tedy třeba používat argument check.names=

env<- read.delim("data/env.txt", row.names= 1)

Kontrola načtených dat

str(spe)
str(env)

Nahrazení NA hodnot nulami

spe[is.na(spe)]<- 0

Vytvoření zkratek druhů a přejmenování sloupců v dataframu zkratkami

names(spe)<- make.cepnames(names(spe))

EDA

Otevření samostatného grafického okna

windows()

Dotchart všech abundancí (musím je nejprve převést na matici, protože funkce dotchart() požaduje numerický objekt)

dotchart(as.matrix(spe))

Protože dotchart na matici nevypadá moc dobře (kreslí body přes jména druhů), můžeme si body nechat vykreslit manuálně. Zde je jednoduchá funkce, která to udělá:

dtf.dotchart<- function(dtf, pch= 16, cex= 0.7, ...){
  n<- nrow(dtf) # get number of rows
  k<- ncol(dtf) # get number of columns
  temp<- stack(dtf) # reshape data into long format
  temp$nr<- as.numeric(temp$ind) + seq(0, 0.8, length= n) # create positions on Y
  vars<- levels(temp$ind) # extract names of variables (species)
 
  plot(nr ~ values, data= temp, type= "n", axes= F, ann= F, ...) # plot an empty plot
  x<- par("usr") # get coordinates of the plot
  rect(x[1], x[3], x[2], x[4], col= "grey90") # draw a grey rectangle
  abline(h= (1:(k+1)) - 0.1, col= "white", ...) # draw lines among variables (species)
  points(nr ~ values, data= temp, pch= pch, cex= cex, ...) # draw the points
  axis(1) # axis X
  axis(2, at = 1:k + 0.4, labels = vars, las= 1, tick = F, ...) # axis Y
}

Celý kód pošlete do R, tím funkci nadefinujete, pak použijeme následovně:

par(mar= c(2,6,1,1)) # nastavení okrajů grafického okna (aby se vešly zkratky druhů)
dtf.dotchart(spe)

Z grafu jsou patrné dvě odlehlé hodnoty. Jak zjistíme o jaké druhy, na jaké lokalitě jde? Zde elegantní řešení od kolegy Petra Procházky:

which(spe>1000, arr.ind = T)
    row col
s26  26  23
s21  21  53

Argument arr.ind= TRUE funkce which() zajistí, že pozice hodnot splňujících podmínku je nám vrácena pomocí “souřadnic” v datové tabulce. Jména daných druhů zjistíme např. z pořadových čísel sloupců:

names(spe)[c(23,53)]
[1] "Micrsp"   "Tvetcalv"

Po zkontrolování protokolů vidíme, že hodnoty byly chybně opsány. Přepíšeme přiřazením nové hodnoty:

spe[26, 23]<- 217
spe[21, 53]<- 127

Alternativní postup, zobrazení abundancí vybraného druhu:

spe$Tvetcalv
spe$Tvetcalv[21]

Úprava chybné abundance

spe$Tvetcalv[21]<- 127

Rozdělení grafického okna na 3 řádky a 3 sloupce

par(mfrow=c(3,3))

Dotchart pro všechny numerické proměnné

multidot(env[, -(1:2)])

Na základě dotchartu transformji některé proměnné

env$velSD<- sqrt(env$velSD)
env$shear_vel<- sqrt(env$shear_vel)
env$roughness<- log(env$roughness)

Kontrola rozložení

multidot(env[, -(1:2)])

Párový graf pro numerické proměnné

pairs(env[, -(1:2)], 
      lower.panel= panel.cor, 
      upper.panel= panel.smooth2, 
      diag.panel=panel.hist)

Odstranění druhů zaznamenaných pouze na jedné lokalitě

spe1<- spe[, colSums(spe>0) >=1]

Seřazení lokalit v druhové matici podle Froudeho čísla a druhů podle váženého průměru Froudeho čísla

vm<- vegemite(spe1, use = env$froude, scale="log")

Vizualizace seřazené matice (musí být připojena knihovna balíku RColorBrewer)

heatmap(t(log1p(spe1[order(env$froude), rev(vm$species)])), Rowv= NA, Colv= NA,
        col= c("grey80", brewer.pal(5, "Greens")), scale= "none")

Transformace abundancí

Hellinger

spe.hell<- decostand(spe, method= "hel")

Chord

spe.ch<- decostand(spe, method= "norm")

ln(x+1)

spe.ln<- log1p(spe)

Distanční matice

Sorensen (Bray-Curtis) abundanční distance na log datech:

d.bray<- vegdist(spe.ln)

Hellingerovy distance:

d.hel<- vegdist(spe.hel, method= "euclid")

Tětivová distance:

d.ch<- vegdist(spe.ch, method= "euclid")

PCA

PCA na logaritmovaných abundancích a korelační matici

rda(spe, scale= T)

PCA na korelační matici proměnných prostředí

rda(env[, -(1:2)], scale= T)

PCA na přímých abundancích a kovarianční matici (není obvykle dobrý nápad)

rda(spe, scale= T)

PCA Hellingerovsky transformovaných abundancích a korelační matici

pca.hell<- rda(spe.hell, scale= T)

Zobrazení lokalit na prvních dvou osách ordinace

plot(pca.hell, scaling= "sites", display= "sites")

Přidání konvexních hullů

plot(pca.hell, scaling= "sites", display= "sites")
ordihull(pca, env$hydr, scaling= 1, col = 1:2,
         draw="polygon", border = NA)

Přidání pavouků

plot(pca.hell, scaling= "sites", display= "sites", type= "n")
ordispider(pca, env$hydr, scaling= 1, col = 1:2, lwd= 2)

CA

CA na logaritmovaných abundancích

cca(spe.ln)

DCA

decorana(spe.ln)

NMDS

NMDS na logaritmovaných abundancích s použitím Sorensenovy (Bray-Curtis) distanční matice. Výsledná konfigurace bude mít 2 rozměry, bude dosažena z minimálně 50 a maximálně 100 náhodných startovních pozic a data nebudou automaticky nijak transformována.

mds<- metaMDS(spe.ln, k = 2, try = c(50, 100), autotransform = F)

Extrakce skóre lokalit a druhů

sc.loc<- scores(mds, display= "sites")
sc.spe<- scores(mds, display= "species")

Shlukovka

UPGMA s distancí Sorensen (Bray-Curtis) na ln(x+1) abundancích

bray.upgma<- hclust(d.bray, method= "average")
plot(bray.upgma)

UPGMA s Hellingerovou distancí

hell.upgma<- hclust(d.hell, method= "average")

Říznutí dendrogramu na úrovni 4 skupin

ct<- cutree(hell.upgma, 4)

Odlišení skupin v ordinaci NMDS

plot(sc.loc, type= "p", col= ct, pch= 16, cex= 2)
plot(sc.loc, type= "n")
ordispider(sc.loc, ct, col = 1:4, lwd= 2)
ws17/cs/manual.txt · Last modified: 2017/02/23 19:02 by vitek