Clusteranalyse mit R-echts?

Die Ausgangslage:

Im Rahmen eines kleineren Instituts-Projekts ist mir ein alter Bekannter wieder begegnet: Die Cluster-Analyse. Als ein in SPSS sozialisierter Mensch, eigentlich auch kein Problem. Eigentlich.

Dieses „eigentlich“ hat zwei Ursachen:

  1. Eine faktisch irrationale Ursache:
    Ausgehend von einem anderen Projekt habe ich scheinbar ein Faible für R entwickelt. Klingt komisch, ist aber so.
  2. Die nachvollziehbare Ursache:
    Der zu clusternde Datensatz umfasst ca. 30.000 Records und (hwst.) 8 Variablen. Ein erster Probelauf in SPSS mit einem vergleichbaren Datensatz führte zu regelmäßigen Abstürzen meines Rechers (4 GB RAM – von SPSS ruckzuck aufgefressen).

Wo ist das Problem, werden sich nun manche fragen? Stärkeren Rechner suchen und Variablen verdichten; Problem behoben. Ja und nein: Stärkeren Rechner suchen scheidet aufgrund sportlichen Ehrgeizes aus. Eine überschaubare Clusterung wie diese sollte auch auf einem Standard-Rechner möglich sein. Variablen verdichten ist ntürlich immer eine schlaue Idee, aber: a) es handelt sich um unkorrelierte Variablen (= nachvollziehbar) und b) Faktoren erschweren den Endverbraucher der Clusterung eine sinnvolle Interpretation (= ev. nachvollziehbar, statistisch eigentlich irrelevant).

Die Konklusio

Die Clusterung soll in R durchgeführt werden, was ich in den nächsten Zeilen kurz beschreiben möchte. Bevor es dazu aber kommt, noch einige allgemeine Anmerkungen:

  • Wer sich das Thema Clusterung wieder ins Gedächtnis rufen möchte: Googlen, Wikipedia nachschauen, oder wer eine für Nicht-Statistik-Profis verständliche Erklärung sucht:
    Backhaus, K.; Erichson, B.; Plinke, W. und Weiber, R. (2011): Multivariate Analysemethoden: eine anwendungsorientierte Einführung. 13. Aufl., Berlin, Springer.
  • Die verwendete Software R kann direkt über das R-Project bezogen werden.
  • Um die Bedienung von R etwas komfortabler zu gestalten, sei hier die Arbeitsumgebung „RStudio“ empfohlen.
  • In weiterer Folge wird die prinzipielle Vorgehensweise, nicht jedoch die konkreten Ergebnisse meiner Analyse vorgestellt.
  • Die beschriebene Vorgehensweise geht von unabhängigen (= nicht untereinander korrelierten) Variablen aus. Sollte diese Voraussetzung nicht erfüllt sein, müsste zuvor eine Verdichtung der Variablen mittlels Faktorenanalyse durchgeführt werden. Auch hier gilt wieder: Wer sich das Thema Faktorenanalyse wieder ins Gedächtnis rufen möchte: Googlen, Wikipedia oder bei Backhaus et al. (2011) nachlesen.
  • @ R-Profis: Ich weiß, der hier angeführte Code ist a) zusammengeklaut (vor allem von hier: http://www.statmethods.net/advstats/cluster.html), b) nicht perfekt und c) könnte viiiiiiiiiiiiiiiiiiel kürzer umgesetzt werden. Ja. Für die Erstellung des hier angeführten Codes war es jedoch wichtig, dass a) auch R-Dummies zumindest eine reale Chance haben, diesen lesen zu können und b) dieser für Standard-Fälle (wie man auch immer solche definieren möchte) zufriedenstellende Cluster-Lösungen liefert.
  • @ Statistik-Profis: Ich bins mir bewusst, hier nur sehr oberflächlich unterschiedliche Aspekte von Clusteranalysen abzudecken.

Und damit zur eigentlichen Action:

A) Der Daten-Import & deren Aufbereitung

