# nastaveni cesty getwd() setwd("c:/Users/brozoval/Desktop/vyuka/2018/BIMAT/2. cviceni/") # nacteni balicku install.packages('vegan') # pro funkci vegdist library(vegan) install.packages('ade4') # pro funkci dist.binary library(ade4) install.packages('magrittr') # pro funkci "%>%" library(magrittr) install.packages("HDMD") # pro funkci pairwise.mahalanobis library(HDMD) # ------------------------------------------------------------------------ # Asociacni matice ------------------------------------------------------- # ------------------------------------------------------------------------ ########## # Priklad 1: Vytvorte asociacni matici pro datovy soubor lokality. V pripade potreby pouzijte vhodnou standardizaci. ########## lokality<-read.table('lokality.csv', sep=";", header=TRUE, dec=".") head(lokality,10) dim(lokality) is(lokality) names(lokality) row.names(lokality)<-lokality[,1] # ulozeni nazvu lokalit do nazvu radku lokality<-lokality[,-1] head(lokality,10) ########## standardizace summary(lokality) # promenne maji odlisny rozsah, data je potreba standardizovat lokality.stan <- lokality%>% na.omit() %>% # odstrani chybejici hodnoty scale() # standardizuje data dim(lokality.stan) round(apply(lokality.stan, 2, mean),1) # prumer promennych je roven 0 apply(lokality.stan, 2, var) # rozptyl promennych je roven 1 dim(lokality.stan) # jedna lokalita vyrazena z analyzy, protoze nebyla zmerena nadmorska vyska # alternativou je funkce decostand z balicku vegan, tato ponecha v datech puvodni pocet objektu bez ohledu na vyplnenost dat dim(decostand(lokality,method="standardize",na.rm=TRUE)) ########## asociacni matice - Euklidovska vzdalenost ?dist dist.lokality.stan<-dist(lokality.stan,method='euclidean') # vypocet asociacni matice dist.lokality.stan # pouze horni/dolni trojuhelnikova matice dist.lokality.stan<-as.data.frame(as.matrix(dist.lokality.stan))# doplneni na ctvercovou matici a pak prevedeni na tabulku dim(dist.lokality.stan) head(dist.lokality.stan) write.table(dist.lokality.stan, file="dist.lokality.stan.csv", sep=";") # ulozeni matice - format csv write.table(dist.lokality.stan, file="dist.lokality.stan.txt", sep="\t") # ulozeni matice - format txt ########## asociacni matice - Mahalanobisova vzdalenost # vzdalenost objektu od centroidu ?mahalanobis lokality.mis <- lokality%>%na.omit() # odstrani chybejici hodnoty X <- lokality.mis X.cov <- var(X) X.mean <- apply(X,2,mean) X.mah <- sqrt(mahalanobis(X, X.mean, X.cov)) plot (X.mah) text(1:28,X.mah+0.1,row.names(lokality.mis)) # lokalita 24 je nejvice vzdalena centroidu = vicerozmerny outlier # vzdalenosti skupin objektu ?pairwise.mahalanobis group<-c(rep(1,times=10),rep(2,times=8),rep(3,times=10)) Maha_goup<-pairwise.mahalanobis(X, grouping=group) D = sqrt(Maha_goup$distance) D # skupina 3 je od 1 vice vzdalena nez skupina 2 # vzdalenosti dvojic objektu d <- lokality.mis[1,]-lokality.mis[2,] Mah <- sum(d*(solve(X.cov,d))) Mah.fin.1.2 <- sqrt(Mah) d <- lokality.mis[1,]-lokality.mis[24,] Mah <- sum(d*(solve(X.cov,d))) Mah.fin.1.24 <- sqrt(Mah) Mah.fin.1.2;Mah.fin.1.24 # lokalita 2 je dle svych charakteristik vice podobna lokalite 1 ve srovnani s lokalitou 24 ########## # Priklad 2: Vytvorte asociacni matici abundanci ryb, pouzijte vhodny asociacni koeficient. ########## ryby<-read.table('ryby.csv', sep=";", header=TRUE, dec=".") head(ryby,10) dim(ryby) is(ryby) names(ryby) row.names(ryby)<-ryby[,1] # ulozeni nazvu lokalit do nazvu radku ryby<-ryby[,-1] head(ryby,10) summary(ryby) ryby.mis <- ryby%>% na.omit() # odstrani chybejici hodnot dim(ryby.mis) ?vegdist #jedna z mnoha funkci pro vypocet koeficientu podobnosti/vzdalenosti ?dist.binary # method = 2 pro vypocet simple matching koeficientu dist.ryby<-vegdist(ryby.mis, "jac", binary=F) # vypocet asociacni matice na abundancich(poctech) druhu = 1 - Sorensenuv asymetricky koeficient podobnosti pro data abundanci dist.ryby.b<-vegdist(ryby.mis, "jac", binary=T) # vypocet asociacni matice na ne/pritomnosti druhu (binarnich prom.) = 1 - Jaccard dist.ryby.b<-as.data.frame(as.matrix(dist.ryby.b)) # doplneni na ctvercovou matici a pak prevedeni na tabulku dist.ryby.b #POZOR!!!! Podobnosti jsou pomoci funkce 1-podobnost prevadeny na vzdalenosti!!! (na diagonale jsou nuly) write.table(dist.ryby.b, file="dist.ryby.b.csv", sep=";") # ulozeni matice # ------------------------------------------------------------------------ # Vypocet Mantelova testu ------------------------------------------------ # ------------------------------------------------------------------------ ########## # Priklad 3: Zjistete, zda spolu souvisi fyzicko-chemicke charakteristiky lokalit a slozeni spolecenstev na lokalitach. ########## # Reseni: Zavislost matic lokality a ryby testujeme pomoci mantel testu ?mantel mantel(dist.lokality.stan,dist.ryby.b, method="spearman", permutations=10000) # Asociacni matice jsou statisticky vyznamne korelovany (p < 0.05). # Koeficient korelace > 0 -> kladna korelace -> cim vice jsou lokality odlisne na zaklade charakteristik prostredi, # tim vice se lisi abundanci ryb a naopak cim podobnejsi si jsou lokality na zaklade charakteristik prostredi, tim podobnejsi # si jsou na zaklade vyskytu zivocisnych druhu.