### Tutorium 3 ### ## Aufgabe 2 ## # a) Land <- c("Deutschland", "Indonesien", "Japan", "Israel") Lebenserwartung <- c(81.1,79.6,85, 81) KindproFrau <- c(1.29,2.02,1.33,2.9) data<-data.frame(Lebenserwartung,KindproFrau, row.names=Land) data # b) # nicht normalisierte Variablen dist(data, method = "euclidean") # normalisierte Variablen (normalized <- scale(data)) dist(normalized, method = "euclidean") # es reicht auch lediglich zu skalieren (ohne zentrieren) scaled <- cbind(data[,1]/sqrt(var(data[,1])), data[,2]/sqrt(var(data[,2]))) dist(scaled, method = "euclidean") # Fuer die City-Block-Matrix bzw. Manhattan Distanzmatrix: method="manhattan" # c) library(cluster) # Das Paket cluster enthaelt verschiedene Clustering-Verfahren # (sowohl hierarchische als auch Partitionsverfahren) # Hierarchische Verfahren: Konstruieren eine Hierarchie von Clusterungen, # wobei die Anzahl der Cluster von 1 bis # zur Anzahl der Beobachtungen variiert # Man unterscheidet hierbei agglomerative (Cluster # nach und nach zusammenfassen) und divisive (Cluster # nach und nach aufsplitten) Verfahren! # Partitionsverfahren: Hier muss die Anzahl der Cluster vom Anwender # vorgegeben werden! ?agnes # siehe Hilfe: In case of a matrix or data frame, each row corresponds # to an observation, and each (!) column corresponds to a variable. # All variables must be numeric. # Deswegen: # Datensatz ohne Variable "Land" und stattdessen die Laendernamen als # rownames, da nur numerische Variablen erlaubt sind! ## Funktion: agnes() ## Fuehrt agglomerative hierarchische Clusterung durch ## Uebergabe: ## * x: Data.frame oder (Distanz)Matrix ## * method=c("average", "single", "complete", "ward",...) Linkageverfahren ## * metric=c("euclidian", "manhattan") help(diana) ## Funktion: diana() ## Fuehrt divisive hierarchische Clusterung durch ## Uebergabe: ## * x: dataframe oder (Distanz)Matrix ## * metric=c("euclidian", "manhattan") # Vorgehen beim Aufsplitten: # 1) Bestimme Cluster mit dem groessten Durchmesser # (Durchmesser = groesste Distanz # zwischen zwei Objekten im Cluster) # 2) Splitte zunaechst das Objekt vom Cluster ab, das zu den # anderen Objekten im Cluster die groesste mittlere Unaehnlichkeit # aufweist! Dieses Objekt initialisiert die "Splittergruppe". # 3) Ordne Objekte aus dem geteilten Cluster der Splittergruppe zu, # wenn sie dieser aehnlicher sind als dem "alten" Cluster! # d) ### Agglomeratives Clustering mit Complete Linkage und euklidischer Metrik ag.cl.euc <- agnes(x=normalized, diss=F, metric="euclidean", method="complete") # diss=FALSE, da normalized Rohdaten-Datensatz ist und keine Distanzwerte hat ag.cl.euc$diss # Aequivalent zur Distanzmatrix: dist(normalized, method = "euclidean") # mit Manhattan-Metrik ag.cl.man <- agnes(x=normalized, diss=F, metric="manhattan", method="complete") ag.cl.man$diss # Aequivalent zur Distanzmatrix: dist(normalized, method = "manhattan") # Vergleich der Dendrogramme par(mfrow=c(1,2)) plot(ag.cl.euc,which.plots=2, main="agglomerativ (euklidisch)") # which.plots=2 => nur das Dendrogramm wird geplottet, kein Banner-Plot plot(ag.cl.man,which.plots=2, main="agglomerativ (manhattan)") # Unterschiedliche Distanzen fuer verschiedene Metriken, aber die Gruppierungen und # Strukturen sind im wesentlichen gleich (z.B. Zusammenfassung Deutschland/Indonesien) # e) # Hier keine Linkage-Option. Die Aufteilung erfolgt nach einem bestimmten Verfahren! # Euklidische Metrik dia.euc <- diana(x=normalized, diss=F, stand=F, metric="euclidean") # Manhattan Metrik dia.man <- diana(x=normalized,diss=F,stand=F,metric="manhattan") par(mfrow=c(1,2)) plot(dia.euc,which.plots=2, main="divisiv (euklidisch)") plot(dia.man,which.plots=2, main="divisiv (manhattan)") # Hier unterschiedliche Gruppierung bei Verwendung # von unterschiedlichen Metriken. par(mfrow=c(1,2)) plot(dia.euc,which.plots=2, main="divisiv (euklidisch)") plot(ag.cl.euc,which.plots=2, main="agglomerativ (euklidisch)") # Aber divisives euklidisches Clustering aehnlich zu agglomerativem # euklidischem Clustering (mit Complete Linkage) # f) ?kmeans # Clusteranzahl wird fest vorgeschrieben, kann nicht wie bei hierarchischen Verfahren aus Dendrogramm # geschaetzt werden kmeans.clustering <- kmeans(normalized, centers=2, nstart=100) # Betrachten der entstehenden Clusterung kmeans.clustering$cluster kmeans.clustering <- kmeans(normalized, centers=3, nstart=100) kmeans.clustering$cluster