Die verwendete Datensatz „testdata2.dbf“ beinhaltat Vektor-Rasterzellen der Statistik Austria mit Angaben zu HauptwohnsitzerInnen und u.a. deren höchsten Bildungsabschlüssen.

setwd("~/Dokumente/1___Work/Cluster_R")
library("foreign", lib.loc="/usr/lib/R/library")
# Import
temp = read.dbf("testdata2.dbf")

Über „setwd“ wird das Arbeitsverzeichnis von R festgesetzt, die Library „foreign“ beinhaltet einige benötigte Funktionen und mittels „read.dbf“ wird der Testdatensatz eingelesen.

Nun zur Aufbereitung der Daten:

mydataRAW <- temp[c("HWS01","BILDUNG_AK","BILDUNG_MA","BILDUNG_NI")]
mydata <- scale(mydataRAW)

Da der importierte Datensatz mehr Variablen enthält, als für die Clusterung nötig, werden die cluster-relevanten Variablen in das Datenset „mydataRAW“ ausgespielt. Um Verzerrungen durch unterschiedliche absolute Merkmalsausprägungen zwischen den Variablen zu vermeiden, werden die Variablen mittels „scale“ z-transformiert (= Mittelwert: 0, Standardabweichung: 1).

B) Anzahl der Cluster ermitteln

Nach der Aufbereitung der Daten bleibt die Frage zu klären, in wie viele Cluster diese Daten sinnvollerweise unterteilt werden sollten. Analog zur Ausgabe einer Proximity Matrix in SPSS kann auch in R Thorndikes „Elbow-Rule“ angewandt werden. Basis dafür bildet ein „Scree-Plot„:

scree

@ Interpretation des Scree-Plots: Auf der Abszisse die Cluster-Lösungen für 1 bis 14 Cluster, auf der Ordinate die „Heterogenität“ (= Summe der quad. Abweichungen in den Clustern) der jeweiligen Cluster-Lösungen. Der „Elbow“ ist jene Cluster-Lösung, nach der ein starkes Ansteigen der Heterogenität beobachtbar ist. Das Auffinden des Elbows ist somit eine Interpretationsleistung der/des BearbeiterIn. Im vorliegenden Fall würde ich mich für eine Lösung mit 4 Clustern entscheiden.

Im Unterschied zu SPSS (kennt hier jemand einen Trick?) kann der Scree-Plot in R dirket erstellt werden:

wss <- (nrow(mydata)-1)*sum(apply(mydata,2,var))
for (i in 2:14) wss[i] <- sum(kmeans(mydata,centers=i)$withinss)
plot(1:14, wss, type="b", xlab="Anzahl Cluster",ylab="Sum of squares within groups")

Die Anzahl der zu berücksichtigenden Cluster-Lösungen wird zweimal angegeben: Bei der Berechnung der Cluster-Lösungen („for (i in 2:14) …“) und bei der Visualisierung („plot(1:14, …“).

C) Cluster-Zuordnungen (mittels k-Means etc.)

Die so ermittete Anzahl der Cluster (= 4) geht dann direkt in die finale Clusterung mittels k-Means ein:

# K-Means Clusterung
cl4 <- kmeans(mydata, 4)

Als Alternative kann natürlich auch eine andere Strategie der Clusterbildung verwendet werden, beispielsweise hierarchische Clusterung (hier: mittels Ward-Fusionierung):

# Distanzmatrix erzeugen
d <- dist(mydata, method = "euclidean")
# Clusterung
cl4 <- hclust(d, method="ward")
# Dendogramm ausgeben
plot(cl4)
# Finale Cluster abgrenzen
groups <- cutree(cl4, k=4)

Egal nach welchem Verfahren die Cluster erzeugt wurden (hier: k-Means), die Zuordnung der Records zu den Clustern sollte noch in der Datentabelle abgelegt werden. Um die Charakterisierung der Cluster auch anhand der ursprünglichen (nicht-z-transformierten) Werte zu ermöglichen, wird die Cluster-Zuordnung auch in die Tabelle der Ausgangsdaten eingetragen:

