Multivariate Statistik - Aufgabe 7 - Clusteranalyse

From StatWiki
Jump to: navigation, search

Gelerntes zu Clusteranalyse

Daten sollten standardisiert werden (siehe #Beispiel 4)

Hierarchical Clustering in R mit agnes oder hclust.

Ward kann bei Hoch korrelierten Daten unsinn machen.

Der Bannerplot zeigt die Distanz zwischen den Beobachtungen an (Wenig weiss = Viel Rot = sehr nahe = sehr ähnlich)

Agglomerative Coefficient = Verhältniss Rot/Weiss (Hoch ist gut)

pam macht robustes k-means Clustering und bei plot(pam(...)) zeigt der Silhouette an wie gut eine Beobachtung zu dem Cluster passt (nahe bei 1 gut, unter 0 = passt gar nicht)

Beispiel 1

Engine.php: found forbidden command "read.csv("
in

library(cluster) library(foreign)

d1=data.frame(x1=c(18,14,20,16,12,18,16,15,22), x2=c(24,24,21,23,21,20,23,20,22), x3=c(24,18,25,25,20,27,27,22,22))

d2=data.frame(matrix(c(10.1,1.4,0.5,8.9,0.2,42.3,0.6,5.5,1.7 ,8.9,14,4.3,19.9,2.1,28,3.6,1.3,4.3 ,13.5,9.3,4.1,17.5,4.5,26.6,5.7,2.1,4 ,7.8,6,1.6,8.3,1.2,56.7,1.1,3.7,4.2 ,9.7,11.4,2.8,12.5,2,34.3,5,1.1,4 ,10.6,10.8,3.7,25,9.9,21.9,4.8,0.7,2.4 ,8.4,11.6,3.7,11.1,5.4,24.6,6.5,0.8,3.6 ,9.5,4.9,2.7,33.7,5.8,26.3,5.1,1,1.4 ,18,9.9,3.3,19.5,5.7,28.1,4.8,2.4,6.5 ,10.2,3,2.8,17.6,5.9,41.7,2.2,7.8,6.5 ,5.3,12.4,2.9,9.7,0.3,40.1,4,5.4,4.2 ,13.9,10,4.7,25.8,2.2,24,6.2,1.6,2.9 ,9,5.1,2.9,13.7,3.4,36.8,2.1,4.3,6.7 ,9.5,13.6,3.6,23.4,2.5,22.4,4.2,1.8,3.7 ,9.4,4.7,2.7,23.3,9.7,23,4.6,1.6,2.7 ,6.9,10.2,2.7,19.3,3,36.1,5.9,2,6.6 ,6.2,3.7,1.1,4.9,14.2,27,5.9,4.7,7.9 ,6.2,6.3,1.5,11.1,1,49.6,3.1,5.3,2.8 ,7.1,3.4,3.1,8.6,7,29.2,5.7,5.9,7.2 ,9.9,7.8,3.5,24.7,7.5,19.5,3.7,1.4,2 ,13.1,10.1,3.1,23.8,2.3,25.6,2.8,2.4,4.9 ,17.4,5.7,4.7,20.6,4.3,24.3,4.7,3.4,3.3 ,9.3,4.6,2.1,16.6,3,43.6,6.4,3.4,2.9 ,11.4,12.5,4.1,18.8,3.4,18.6,5.2,1.5,3.8 ,4.4,5,1.2,9.5,0.6,55.9,3,5.7,3.2), ncol=9,byrow=T))

colnames(d2) = c("RedMeat","WhiteMeat","Eggs","Milk","Fish","Cereals","Starch","Nuts","Fr&Veg") rownames(d2) = c("Albania", "Austria", "Belgium", "Bulgaria", "Czechoslovakia", "Denmark", "E Germany", "Finland", "France", "Greece", "Hungary", "Ireland", "Italy", "Netherlands", "Norway", "Poland", "Portugal", "Romania", "Spain", "Sweden", "Switzerland", "UK", "USSR", "W Germany", "Yugoslavia")

d3=read.csv(paste(rfiles,"NRW02_Wien.csv",sep="/"),row.names=1)

  1. Stimmen in

d3p = d3 / apply(d3,1,sum)

  1. colnames(d4) = c("Finanzierung","Personal/Organisation","Absatz","Unternehmensgegenstand",
  2. "Produktion/beschaffung","Zeitplan","Ausstiegsszenario")

d4 = read.csv(paste(rfiles,"Geschaeftsplan.csv",sep="/"))

Daten

Engine.php: unknown attribute(s) "direct"
in
d1
Engine.php: unknown attribute(s) "direct"
in
 
pdf(rpdf)
library(cluster)
clusplot(clara(d1,3,metric="manhattan"))
Engine.php: unknown attribute(s) "direct"
in
pdf(rpdf)
library(cluster)
clusplot(clara(d1,2,metric="manhattan"))

Beispiel 2

de:Distanzfunktion#City-Block-.2C_Taxi-_bzw._Manhattan-Distanz ist definiert als d(x,y) = L_1(x,y) = \sum_{i=1}^n |x_i-y_i|

Distanzmatrix zu den obigen Daten.

Engine.php: unknown attribute(s) "direct"
in
library(cluster)
clara(d1,3,metric="manhattan")$diss
Engine.php: unknown attribute(s) "direct"
in
pdf(rpdf)
library(cluster)
plot(hclust(dist(d1,method="manhattan")))

Bottom-Up Clustering / Agglomerierendes Verfahren

  1. Zu Beginn ist jeder Datenpunkt seine eigene Partition.
  2. Es werden jene beiden Partition fusioniert, deren Distanz (für Complete Linkage: maximale Distanz zweier Elemente aus den beiden Partitionen) minimal ist.
  3. Man wiederhole Punkt 2, bis nur mehr eine Partition existiert.

Der minimal Abstand in jeder Iteration wird als Heterogenitätskoeffizient.

Beispiel 3

Welche Länder haben ähnliche Konsumgewohnheiten?

Daten

Engine.php: unknown attribute(s) "direct"
in
d2

Beispiel 3 - Complete

Engine.php: unknown attribute(s) "direct"
in
pdf(rpdf)
library(cluster)
plot(agnes(scale(d2),method="complete"),which.plots=2)
Engine.php: unknown attribute(s) "direct"
in
pdf(rpdf)
library(cluster)
plot(agnes(scale(d2),method="complete"),which.plots=1)

Beispiel 3 - Single

Engine.php: unknown attribute(s) "direct"
in
pdf(rpdf)
library(cluster)
plot(agnes(scale(d2),method="single"),which.plots=2)
Engine.php: unknown attribute(s) "direct"
in
pdf(rpdf)
library(cluster)
plot(agnes(scale(d2),method="single"),which.plots=1)

Beispiel 3 - Ward

Engine.php: unknown attribute(s) "direct"
in
pdf(rpdf)
library(cluster)
plot(agnes(scale(d2),method="ward"),which.plots=2)
Engine.php: unknown attribute(s) "direct"
in
pdf(rpdf)
library(cluster)
plot(agnes(scale(d2),method="ward"),which.plots=1)

Beispiel 3 - Zentroid

Wie geht das mit agnes?

Beispiel 4

Engine.php: unknown attribute(s) "direct"
in
pdf(rpdf)
library(cluster)
plot(agnes(d3,method="complete"),which.plot=2)
Engine.php: unknown attribute(s) "direct"
in
pdf(rpdf)
library(cluster)
plot(agnes(d3p,method="complete"),which.plot=2)

Aufgrund der obigen Plots entscheide ich mich für 4 Cluster.

Engine.php: unknown attribute(s) "direct"
in
pdf(rpdf)
library(cluster)
clusplot(clara(d3p,4),labels=3)

Die Zentren der Cluster.

Engine.php: unknown attribute(s) "direct"
in
library(cluster)

clara(d3p,4)$medoids

Innere Stadt sind hauptsächlich nicht Wähler. Meidling, Floridsdorf, Donaustadt sind klassische SPÖ Bezirke. Hernals, Döbling sind klassische ÖVP Bezirke. In Wieden, Mariahilf sind die Grünen sehr stark.

Alles in allem wenig überraschend, bis auf die Innere Stadt (zumindest für mich).

Mit absoluten Stimmenanzahlen schauts eigentlich sehr anders aus. Die Grösse der Bezirke spielt sehr stark mit rein.

Engine.php: unknown attribute(s) "direct"
in
pdf(rpdf)
library(cluster)
clusplot(clara(d3,4),labels=3)

Alternativ könnte man noch mit Mahalanobis Distanz (passend weil Daten hoch korreliert) und pam arbeiten.

plot(agnes(d3p, metric="mahalanobis",method="average"))

plot(pam(d3p,5,metric="mahalanobis"),labels=3)

Beispiel 5

Beispiel 6

Engine.php: unknown attribute(s) "direct"
in

summary(d4)

Beispiel 7