cranio <- 'TO-DO' # nacteni dat Howell.csv our.pop <- c('AUSTRALI', 'BUSHMAN', 'ZALAVAR', 'BERG', 'ZULU', 'NORSE', 'EGYPT', 'EASTER I', 'PERU', 'BURIAT') data <- cranio[cranio$Sex == 'M' & cranio$Population %in% our.pop, c('Population', 'XFB', 'ZYB', 'BPL', 'NPH', 'NLH', 'OBH', 'OBB', 'NLB', 'ZMB')] 'TO-DO' # uprava promenne Population na faktor ## vypocet prumernych hodnot sledovanych promennych pro kazdou populaci # chceme mit prumery ulozene v "tabulce" (data.frame), proto pouzijeme napr. cyklus for # nejprve musime vyrobit prazdny vektor (matici), do ktereho budeme postupne pridavat hodnoty prumeru dane populace m.all <- c() for (pop in levels(data$Population)) { # Promenna "pop" bude postupne nabyvat vsech hodnot, ktere jsou ve vektoru our.pop # To znamena, ze se kod, ktery je nize ve slozenych zavorkach, provede postupne pro # vsechny populace - vypocita se vektor prumeru m.pop a ten prida do matice m.all. m.pop <- colMeans(data[data$Population == pop, -1]) m.all <- rbind(m.all, m.pop) } # sestaveni tabulky, kde pridame prvni sloupec, ve kterem bude nazev populace, # v jednotlivych radcich pak mame prumerne hodnoty promennych pro danou populaci howells <- data.frame(Population = levels(data$Population), m.all, row.names = NULL) ## krabicove diagramy prumeru vsech promennych # pro zakladni prehled o datech a kvuli rozhodnuti o nutnosti standardizace dat 'TO-DO' ## standardizace dat - je nutna pri rozdilne variabilite howells.scale <- scale(howells[,-1]) ## vykresleni v prostoru prvnich dvou PC howells.pca <- 'TO-DO'(howells.scale) biplot(howells.pca, xlabs=howells$Population) ### HIERARCHICKE SLUCOVANI # nejprve spocitame matici vzdalenosti - pro spojite promenne pouzijeme klasickou euklidovskou vzdalenost distance <- dist(howells.scale, method = 'euclidean') # samotnou analyzu provedeme pomoci fce hclust, do ktere zadavame matici vzdalenosti a metodu, kterou chceme pouzit #(a) Metoda nejblizsiho souseda (method = "single") method1 <- hclust(distance, method = "single") plot(method1, hang = -1, labels = howells$Population) # vykresleni dendrogramu # rozdeleni na 4 shluky clusters1 <- cutree(method1, 4) data.frame(howells$Population, clusters1) # tabulka s prislusnosti populace k dane skupine # (b) Metoda nejvzdalenejsiho souseda (method="complete") method2 <- hclust(distance, method = "complete") 'TO-DO' # Metoda prumerne vazby (method="average") method3<- hclust(distance, method = "average") 'TO-DO' # Wardova metoda (method="ward.D2") method4 <- hclust(distance, method = "ward.D2") 'TO-DO' # Kofeneticke koeficienty korelace pro jednotlive metody # Funkce cophenetic() na vystup z funkce hclust() a nasledne korelace s promennou distance coph1 <- cophenetic(method1) cor(distance, coph1) 'TO-DO' # pro ostatni metody ### NEHIERARCHICKE SLUCOVANI # Metoda k-prumeru - funkce kmeans(), je nutne specifikovat pocet shluku # vstupem nyni neni matice vzdalenosti, ale skalovana matice dat method5 <- kmeans(howells.scale, 4) data.frame(howells$Population, method5$cluster) # vypis prislusnosti ke shluku # vliv promennych na prirazeni do shluku # chceme zjistit, ktere promenne maji nejvetsi vliv na rozrazeni populaci do danych shluku # muzeme pouzit ANOVu, kdyz pridame prislusnost ke shluku jako sloupec k datum, ovsem musi byt typu faktor howells$kmeans.cluster <- as.factor(method5$cluster) anova(aov(XFB ~ kmeans.cluster, data = howells)) 'TO-DO' # analogicky pro vsechny dalsi promenne ## rozdeleni promennych do shluku d2 <- dist(howells.pca$rotation[,1:2]) # vzdalenosti promennych v souradnicich prvnich dvou PC m.variables <- hclust(d2, method = "ward.D2") plot(m.variables, hang = -1) cutree(m.variables, 2) ## shlukova metoda pomoci PCA pro populace # namisto euklid. vzdalenosti pouzijeme vzdalenosti v prostoru hlavnich komponent d3 <- dist(howells.pca$x[,1:2]) # pouzijeme prvni dve PC m.pca <- hclust(d3, method = "ward.D2") plot(m.pca, hang = -1, labels = howells$Population) clusters.pca <- cutree(m.pca, 4) data.frame(howells$Population, clusters.pca) 'TO-DO' # samostatne zpracujte nereseny priklad