# Cluster-Zuordnung in Datentabelle (z-tranformiert) eintragen
mydata <- data.frame(mydata, cl4$cluster)
#Cluster-Zuordnung in nicht-transformierte Datentabelle eintragen
mydataRAW$cl4 <- mydata$cl4

D) Trennschärfe der gefundenen Cluster-Lösung(en) einschätzen

Einen spannenden – mir bisher nicht bekannten – Zugang zur Abschätzung der Trennschärfe der gefundenen Cluster bietet die Funktion „clusplot“ aus der Library „cluster“:
Anhand einer zweidimensionale Hauptkomponentenanalyse (auf neudeutsch: PCA) werden dabei die einzelnen Cluster visualisiert. Mehr Hintergrund zum Thema PCA findet sich auf Wikipedia oder wieder einmal bei Backhaus et al. (2011).

# Cluster auf den ersten beiden "pricipal components" visulaisieruen
library(cluster)
clusplot(mydata, cl4$cluster, color=TRUE, shade=TRUE, labels=4, lines=0)

Und das sieht dann so aus:

pca

@ Interpretation: Cluster 1 weist die höchste, Cluster 2 die geringste interne Homogenität auf. Alle vier Cluster weisen keine Überschneidungen sowie deutliche Distanzen zueinander auf, was auf eine gute inhaltliche Unterschiedbarkeit der Cluster hinweist.

E) Beschreibung der gefundenen Cluster

Um die gefundenen Cluster inhaltlich besser zu verstehen, bietet sich deren Beschreibung anhand der jeweiligen Variablen an. Dazu besteht die Möglichkeit mittels „aggregate“ tabellarische Auswertungen von Lage- und Streuungsmaßen vorzunehmen:

# metr. Variablen: Mittelwert (z-transformiert) je Cluster
ClusterMeans <- aggregate(mydata,by=list(cl4$cluster),FUN=mean)
ClusterMeans
# metr. Variablen: Mittelwert je Cluster ClusterMeansRAW <- aggregate(mydataRAW,by=list(mydataRAW$cl4),FUN=mean)
ClusterMeansRAW

Diese Tabellen sehen dann in etwa so aus:

table

Alternativ können auch graphische Zugänge, beispielsweise Box-Plots oder Balkendiagramme, verwendet werden. Dazu bietet sich eine Batch-Erstellung mittels „lapply“ an:

# Auswahl der Variablen (hier: Varialben 1 bis 4; von links nach rechts)
theVarList <- c(1:4)
# für jede ausgew. Variable: Bar- & Box-Plot
lapply(theVarList, function(x){
 boxplot(mydataRAW[[x]]~mydataRAW$cl4, main=colnames(mydataRAW)[x], xlab = "Cluster")
 # Mittelwerte
 seMeans <- tapply(mydataRAW[[x]], mydataRAW$cl4, FUN=mean)
 barplot(seMeans, main=colnames(mydataRAW)[x], xlab = "Cluster", ylab = "Mean")
 })

Je ausgewählter Variable gibt das dann folgende zwei Plots:
Einen Bar-Plot der jeweiligen Cluster-Mittelwerte.

bar

Und wer sich für die Streuung der Variable innerhalb der jeweiligen Cluster interessiert, wird mit dem Box-Plot glücklich werden.

Box

Wer mit ordinalen oder nominalen Daten arbeitet, wird zur Beschreibung der Cluster auf Häufigkeitsauswertungen zurückgreifen müssen. Dazu bietet R folgende (Basis-)Funktionen an:

# Kreuztabelle mit Häufigkeiten 
KTable <- table(mydataRAW$F8,mydataRAW$cl4)
KTable

#Kreuztabelle mit Relativwerten
prop.table(KTable)
# Kreuztabelle mit Zeilensummen 
margin.table(KTable,1)
# Kreuztabelle mit Spaltensummen margin.table(KTable,2)

F) Exportieren der gefundenen Cluster-Zuordnungen

Wer die Cluster-Zuordnung in anderen Programmen nutzen möchte, kann auf eine Fülle von Exportformaten zurückgreifen. Handelt es sich bei den Records um räumliche Einheiten – beispielsweise Gemeinden, Rasterzellen etc. – bietet sich ein Export in Richtung GIS an. Dafür bieten sich die Formate CSV bzw. DBF an:

# den Namen & Location (relativ) des zu erzeugenden Files
exportFile = "___OUTPUT/cluster_V1"
# das File schreiben als a) csv, b) dbf
write.table(mydataRAW, paste(exportFile,".csv", sep=""), sep = ",",
            col.names = NA,
            qmethod = "double")
write.dbf(mydataRAW, paste(exportFile,".dbf", sep=""), factor2char = FALSE)

Fazit: R hat’s drauf

Alle, die bis hierher gelesen haben, werden es schon bemerkt haben: R erfordert ein wenig Code-Getipsel. Wenn man sich jedoch einmal eine grobe Analysestrategie samt Code zurecht gelegt hat, lassen sich Analysevarianten sehr schnell umsetzen. Darin findet sich aber noch kein deutlicher Unterschied zu einer Skript-basierten Herangehensweise an SPSS. Die zentralen Stärken von R im Bereich Cluster-Analyse liegen aus meiner Sicht in drei Punkten:

  • Der automatischen Erstellung von Scree-Plots;
  • Der Möglichkeit zur Visulalisierung der Trennschärfe von Cluster-Lösungen mittels PCA;
  • Der freien Verfügbarkeit und Performanz von R.
Advertisements

Projekt Pi

schon vor längerer Zeit bin ich beim Schlendern durch die Netzwelt auf folgendes gestoßen: Ted Bull Stratos

stratos

Ein geniales Projekt mit dem Ziel, mit einem Plüschbären – der auf den Namen Babbage hört – den höchsten Fallschirmsprung der Welt hinzulegen. Wer kann zu so etwas nein sagen, weil erstens ein Teddy der Held ist, der auch noch zweitens deutlich sympathischer als der Herr Baumgartner ist 😉 . So weit, so bekannt.
Womit die Sache aber spannend wird: Babbage ist ein echter Rechenkünstler, wird er ja durch einen Raspberry Pi angetrieben. Und spätestens jetzt stellen sich den Meisten zwei Fragen:

  1. Was ist ein Raspberry Pi?
  2. Was haben fallschirmspringende Bären mit Geographie zu tun?

Zunächst zur Frage 1:
Laut Wikipedia ein „kreditkartengroßer Einplatinencomputer [… mit dem Ziel] jungen Menschen den Erwerb von Programmier- und Hardwarekenntnissen zu erleichtern“.

pi

Also ein kleines Bastelprojekt, für das weltweit nach kreativen Einsatzmöglichkeiten gesucht wird. Einen ersten Überblick auf die bisherigen Projekte kann man hier gewinnen:

Hardwareseitig ist das Angebot mittlerweile sehr weitläufig: Von einem 5 MP Kameramodul (Echtfarben & Infrarot) bis GPS reicht hier die Angebotspalette. Ein guter Überblick findet sich hier:

Softwareseitig präsentiert sich das gleiche Bild: Linux-basierte Software in Hülle und Fülle. Auch hier ein kleiner Überblick unter:

Und damit landen wir bei Frage 2:
Was könnte das alles mit Geographie zu tun haben?

Zunächst einmal: Das ist ein gute Frage. So gut, dass ich sie gerne an die Runde weitergeben möchte. Konkret: Ich würde mich freuen, wenn als Antwort auf diesen Blog-Beitrag möglichen Anwendungen eines (oder mehrerer) Raspberry Pis in der Geographie eintrudeln würden. Beiträge können sich thematisch auf eine human- und/oder physiogeographische Anwendung beziehen. Bitte führt dabei auch kurz die Frage aus, welche ihr versucht mit dieser Gerätschaft zu lösen.

Sollte diese Diskussion einige umsetzbare Ideen zu Tage fördern, würde ich zwei Dinge versuchen:

  1. Die entsprechende Hardware am Institut für Geographie anzuschaffen.
  2. im Zuge einer Lehrveranstaltung oder Abschlussarbeit ein konkretes Projekt umzusetzen.

Bis es aber so weit ist, wünsche ich uns allen ein anregendes Ideensammeln. Als kleine Unterstützung dazu noch ein paar Links zum Einstieg ins Thema:

Zotero with Style – Update 3.1

Ein neues Update des Zitierstils „Kamis_DE (3.1)“ (right click to save …):

  • Bei Büchern, Berichten etc. kann jetzt das Feld „Extras“ genutzt werden, um die vollständige Bezeichnung abgekürzter Organisationen unterzubringen.
  • Typ „Thesis“: Änderung in der Reihenfolge – jetzt kommt zuerst die Uni und dann die Stadt.
  • „Hg.“: Wird bei Monographien nun in Klammern und mit großen Anfangsbuchstaben geschrieben.

Das ganze sieht dann so aus:

Single Citations

(Blöschl et al. 2011)

(Böhm 2008)

(Drlik 2010)

(Formayer & Kromp-Kolb 2006)

(Kranzl, Müller & Formayer 2011)

(OcCC 2007)

(Statistik Austria 2011)

Bibliography

Blöschl, G.; Schöner, W.; Kroiß, H.; Blaschke, A. P.; Böhm, R.; Haslinger, K.; Kreuzinger, N.; Merz, R.; Parajka, J.; Salinas, J. L. und Viglione, A. (2011): Anpassungsstrategien an den Klimawandel für Österreichs Wasserwirtschaft – Ziele und Schlussfolgerungen der Studie für Bund und Länder. Österreichische Wasser- und Abfallwirtschaft, 63(1-2): 1–10. http://dx.doi.org/10.1007/s00506-010-0274-2

Böhm, R. (2008): Harte und weiche Fakten zum Klimawandel–ein Überblick. In: BMLFUW und ÖWAV (Hg.): Auswirkungen des Klimawandels auf die österreichische Wasserwirtschaft. Wien, BMLFUW: 53–70.

Drlik, S. (2010): Klimawandelanpassung der Pflege und Erhaltung öffentlicher Grünanlagen in Großstädten unter Berücksichtigung des Konzepts der Nachhaltigen Entwicklung, untersucht am Fallbeispiel Wien. Dissertation. Universität für Bodenkultur, Wien. http://aleph20-prod-acc.obvsg.at/F/F17YDAXMA5KX1G1UYRNF3PFT11E78DR5YDTRGDSUJDQXBV2LTI-10258?func=service&doc_library=ACC01&doc_number=007839014&line_number=0001&func_code=WEB-FULL&service_type=MEDIA [Zugriff: 12. 11. 2011].

Formayer, H. und Kromp-Kolb, H. (2006): Hochwasser und Klimawandel, BOKU-Met Report Nr. 7. Wien, Institut für Meteorologie, Universität für Bodenkultur. https://www.wau.boku.ac.at/fileadmin/_/H81/H814/Downloads/BOKU-Met_Report_07_online.pdf [Zugriff: 04. 02. 2013].

Kranzl, L.; Müller, A. und Formayer, H. (2011): Kühlen und Heizen 2050: Klimawandel und andere Einflussfaktoren. IEWT 2011 – 7. Internationale Energiewirtschaftstagung, TU Wien: o. S.

OcCC – Beratendes Organ für Fragen der Klimaänderung (2007): Klimaänderung und die Schweiz 2050 – Erwartete Auswirkungen auf Umwelt, Gesellschaft und Wirtschaft. Bern, OcCC.

Statistik Austria (2011): Siedlungseinheiten. http://www.statistik.at/web_de/klassifikationen/regionale_gliederungen/siedlungseinheiten/index.html [Zugriff: 06. 02. 2013].

#LitPick ScienceDirect – Global Environmental Change : Discourse and desalination: Potential impacts of proposed climate change adaptation interventions in the Arizona–Sonora border region

ScienceDirect – Global Environmental Change : Discourse and desalination: Potential impacts of proposed climate change adaptation interventions in the Arizona–Sonora border region.

Interessantes Paper zur Konstuktion der Angemessenheit und Vorteilhaftigkeit von Technologien zur Klimaanpassung am Beispiel der Entsalzung von Trinkwasser:

we examine the discourses employed in the construction of the climate problem and proposed solutions. We focus our analysis on a proposed Arizona–Sonora binational desalination project and use insights from risk and hazards literature to analyze how, why, and to what effect desalination is emerging as a preferred climate change adaptation response.

Stoff zu Durban

Zwei interessante Literaturstellen zu Durban. Edenhofer geht vor dem Hintergrund politischer Ökonomie der Frage nach, ob Klimaverhandlungen nicht ein Synonym für rationales Scheitern sein könnten.

Edenhofer, O. et al. (2011): Wer besitzt die Atmosphäre? Zur politischen Ökonomie des Klimawandels. Leviathan 39
(2): 201-221.

Dieser eher düsteren Überlegung stellt er jedoch auch mögliche Auswege aus diesem „Prisoners-Dilemma“ vor: Die Minderung von Klimaschutzkosten, Etablierung von Transfers und Sanktionen sowie die Verbindung des Aufbaus von Reputation an das Einhalten internationaler Vereinbarungen (bsp. die in Kopenhagen vereinbarten Finanztransfers seitens der Industrieländer.

Und damit wir auch wissen, was wir zu tun haben, um das 2-Grad Ziel (doch noch) zu erreichen, kann man zu diesem Artikel greifen:

Detlef P. van Vuuren et al. (2011): RCP2.6: exploring the possibility to keep global mean temperature increase below
2°C. Climatic Change, Vol. 109, No 1-2, 95-116, DOI: 10.1007/s10584-011-0152-3

Die Kernaussage: Rechentechnisch sollten wir in der Lage sein, das 2-Grad-Ziel zu erreichen.

The RCP2.6 scenario is shown to be technically feasible in the IMAGE integrated assessment modeling framework from a medium emission baseline scenario, assuming full participation of all countries. Cumulative emissions of greenhouse gases from 2010 to 2100 need to be reduced by 70% compared to a baseline scenario, requiring substantial changes in energy use and emissions of non-CO2 gases.

Dieser Frohbotschaft versehen van Vuuren et al. jedoch noch mit einem kleinen Zusatz:

The rates of emission reduction that are required go far beyond historically achieved rates. A key question is how such a rate of reduction can be achieved over a long time period in terms of political and societal support and governance structures.

Die Möglichkeit das 2-Grad-Ziel zu erreichen und Beton scheinen somit eines gemeinsam zu haben: Es kommt darauf an, was man daraus macht.

#LitPick ScienceDirect – Global Environmental Change, Volume 21, Supplement 1, Pages S1-S130 (December 2011)

ScienceDirect – Global Environmental Change, Volume 21, Supplement 1, Pages S1-S130 (December 2011).

Interessantes Themenheft zum Zusammenhang zwischen Klimawandel und Migration.

Zwei Research-Highlights aus Mediterranean migration futures: Patterns, drivers and scenarios:

  • Environmental factors play a limited and largely indirect role in migration.
  • Future environmental stress is unlikely to result in massive international migration.

The Creative Workforce

Es gibt sie noch: Die Kreative Klasse!

Regions with high concentrations of creative and cultural industries have Europe’s highest prosperity levels. Evidence suggests that jobs and growth follow these creative people as much as creative people follow jobs and growth, and attractive places.

Näheres dazu im Band 5 der ESPON Territorial Observations.