Analyse der Schmetterlingsverbreitung in den
Transcrição
Analyse der Schmetterlingsverbreitung in den
Geographisches Institut der Universität Zürich Räumliche Algorithmen Analyse der Schmetterlingsvorkommen der USA mit JAVA Gianluca Miele und Jonas Snozzi 2008 Universiität Zürich - Geographiscches Institut Geograpphische Inforrmationssysteeme Winterthhurerstrasse 190 1 CH – 80057 Zürich Rä äum mlichee Alg goritthmeen Analyse der Sch hmetterlin ngsvorkom mmen derr USA miit JAVA Modul: GEO G 452, Rääumliche Algorithmen, Sommerseme S ester 08 n Autoren Leittung Gianlucaa Miele Dorfstrasse 18 CH-87333 Eschenbacch 055 / 511 21 17 gmiele@ @geo.uzh.ch Dr. Ross Purvess (Dozent) Uniiversität Züriich Jonas Snnozzi Winterthhurerstrasse 659 6 CH-8051 Zürich 044 / 311 25 78 jsnozzi@ @geo.uzh.ch Zürich, 12. 1 Juni 20088 Inhalt 1 Einleitung ........................................................................................................................................ 1 1.1 Informationen zu Schmetterlingen .......................................................................................... 1 1.1.1 Ordnung .......................................................................................................................... 1 1.1.2 Wanderverhalten ........................................................................................................... 1 1.1.3 Verbreitung .................................................................................................................... 1 1.2 Informationen zu Counties ...................................................................................................... 2 1.3 Fragestellungen ....................................................................................................................... 2 2 Ausgangsdaten................................................................................................................................. 3 3 Systementwicklung ......................................................................................................................... 5 4 Anforderungsanalyse ....................................................................................................................... 5 5 Entwurf – Lösungsweg .................................................................................................................... 6 5.1 Softwarestrukturierung und Objekt – Klassen......................................................................... 6 5.1.1 Thematic – Package......................................................................................................... 6 5.1.2 Geometry – Package ........................................................................................................ 7 5.1.3 ReadData – Package ........................................................................................................ 8 5.1.4 Statistics – Package ......................................................................................................... 8 5.1.5 Visualization – package ................................................................................................... 8 5.1.6 Schematischer Lösungsweg – Flussdiagramm ................................................................ 9 6 Implementierung ........................................................................................................................... 10 6.1 Einlesen und Prozessierung der Daten .................................................................................. 10 6.1.1 Counties mit Geometrien ............................................................................................... 10 6.1.2 Schmetterlingsarten und –vorkommen .......................................................................... 11 6.1.3 Höhenwerte als Raster ................................................................................................... 11 6.2 Geometrische Berechnungen ................................................................................................. 13 6.2.1 Flächenberechnung für Polygone und Counties ............................................................ 13 6.2.2 Mittlere Höhe für ein County ........................................................................................ 14 6.3 Statistische Berechnungen ..................................................................................................... 15 6.3.1 Beschreibende Statistik ................................................................................................. 15 6.3.2 Multivariate Statistik ..................................................................................................... 17 6.3.3 Regression ..................................................................................................................... 18 6.3.4 Pseudo-Histogramm ...................................................................................................... 21 6.4 Hauptprogramm..................................................................................................................... 21 7 Resultate ........................................................................................................................................ 22 7.1 Zusammenhang zwischen Fläche und Anzahl Schmetterlingstypen ..................................... 22 7.2 Zusammenhang zwischen Höhe und Anzahl Schmetterlingstypen ....................................... 22 7.3 Berechnung des Pseudo-Histogramms .................................................................................. 23 8 Diskussion und Schlussfolgerungen .............................................................................................. 24 8.1 Vergleich der Ergebnisse....................................................................................................... 24 8.2 Problemdiskussion................................................................................................................. 26 8.2.1 Allgemeine Datenlage ................................................................................................... 26 8.2.2 MAUP ........................................................................................................................... 26 8.2.3 Höhenwerte aus MBB ................................................................................................... 27 8.2.4 Unzureichende statistische Prüfung .............................................................................. 27 8.3 Weiterführende Fragen .......................................................................................................... 28 9 Literatur ......................................................................................................................................... 29 I JavaCode Java-Code 1: Zuordnung der Polygone zum entsprechenden County. .................................................. 10 Java-Code 2: Zuordnung der Schmetterlingsarten zu den jeweiligen Counties. ................................... 11 Java-Code 3: Zuordnung der mittleren Höhe zu jedem Polygon. ......................................................... 12 Java-Code 4: Aufruf von calcPolygonArea(). ....................................................................................... 13 Java-Code 5: Indexberechnung zur Höhenwertextraktion. ................................................................... 14 Java-Code 7: Berechnung des arithmetischen Mittels........................................................................... 15 Java-Code 8: Berechnung der Varianz. ................................................................................................. 16 Java-Code 9: Berechnung der Standardabweichung. ............................................................................ 16 Java-Code 10: Berechnung des Korrelationskoeffizienten nach Pearson. ............................................ 17 Java-Code 11: Berechnung einer einfachen Regression........................................................................ 19 Java-Code 12: Berechnung des R2 für die lineare Regression. .............................................................. 20 Tabellen Tabelle 1: RSQ der Regressionen: Grösse der Counties soll Anzahl Schmetterlingstypen erklären, gerundet. ................................................................................................................................................ 22 Tabelle 2 RSQ der Regressionen mittlere Höhe und Anzahl Schmetterlingstypen, auf zwei Dezimalstellen gerundet. ....................................................................................................................... 23 Abbildungen Abbildung 1: Flussdiagramm des Lösungsweges (eigene Darstellung). ................................................. 9 Abbildung 2: Polygon Area - Fläche für ein Trapezoid (Bourke, 1988). .............................................. 13 Abbildung 3: Indexberechnung zur Extraktion der Höhenwerte (eigene Darstellung). ........................ 14 Abbildung 4: Zusammenhang der Spezies und der Fläche (Werner und Buszko 2005). ...................... 24 Abbildung 5 Zusammenhang der species richnes und der elevation (Wilson et al. 2007). ................... 25 Abbildung 6: Histogramm der species-richness und der Höhe (Wilson et al. 2007). ........................... 25 Abbildung 7: Visualisierung MAUP (eigene Darstellung). .................................................................. 26 Abbildung 8 Höhenwerte aus MBB ...................................................................................................... 27 II 1 Einleitung 1.1 Informationen zu Schmetterlingen Im Folgenden sollen grundlegende Eigenschaften von Schmetterlingen zur Erarbeitung einer Fragestellung dargelegt werden. 1.1.1 Ordnung Die Schmetterlinge gehören der Tierklasse der Insekten an und bilden die drittgrösste Insektenordnung der Welt. Geordnet sind die Schmetterlinge nach morphologischen und stammesgeschichtlichen Gesichtspunkten. Sie sind in zahlreiche Unterordnungen und Familien eingeteilt. In derselben Art können örtliche Unterschiede auftreten. So ist nicht immer leicht zwischen individueller Variabilität und eigentlicher Unterart zu unterscheiden. Zudem kommen auch saisonale Morphismen vor. Die Betrachtung und der Vergleich von Unterarten ist somit also nur bedingt sinnvoll, da nicht immer davon ausgegangen werden kann, dass die Unterarten mit den gleichen Kriterien eingeteilt wurden (Schweizerischer Bund für Naturschutz 1987). 1.1.2 Wanderverhalten Schmetterlinge weisen, ähnlich zu den Zugvögeln, ein Wanderverhalten auf. Sie fliegen alleine, oder auch in Gruppen und überqueren dabei Meere und Berge. Mit der Mobilität der Menschen kommt es immer wieder zur „Verschleppung“ von Arten, welche dann in Artfremden Gebieten grossen Schaden anrichten können (Schweizerischer Bund für Naturschutz 1987). 1.1.3 Verbreitung In erster Linie ist es wichtig, das Verbreitungsgebiet oder Areal vom Wanderraum zu unterscheiden. Wie bereits erwähnt legen Schmetterlinge grosse Wege zurück, und sind somit meist in einem relativ grossen Gebiet anzutreffen. Dieses Gebiet ist aber keinesfalls ihr Areal, sondern lediglich ihr Wanderraum (Schweizerischer Bund für Naturschutz, 1987). In unserem Datensatz sind nur Angaben zu Sichtungen vorhanden, was eher dem Wanderraum entsprechen würde. Das Areal ist hingegen das Gebiet, in dem sich eine Schmetterlingsart ohne ständigen Zuzug von aussen, fortzupflanzen vermag (Schweizerischer Bund für Naturschutz, 1987). Regeln zur Verbreitung der Schmetterlinge zu erstellen, erweist sich oft als sehr schwierig, da zum Beispiel die Nichtbesiedlung eines passenden Lebensraumes einer Art oft nicht erklärt werden kann (Douglas, 1986). Die Artenvielfalt ist, proportional zur mittleren Temperatur, in höher gelegenen Gebieten geringer als in niedrigeren (Schweizerischer Bund für Naturschutz, 1987). Das Maximum wird in mittleren Höhen erreicht (Wilson et al. 2007). Der wohl wichtigste limitierende Faktor für die Ausbreitung von Schmetterlingen ist das Klima. Niederschlag, Temperatur und deren saisonale Änderungen prägen das lokale Auftreten von Schmetterlingen. So kann es vorkommen, dass Schmetterlinge von Jahr zu Jahr durch jährliche Schwankungen des Klimas bedingt ein anderes Verbreitungsgebiet besitzen (Douglas, M. M., 1986). 1 1.2 Informationen zu Counties Die Counties sind nach den Bundesstaaten die nächst kleinere Verwaltungseinheit der USA. Es gibt in den USA 3141 Counties. Die Ausdehnung und Bevölkerungsdichte in den Counties variiert stark (NACO, 2008). In unserer Arbeit werden nur die Counties auf dem US-Festland betrachtet, da nur von diesen Daten vorhanden sind. 1.3 Fragestellungen Im Rahmen dieses Projekts sollen Zusammenhänge und statistische Auswertungen im Bezug auf die Verteilung von Schmetterlingsarten in den Vereinigten Staaten von Amerika errechnet, mit vergleichbaren Studien verglichen und überprüft werden. Die administrativen Einheiten der USCounties stellen dabei die Untersuchungsflächen dar. Fokussiert wird auf den Zusammenhang zwischen Anzahl vorkommender Schmetterlingsarten und der Fläche des Untersuchungsgebietes, sowie deren mittlere Höhe. Zusätzlich sollen die Vorkommen in den einzelnen Höhenstufen geprüft werden. Dazu sollen Korrelations- und Regressionsberechnungen durchgeführt werden. In diesem zusammenhang soll geprüft werden, ob sich die zur Verfügung stehenden Daten für die Fragestellung als tauglich erweisen. 2 2 Ausgangsdaten Der zur Verfügung stehende Datensatz besteht aus folgenden Dateien, welche alle Textfiles sind und entweder im klassischen txt- oder im ascii- Format vorliegen. • county_info.txt UID 0 1 2 3 4 5 6 7 8 9 […] CO1990P020 1302 MN 1303 WA 1304 WA 1305 WA 1306 MT 1307 MT 1308 ID 1309 MT 1310 ND 1311 MT STATE COUNTY FIPS STATE_FIPS Lake of the Woods County 27077 53000 53 Whatcom County 53073 53 Whatcom County 53073 53 Valley County 30105 30 Flathead County 30029 30 Boundary County 16021 16 Phillips County 30071 30 Rolette County 38079 38 Lincoln County 30053 30 27 Im File county_info.txt sind Angaben zu den einzelnen Counties gegeben. Darunter sind vor allem die Federal Information Processing Standards (FIPS) (NACO, 2008), sowie die Polygon-ID (UID) von Interesse. Ein County (FIPS) kann mehrere UIDs zugeordnet haben, sprich ein County kann aus mehreren Polygonen bestehen. Weiter finden sich die Namen und die Zugehörigkeit zum jeweiligen Bundesstaat. • butterfly_tybes.txt "OID_";"COLUMN_";"SPECIES";"FAMILY";"SUBFAMILY";"COMMON_NAM";… ;1;"Achalarus [Thessia] jalapus";"Skippers (Family Hesperiidae)";"… ;2;"Achalarus albociliatus";"Skippers (Family Hesperiidae)";"… ;3;"Achalarus casica";"Skippers (Family Hesperiidae)";"… … … Im File butterfly_types.txt sind Angaben zu den einzelnen Schmetterlingstypen gegebenen. So zum Beispiel der Wissenschaftliche Name, die Familie und Subfamilie und auch eine eindeutig identifizierbare ID pro Schmetterlingstyp. • butterfly_locations.txt "FIPS,SPECIE1,SPECIE2,SPECIE3,SPECIE4,SPECIE5,SPECIE6,SPECIE7,… "01001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, … "01003, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, … "01005, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, … […] Im File butterfly_location.txt sind den Counties der Reihe ihrer FIPS nach die jeweiligen Schmetterlingsspezies (specieX) zugeordnet. Der Wert “1” bedeutet, der jeweilige Schmetterlingstyp kommt in der County vor, der Wert “0” bedeutet, der Typ kommt nicht vor. Es ist somit möglich, dass die einzelnen Schmetterlingstypen mit Hilfe dieser Angaben den entsprechenden Counties zuzuordnen. 3 • counties.txt […] 17,-225880.663182245,1029341.70399477 -207670.133401573,1065976.00692853 -207696.044607995,1063307.94780476 -208063.077193841,1053140.95346462 -208485.620115904,1042815.0799735 […] -243845.035111108,1067109.04993346 -219861.425291854,1066199.88599338 -207670.133401573,1065976.00692853 END […] END END […] (Datenbeschreibung) Uid, x centroid, y centroid X1,y1 X2,y2 … END Uid, x centroid, y centroid … END END Im File counties.txt sind die Polygone der Counties gespeichert. Die Referenznummer entspricht der jeweiligen uid im file counties_info.txt. Jedes Polygon besteht weiter aus Angabe zum Zentroid und einer geordneten Liste von Punktkoordinaten. • globe_us_ea.asc ncols 5899 nrows 3410 xllcorner -2934493.5464198 yllcorner -1922182.7052402 cellsize 999.96173328138 NODATA_value -9999 […] 153 203 125 53 36 39 51 6 -9999 -9999 -9999 -9999 -9999 -9999 2 5 5 2 1 10 27 48 60 96 168 291 317 269 236 232 236 247 270 304 415 471 415 268 126 115 144 150 143 156 227 371 507 501 432 382 391 440 346 288 392 383 340 244 243 185 119 93 76 57 42 42 27 23 14 10 6 1 7 -1 -4 -4 -6 -8 -7 -11 -11 -11 13 -13 -14 -14 -14 -12 -10 -10 -10 -9 -8 -5 -2 -2 -1 0 -1 1 3 1 4 5 5 5 5 5 5 9 13 19 22 25 27 27 28 25 29 24 31 33 37 37 47 58 63 59 67 73 76 79 92 92 90 64 87 90 103 123 180 239 261 373 335 323 343 349 345 381 507 546 640 477 407 395 354 323 343 364 354 393 458 467 427 443 545 591 614 647 696 714 678 679 694 756 776 847 836 647 542 610 581 637 980 1051 972 811 757 851 1019 1067 846 881 849 917 969 1065 1099 1125 1172 1228 1236 1209 1166 1084 1116 1112 1315 1525 1693 1842 1882 1930 2004 2063 2149 2378 2515 2499 2536 2572 2597 2691 2828 2758 2784 2732 2734 2772 2605 2624 2625 2443 2225 2491 2853 2903 2540 2410 2649 3054 3201 3106 2914 2797 2799 2984 2943 2682 2270 2261 2269 2541 2860 2867 2616 2357 2264 2261 2314 2340 2438 2595 2543 2469 2561 2505 2464 2307 2188 2283 2420 2591 2682 2842 2639 2504 2227 2099 1975 2162 2255 2346 2367 2306 […] Das fünfte File beinhaltet die Höhenwerte im ESRI ascii-grid Format. Die ersten Zeilen des Files bestimmen die Anzahl der Reihen und Kolonnen, die Koordinaten (x und y) des untersten linken Punktes, die Zellgrösse und eine NODATA_value. Auf die Spezifizierung des Rasterfiles folgt eine grosse Menge an Höhenwerte. 4 Alle für dieses Projekt benutzten Daten stammen vom National Atlas of United States. (http://nationalatlas.gov/, Zugriff: 7.6.2008) und wurden von der Übungsleitung in der oben beschriebenen Form zur Verfügung gestellt (http://www.geo.unizh.ch/gis/teaching/courses/java/, Zugriff: 7.6.2008). 3 Systementwicklung Die Softwareentwicklung, d.h. vom Problem bis hin zur Lösung in Form eines fertigen Programms ist eine komplexe Aufgabe, die – um sie bewältigen zu können – in kleinere Einzelschritte unterteilt werden soll. Die verschiedenen Schritte finden sich bei vielen praktischen Arten von Softwareentwicklung wieder. Zusammen ergeben sie den „Software-Lifecycle“, welcher gemäss Schiedermeier (2005) grundsätzlich aus folgenden Teilen besteht: • • • • • Anforderungsanalyse Entwurf Implementierung Test Betrieb In den nächsten Kapiteln werden insbesondere die ersten drei Teile abgehandelt. Tests beschränken sich auf die Richtigkeit der implementieren Algorithmen für räumliche und statistische Probleme. Die Prüfung des gesamten Systems und dessen Kompatibilität mit seiner Umgebung (Soft- und Hardware), sowie der Betrieb selbst werden im Rahmen dieser Arbeit nicht weiter betrachtet. 4 Anforderungsanalyse Folgende Anforderungen sollen von der Software erfüllt werden: • Für jedes US-County sollen statistische Auswertungen bezüglich der Vielfalt von Schmetterlingsarten möglich sein. • Weiter soll diesbezüglich die Möglichkeit gegeben werden detaillierte Informationen zu den in einem County vorkommenden Schmetterlingsarten abzufragen. • Die Fläche einzelner Counties in Quadratkilometer soll ermittelt werden können. • Zumindest die mittlere Höhe über Meer eines jeden County soll berechnet werden. • Um mögliche Zusammenhänge zwischen Anzahl vorkommender Schmetterlingsarten Fläche und Höhe in einem County zu erkennen, sollen einige statistische Auswertungen wie Korrelations- und Regressionsrechnungen durchgeführt werden. • Da die einzelnen Counties geometrisch aus mehreren Polygonen bestehen können, soll dies auch im Modell und in der Implementierung beachtet werden. • Der Tatsache, dass es sich bei den zur Verfügung gestellten Beobachtungsdaten lediglich um Vorkommensangaben in Form von ja oder nein handelt, soll Rechung getragen werden. • Weiter soll eine einfache Visualisierung der Artenvielfalt und der Höheninformation angestrebt werden. 5 5 Entwurf – Lösungsweg Aus den bisher gemachten Ausführungen lässt sich nun ein abstrahiertes Modell konzipieren, welches als eine vereinfachte Repräsentation der Realität oder eines Teils davon verstanden werden kann. Zwischen den einzelnen Elementen eines Modells und dem was diese repräsentieren, gibt es eine logische Entsprechung (Gall, 2006). In einem objektorientieren Ansatz entsprechen die ModellElementen den Objekten. Objekte, die sich gleich verhalten oder gleich (resp. sehr ähnlich) aussehen, werden in Klassen zusammengefasst. Die Objekte arbeiten zusammen und tauschen Nachrichten aus (Ullenboom, 2007). 5.1 Softwarestrukturierung und Objekt – Klassen Wie aus der Fragestellung und Anforderungsanalyse hervorgeht, können die folgenden KlassenGruppen identifiziert werden: • • • • • Thematic Geometry ReadData Statistics Visualization Diese Klassen-Gruppen repräsentieren zugleich die Packages des Projektes. Um eine bessere Übersicht zu gewährleisten, werden die logisch zusammengehörenden Klassen in den jeweiligen Packages untergebracht. Ein UML – Klassendiagramm kann im Anhang eingesehen werden. 5.1.1 Thematic – Package Dieses package beinhaltet die beiden Klassen Butterfly und County. Während die Klasse Butterfly lediglich zur Speicherung der Schmetterlingsarten dient, bietet die Klasse County weit mehrere Funktionalitäten. Sie beinhaltet neben den Standardattributen wie fips, countyName und state auch mehrere Objekte der Klasse Vector1. Ein Vector speichert alle Polygone, die zu einem County gehören und ein weiterer ist für die Speicherung aller in einem County vorkommenden Schmetterlingsarten zuständig. Weiter verfügt diese Klasse über zwei essentielle Methoden. Die Methode calcCountyArea() summiert alle Flächen der Polygone, die zum jeweiligen County gehören zu einer Gesamtfläche. Die eigentliche Flächenberechnung geschieht in der Klasse Polygon (siehe 5.1.2). Weiter zu erwähnen ist die Methode calcMeanHeightCounty(), welche die gemittelte Höhe aller Polygone eines County ermittelt. 1 Ein Vector ist eine collection, d.h. ein Vector – Objekt erlaubt die Verwaltung mehrere Objekte (Ullenboom 2007). 6 5.1.2 Geometry – Package Alle Klassen, die einen impliziten oder expliziten Raumbezug haben, geometrische Objekte repräsentieren und verschiedene Berechnungen mit geometrischem Bezug implementieren, wurden im Package Geometry abgelegt. Die wichtigsten Klassen sind die vier Klassen Point, Segment und Polygon, welche die drei geometrischen Primitiven des vektoriellen Datenmodells repräsentieren, sowie die Klasse Raster, mit der auch die Abstraktion in ein kontinuierliches Raummodell ermöglicht wird (Burrough, McDonnell, 1998). Als weitere Klassen sind Rectangle und PointGroup zu nennen, welche einerseits als Hilfsklassen und andererseits als mögliche Erweiterungen dienen, um auch Fragestellungen, die in diesem Projekt nicht realisiert wurden mit einem geringen Aufwand zu beantworten. Für Ausführungen dazu sei auf den dokumentierten Quellcode verwiesen. Die Klasse Polygon stellt das geometrische Hauptelement dar. Es besteht aus einer geordneten Liste aus Punkten, die in einem Vector als Instanzvariable gespeichert werden. Die wichtigsten Methoden dieser Klasse sind: • getMBR() • getSegment(int) • pointInPolygon(Point) • hasNegativeValues() • calcPolyArea() Die Klasse Point modelliert hauptsächlich einen zweidimensionalen Punkt, kann aber auch eine dritte Koordinate aufweisen, welche die Höhe repräsentiert. Punkte liegen allen anderen hier verwendeten geometrischen Objekten zugrunde. Die wichtigsten Methoden sind dabei getMin() und getMax(), welche jeweils die minimalen bzw. maximalen Koordinaten zwischen zwei Punkten eruieren, sowie die Methode getDeterminant(), welche die Determinante von drei Punkten berechnet. Mit der Klasse Segment lassen sich mit Hilfe zweier Punkte einzelne Segmente modellieren. Diese Klasse stellt insbesondere im Zusammenhang mit der Methode pointInPolygon(Point) der Klasse Polygon wertvolle Funktionalitäten zur Verfügung. Die wichtigsten Methoden hier sind getOrientation(Point) und intersects(Segment) (O’Rourke, 1998). Als weiteres essentielles Element fungiert die Klasse Raster. Sie ermöglicht die Speicherung eines Rasters mit Hilfe eines zweidimensionalen Arrays. Die anderen Eckdaten des Rasters, welche für die implizite Georeferenzierung notwendig sind, werden in entsprechenden Instanzvariablen gespeichert. Als Hauptmethode sei hier calcMeanHeightInMBB(Polygon) erwähnt. Dadurch lässt sich die mittlere Höhe für das minimale umgebende Rechteck eines Polygons aus den Werten des Rasters ermitteln. 7 5.1.3 ReadData – Package Mit den beiden Klassen IOHelper und ReadRaster werden die thematischen und die geometrischen Daten eingelesen und vorprozessiert. Die Methoden des IOHelper verarbeiten die thematischen und die geometrischen Punktdaten, während die Klasse ReadRaster für den Import des Höhenmodells zuständig ist. Die Kernfunktion bildet dabei die Methode readAllData(). Dort werden der Reihe nach zuerst die thematischen- und die Referenz- Informationen zu den einzelnen counties eingelesen, worauf dann der Import der Polygone, die Berechnung deren Fläche und die Zuordnung zum jeweiligen County erfolgt. Nach dem Einlesen der Schmetterlingsdaten erfolgt analog deren Zuordnung zu den jeweiligen Counties. Zuletzt wird noch das Rasterfile eingelesen und für jedes Polygon wird dabei dessen mittlere Höhe bestimmt und als Instanzvariable gesetzt. Das Resultat des Import- und Vorprozessierungsvorganges ist ein Hashtable counties mit den fips-codes als Schlüssel und den einzelnen County-Objekte als Werte. Jedes County-Objekt trägt nun alle benötigten Informationen, wie Polygone, Schmetterlingsarten, Fläche und Höhe mit sich, was die weitere Auswertung und Analyse der Fragestellung auf eine möglichst unkomplizierte Art ermöglicht. 5.1.4 Statistics – Package Dieses Package enthält in erster Linie die Klasse Statistics, welche verschiedenste Methoden zur Beschreibenden- und Multivariaten-Statistik enthält. Weiter stellt diese Klasse zahlreiche statische Methoden zur Verfügung mit welchen Korrelationen und Regressionen berechnet werden können. Anwendung finden diese nach erfolgter Prozessierung der Daten. Die wichtigsten Methoden dieser Klasse sind: • variance(double[]) • stddeviation(double[]) • mean(double[]) • max(double[]) • min(double[]) • linearCorrelation(double[], double[]) • linReg(double[] , double[] ) • quadReg(double[] , double[] ) • cubReg(double[] , double[] ) • logReg(double[] , double[] ) • logTenReg(double[] , double[] ) • pseudoHist(double[], double[], int, int, int, int, int) 5.1.5 Visualization – package Im Visualisierungs - Package wurde mit der Klasse GISFrameFx eine einfache Visualisierung der Schmetterlingsdichte und des Höhenmodells für das gesamte Untersuchungsgebiet realisiert. Dies basiert auf das von der Kursleitung zur Verfügung gestellte Java-Package rspkwm.gis.teaching1. Das Package beinhaltet eine Klasse und ein Interface mit denen sich ein einfaches Fenster mit einigen Interaktionen instanzieren lässt. Mit der Klasse GISFrame wird das eigentliche Fenster mit seiner 1 http://www.geo.unizh.ch/gis/teaching/courses/java/project/gisteach/docs/ (Zugriff: 2.6.2008) 8 räumlichen Ausdehnung und den zu visualisierenden Daten erzeugt. Durch die Implementierung des Interface GeoDataProvider können Buttons definiert werden mit denen sich die Anzeige steuern lässt. 5.1.6 Schematischer Lösungsweg – Flussdiagramm Aus dem folgenden Flussdiagramm kann der Lösungsweg schematisch verflogt werden. Auf Details wurde verzichtet. Dargestellt werden die Hauptschritte der Prozessierung und Berechnung. Abbildung 1: Flussdiagramm des Lösungsweges (eigene Darstellung). 9 6 Implementierung Das folgende Kapitel zeigt die Implementierung des vorab beschriebenen Lösungsweges auf. Es wird dabei auf das Einlesen, die Prozessierung, die benötigten geometrischen Berechnungen und die statistische Analyse der Daten eingegangen. Die hier aufgeführten Quellcode Ausschnitte sind im wesentlichen unkommentiert. Der vollständig kommentiere Source-Code findet sich in den Originalen. 6.1 Einlesen und Prozessierung der Daten Als Kernelemente des Einlese- und Prozessierungsvorganges können die beiden Java Klassen Hashtable und StringTokenizer betrachtet werden. Da die Daten in Textform vorliegen bedient man sich einerseits des BufferedReader und der Methode readLine(), womit einzelne Zeilen eines Files eingelesen werden können und andererseits des StringTokenizer, der einzelne Strings (Zeichenketten) in deren Bestandteile trennt. Wie bereits erwähnt sind die Daten in verschiedenen Dateien zu finden, was eine Verknüpfung anhand verschiedener Schlüssel bedingt, weshalb an dieser Stelle mit der Klasse Hashtable und deren Funktionalitäten gearbeitet wurde. Das Einlesen und die Prozessierung lässt sich mit der statischen Methode readAllData() der Klasse IOHelper starten. 6.1.1 Counties mit Geometrien Als erstes wird das File counties_info.txt mit Hilfe der Methode readCountiesInfo(String filename) eingelesen. Die daraus erzeugten County-Objekte werden in eine Hashtable counties mit dem fipscode als Schlüssel gespeichert. Für jedes County wird genau ein Objekt erzeugt. Das File enthält jedoch Mehrfacheinträge, da ein County mehrere Polygone besitzen kann. Dies wird mit einer einfachen if – else – Bedingung überprüft. Falls ein County sich bereits in der Hashtable befindet wird lediglich die dazugehörige uid, welche eine Referenz auf ein Polygon darstellt, dem jeweiligen County-Objekt hinzugefügt. Dies ermöglicht in einem zweiten Schritt die Zuordnung der Polygone zum County. Das Einlesen der Geometrien geschieht mit der Methode readCountiesGeometry(String filename). Aus den einzeln eingelesenen Koordinaten werden zuerst Punkte und dann Polygone erzeugt. Jedes Polygon besitzt eine eindeutige uid mit der es sich zum jeweiligen County zuordnen lässt. Gespeichert werden die Polygone ebenfalls in ein Hashtable gespeichert. Eine Iteration durch die beiden Hashtables ermöglich dann die definitive Zuordnung der Polygone. […] Enumeration fipsKeys = counties.keys(); while (fipsKeys.hasMoreElements()){ // Get a fipsKey int fips = (Integer) fipsKeys.nextElement(); // Get the County back County county = (County) counties.get(fips); // Get the uids for each county and add corresponding polygons for(int i=0;i<county.getUids().size();i++){ int uid = (Integer) county.getUids().get(i); Polygon polygon = (Polygon) geometries.get(uid); county.addPolygons(polygon); } county.setArea(county.calcCountyArea()); } […] Java-Code 1: Zuordnung der Polygone zum entsprechenden County. Genauere Ausführungen zur Flächenberechnung am Schluss folgen weiter unten. 10 6.1.2 Schmetterlingsarten und –vorkommen Grundsätzlich konnte das Einlesen der Schmetterlingsarten analog zum Einlesen der Counties durchgeführt werden. Zusätzlich musste darauf geachtet werden, dass einzelne Bezeichnungen in Gänsefüsschen gespeichert sind. Dies konnte mit der String Methode substring gelöst werden. Für jede Schmetterlingsart wurde ein Objekt der Klasse Butterfly erzeugt. Wiederum ermöglicht eine eindeutige ID die genaue Identifizierung eine Objektes. Gespeichert werden die Butterfly-Objekte ebenfalls in einer Hashtable. Danach gilt es jedem County die dort vorkommenden Schmetterlingsarten zuzuordnen. Das Zuordnungsproblem wird mit einer verschachtelten Schleife gelöst. Für jedes County werden alle Werte überprüft, ob diese nicht 0 sind. Sobald die Bedingung erfüllt ist, wird das jeweilige ButterflyObjekt in der Hashtable gesucht und dem Vector Butterflies des County zugeordnet. […] while ((s = br.readLine()) != null { s = s.substring(1, s.length()-1); StringTokenizer st = new StringTokenizer(s, ", "); int fips = Integer.parseInt(st.nextToken()); County aCounty = (County) counties.get(fips); int i = 1; //index of butterfly species while(st.hasMoreTokens()){ String atoken = st.nextToken(); int tokenValue = Integer.parseInt(atoken); Butterfly cButterfly = null; if(tokenValue != 0){ for(int j=0;j < butterflies.size();j++){ Butterfly aBf = butterflies.get(j); if(aBf.getId() == i){ cButterfly = butterflies.get(j); if(aCounty != null){ aCounty.getButterflies().add(cButterfly); } } } } i++; } […] Java-Code 2: Zuordnung der Schmetterlingsarten zu den jeweiligen Counties. 6.1.3 Höhenwerte als Raster Auch die Verarbeitung des Höhenmodells, welches im ESRI ascii-grid Format vorliegt geschieht grundsätzlich analog zu den vorherigen Daten. Hier werden jedoch nicht mehrere Objekt erzeugt, sondern die Höheninformationen werden in einem Raster-Objekt gespeichert und auch als solches retourniert. Zuständig für diesen Prozess ist die Methode readRasterFile(String filename) in der Klasse ReaderRaster. Die eigentlichen Höhenwerte werden in einem zweidimensionalen Array 1 , bestehend aus Floating – Werten gespeichert. Die zusätzlich benötigten Daten zur Definition eines Rasters werden in den entsprechenden Instanzvariablen gespeichert. 1 Die Höhenwerte im 2D-Array werden wie folgt gespeichert: raster [rows][columns] 11 Nachdem das Raster-Objekt erzeugt ist, wird für jedes Polygon die mittlere Höhe berechnet und in eine Instanzvariable meanHeight eines Polygon-Objektes gespeichert. Die Iteration übernehmen wiederum zwei verschachtelte Schleifen. Die eigentliche Extraktion und die Mittelwertberechnung der Höhenwerte geschieht mit der Methode getMeanHeightInMBB(Rectangle), welche sich in der Klasse Raster befindet und für ein gegebenes Rechteck alle Höhenwerte aus dem Raster ausliesst und deren Mittelwert berechnet. Details zur Methode finden sich weiter unten. […] Enumeration fipsKeys2 = counties.keys(); while(fipsKeys2.hasMoreElements()){ int fips = (Integer) fipsKeys2.nextElement(); County c = (County) counties.get(fips); for(int i=0;i<c.getPolygons().size();i++){ Polygon poly = (Polygon) c.getPolygons().get(i); //set the mean height to polygon poly.setMeanHeightPoly(usdtm.getMeanHeightInMBB(poly.getMBR())); } //calc and set the meanHeight for the counties c.setMeanHeight(c.calcMeanHeightCounty()); } […] Java-Code 3: Zuordnung der mittleren Höhe zu jedem Polygon. Da für jedes Polygon das minimale umgebende Rechteck berechnet wird und anhand dessen Ausdehnung die Werte aus dem Höhenmodell extrahiert werden, ergibt sich bei der Berechnung des mittleren Höhenwertes ein Fehler, der jedoch als akzeptabel betrachtet wird. Die Ursprüngliche Idee bestand darin, die Höheninformation nicht als Raster sondern als Punkte zu importieren. Für jeden Punkt würde dann überprüft in welchem Polygon sich dieser befindet und dann dem entsprechenden Polygon zugeordnet. Es musste jedoch festgestellt werden, dass dieses Vorgehen aus Sicht der Rechengeschwindigkeit und des Speichers nicht umgesetzt werden kann. In der Klasse Raster findet man einen Prototypen der Methode readRasterFileToPoints(String filename). Deshalb verfügt auch die Klasse Polygon über eine Methode PointInPolygon(Point) mit der das Vorhaben hätte umgesetzt werden sollen. 12 6.2 Geeometriscche Berecchnungen n In dieseem Kapitel sollen Erläuuterungen zuur Implemen ntierung einniger geomettrischer Alg gorithmen gegeben werden. Im kommentierrten Quellcodde finden sicch jeweils weeitere Detailss. 6.2.1 Flächenbe F erechnung g für Polyygone und d Countiess Zentrale Methode ist i calcPolyggonArea(), die d für ein gegebenes Polygon deessen Flächee in km2 berechneet. Der Algorrithmus basiert auf eine Aufsummier A rung aller trappezförmigenn Teilflächen n, die sich aus den Segmenten des d Polygonss und der x-A Achse ergebeen. Der Algoorithmus funnktioniert fürr konvexe und nichht-konvexe Polygone. Bedingung B i dass daas Polygon aus einer ggeordneten Liste ist, L aus Punktkoordinaten beesteht, seine Kanten sich nicht selbst schneiden und u geschlosssen ist, also der erste und der letzte l Koorddinatenpunkt identisch sinnd (O’Rourk ke, 1998). Da das Verfahren V auusschliesslichh mit positivven Inputwertten korrekt arbeitet, a wurrde eine Hilfs fsfunktion geschriebben, die diesse Bedingungg für jeden Koordinatenp K punkt überprüüft. Die Form mel zur Bereechnung lauteet: Abbildung 2: Polygon Area - Fläche für eiin Trapezoid (Bourke, 1988). Mit der Methode caalcCountyArrea() wird die d Flächenb berechnung für jedes Poolygon einess County aufgeruffen und das Resultat R aufsummiert. public doub ble calcCoun ntyArea(){ doub ble CountyAr rea = 0.0; for( (int i=0; i< <this.polygo ons.size();i++){ Polygon n p = (Polyg gon) this.po olygons.get(i i); double polyArea = p.calcPolyg gonArea(); CountyA Area += poly yArea; } ret turn CountyAr Area; } J Java-Code 4: Aufruf A von callcPolygonAreaa() für jedes Po olygon eines Coounties und Au ufsummierung g. 13 6.2.2 Mittlere H M Höhe für eein Countyy Zur Berrechnung deer mittleren Höhe für ein Countyy werden haauptsächlich die drei Methoden M getMBR((), getMeanH HeightInMB BB(Rectanglee) und calcM MeanHeightC County() beenötigt. Zuerrst liefert getMBR(() das minim male umgebeende Rechtecck (MBR) fü ür ein Polyggon, welchess dann an diee nächste Methodee getMeanH HeightMBB(R Rectangle) übbergeben wiird. Dort weerden gemässs den Ausdeehnungen des MBR R die Indexees für den Duurchlauf und die Extraktio on der Höhennwerte aus ddem Raster gebildet. Folgend werden die Kernelement K te der Methoode sowie ein ne Illustration (Abbildungg 3) aufgefüh hrt: […] //com mpute indexes s to get out t the values s from this raster int widthInd w = (i int) Math.ab bs(Math.roun nd((mbb.getM MaxP().getX() - mbb.getM MinP().getX( ())/ this.cellSize)); int heightInd h = (int) ( Math.a abs(Math.rou und((mbb.get tMaxP().getY Y() - mbb.get tMinP().getY Y())/ this.cellSize)); //com mpute the sta art indices from where start readi ing for this mbb int yInd y = (int) Math.abs(Ma ath.round((m mbb.getMaxP( ().getY() - yul) / this. .cellSize)); ; int xInd x = (int) Math.abs(Ma ath.round((m mbb.getMinP( ().getX() - this.xll) / this.cellSi ize)); […] Java-Coode 5: Indexbeerechnung zur Höhenwertexttraktion. Abbildung 3: Indexbeerechnung zurr Extraktion deer Höhenwertee (eigene Darsttellung). Das Reesultat – allso die miittlere Höhee für ein Polygon – wird inneerhalb der Methode calcMeaanHeightCouunty() der Coounty – Klassse mit der Flääche des gesamten County normalisieert, damit die Höhhenwerte einnes sehr grrossen Polyggons innerh halb eines Counties C auuch entsprecchend im Endresulltat vertretenn sind. 14 6.3 Statistische Berechnungen Für die Analyse von nicht-räumlichen, als auch von räumlichen Daten braucht es, zur Beschreibung einer einzelnen Verteilung, die beschreibende Statistik, wie auch multivariate statistische Grössen und Tests, um mehrere Verteilungen untereinander zu vergleichen. 6.3.1 Beschreibende Statistik Zu den beschreibenden statistischen Grössen gehören das Arithmetische Mittel, die Varianz, die Standardabweichung sowie die minimalen und maximalen Werte eines Arrays. 6.3.1.1 Arithmetische Mittel Das arithmetische Mittel (mean) ist in folgender Formel definiert (Lauter, 1993): 1 Der mean kann somit relative einfach berechnet werden. Dazu müssen nur alle Werte in einem Array summiert warden, und spatter durch die Anzahl Elemente (length des Arrays) dividiert werden. public static double mean(double[] v){ double mean = 0; for (int i=0; i < v.length; i++){ mean = mean + v[i]; } mean = mean / v.length; return mean; } Java-Code 6: Berechnung des arithmetischen Mittels Auf ähnliche Weise können Minimum und Maximum berechnet werden. 6.3.1.2 Varianz Die Varianz ist durch folgende Formel gegeben (Storrer, 1995): 1 1 Die Varianz gilt als Kennmass für die Verteilung der Werte einer Menge. Die Abweichungen werden quadriert, da die Summe der Abstände in einer normalverteilten Grundgesamtheit ohne Quadrierung null ergeben würden (Storrer, 1995). 15 public static double variance(double[] v) { double var; int degrees = (v.length – 1); int m = v.length; double c = 0; double s = mean(v); for (int k = 0; k < m; k++) c += (v[k] - s) * (v[k] - s); var = c / degrees; return var; } Java-Code 7: Berechnung der Varianz. 6.3.1.3 Standardabweichung Da die Varianz quadriert wurde, hat sie nicht mehr dieselbe Dimension wie die Daten. Daher wird oft die Wurzel aus der Varianz gezogen, um wieder dieselbe Dimension zu erhalten. Die dazugehörige Formel sieht wie folgt aus (Storrer, 1995): 1 1 Da in Java die Möglichkeit besteht innerhalb einer Funktion eine andere Funktion derselben Klasse aufzurufen, ist die Standardabweichung einfach berechnet. public static double stddeviation(double[] v ) { return Math.sqrt(variance(v)); } Java-Code 8: Berechnung der Standardabweichung. 16 6.3.2 Multivariate Statistik 6.3.2.1 Korrelation Die Korrelation beschreibt den Grad des Zusammenhangs zwischen zwei Variablen. Eine dieser Korrelationskoeffizienten ist der Korrelationskoeffizient nach Pearson. Dieser setzt voraus, dass die Daten intervallskaliert und normalverteilt sind. Die Formel zur Berechnung der Produkt-MomentKorrelation nach Pearson lautet: (Bühl, 2006) ∑ 1 Wobei sx und sy die Standardabweichungen, und und Der darausfolgende Java-Code sieht wie folgt aus: die Mittelwerte de jeweiligen Variablen sind. public static double correlation(double[] a, double []b){ double r = 0; if (a.length != b.length){ System.out.println("The arrays don't have the same dimension"); r = -9999; } else { double meana = BasicStatistics.mean(a); double meanb = BasicStatistics.mean(b); int n = a.length; double c = 0; for (int k = 0; k < n; k++) c += (a[k] - meana) * (b[k] - meanb); double stda = BasicStatistics.stddeviation(a); double stdb = BasicStatistics.stddeviation(b); r = c / ((n-1)*stda*stdb); } return r; } Java-Code 9: Berechnung des Korrelationskoeffizienten nach Pearson. Als erstes wird geprüft, ob die beiden Arrays dieselbe Dimension haben. Haben die Arrays dieselbe Dimension, wird als erstes der Mittelwert, sowie die Dimension des Arrays berechnet. Über eine ähnliche Funktion wie bei der Varianzberechnung, werden nun Zähler und Nenner berechnet. 17 6.3.3 Regression In unserer Fragestellung soll ein Zusammenhang der Form gefunden werden. Für die Anpassung eines Polynom m-ten Grades durch n Messpunkte ergibt sich ein lineares Gleichungssystem, das wie folgt aufgeschlüsselt werden kann, wobei: 1 , , 1 . Wobei x und y aus den Arrays entnommen werden und v der zu berechnende Koeffizientenvektor, welcher die Gleichung löst, darstellt. Die Gleichung kann nun um MT erweitert werden: Nun ist . Wobei der Koeffizienzvektor des annähernden Polynoms ist. 18 6.3.3.1 Lineare Regression Unter Zuhilfenahme des Java Matrix - Package (JAMA1) können nun zwei Arrays relative einfach über eine Lineare Funktion beschrieben werden. public static void linearRegression(double[] a, double[] b, Holder slope, Holder offset){ if (a.length != b.length) { System.out.println("The arrays don't have the same dimension"); slope.value = -9999; offset.value = -9999; } else { Matrix Matrix Matrix Matrix mata at = matb bt = = new Matrix(a, 1); mata.transpose(); = new Matrix(b, 1); matb.transpose(); int l = a.length; Matrix A = new Matrix(l, 2, 1); A.setMatrix(0,(l-1),1,1,at); Matrix solved = A.solve(bt); slope.value = solved.get(1, 0); offset.value = solved.get(0, 0); } } Java-Code 10: Berechnung einer einfachen Regression. Als erstes wird geprüft, ob die beiden Arrays die gleiche Dimension aufweisen. Falls dies nicht der Fall ist, wird eine Fehlermeldung ausgegeben. Im Regelfall wird danach analog zur Gleichung oben die Vektoren y (bt) und ein analoger Vektor x (at) zu y berechnet. Danach wird eine neue l-2-Matrix mit der Länge des Vektors a und dem SkalarWert 1 erzeugt. In der zweiten Spalte wird nun der Vektor eingefügt, um für M auf die Form der obenstehenden Gleichung zu kommen. JAMA liefert dann die Funktion “solve” um das lineare Gleichungssystem mit der Methode der kleinsten Quadrate zu lösen. 1 http://math.nist.gov/javanumerics/jama/ (Zugriff 21. 5. 2008). 19 6.3.3.2 Andere Regressionen Aus der Matrix-Algebra können weitere Möglichkeiten der Regression abgeleitet werden. So ist es relativ einfach möglich Regressionen zweiten und dritten Grades zu erzeugen. Logarithmische Regressionen sind ebenfalls möglich. 6.3.3.3 Bestimmtheitsmass R2 Das Bestimmtheitsmass R2 ist nach Backhaus et al. (2006) wie folgt definiert, ä ∑ ∑ und kann auf jede Art der Regression angewendet werden. In Java ist der R2 relativ einfach zu realisieren. Dazu muss nur folgender Code am Ende der Regression eingefügt werden. double explained = 0; double total = 0; double mean = mean(b); for (int i=0; i < b.length; i++){ double p = (a[i])*s+o-mean; // Definition für Lineare Reg. p = p*p; explained = explained + p; } for (int j=0; j < b.length; j++){ double u =0; u += (b[j] - mean) * (b[j] - mean); total = total + u; } double rsq = explained/total; Java-Code 11: Berechnung des R2 für die lineare Regression. Wobei o der offset und s die Steigung der Geraden ist. Zur Berechnung des R2 für Regressionen höheren Grades muss lediglich die Definition von p angepasst werden. Der Rest der Berechnung bleibt gleich. Zusätzlich zum R2 werden die Residuen noch in einem weiteren Verfahren in ein Array gespeichert und mittels return zurückgegeben. 20 6.3.4 PseudoHistogramm Mit der Funktion pseudoHist(double[] x, double[] y, int a, int b, int c, int d, int e) {..} ist es möglich für x mit den Klassengrenzen a bis e die Anzahl, den Mittelwert und die Standardabweichung der zu x gehörenden y-Werte zu berechnen. Die Werte werden erst in einen Vector, danach in ein double[] eingelesen und über die Funktionen der beschreibenden Statistik ausgewertet. Die Resultate werden auf der Konsole ausgegeben. 6.4 Hauptprogramm Alle Prozesse vom Einlesen bis zur Berechnung der statistischen Grössen werden mit dem Aufruf des Hauptprogramms RunButterflyFX gestartet. Dem Benutzer werden nur wenige Interaktions- und Steuerungsmöglichkeiten gegeben. Nach der Prozessierung kann gewählt werden, ob alle oder nur einige Berechnungen durchgeführt werden sollen. Weiter besteht zum Schluss die Möglichkeit eine Visualisierung zu starten oder das Programm wieder zu verlassen. 21 7 Resultate In unserer Fragestellung wurde festgehalten, dass der Zusammenhang zwischen der Anzahl Schmetterlingsarten und der Höhe erarbeitet werden soll. Dazu muss aber erst abgeklärt werden, ob ein Zusammenhang zwischen der Fläche der Counties und der Anzahl Schmetterlingstypen besteht. Dazu berechnen wir eine Korrelation. 7.1 Zusammenhang zwischen Fläche und Anzahl Schmetterlingstypen Die Durchführung der Korrelation ergibt folgendes Ergebnis: Correlation: 0.34659294912120087 Als Ergebnis erhalten wir einen Korrelations-Koeffzienten von rund 0.35. Dieses Ergebnis ist nach Stahel (2002) nicht ganz einfach zu interpretieren. Es scheint ein geringer Zusammenhang zu bestehen. Dieser Zusammenhang wird nun ohne Prüfung zur weiteren Verarbeitung als statistisch evident, wenn auch klein betrachtet, um in einem zweiten Schritt Regressionen durchzuführen. RSQ: RSQcorrected: Linear 0.22 0.22 Quadratisch 0.28 0.28 Kubisch 0.28 0.28 Logarithmisch Log10 0.17 0.23 0.17 0.23 Tabelle 1: RSQ der Regressionen: Grösse der Counties soll Anzahl Schmetterlingstypen erklären, gerundet. Betrachtet man nun die Bestimmtheitsmasse der Regressionen wird klar, dass es wohl keinen Zusammenhang zwischen der Grösse der Counties und der Anzahl Schmetterlingstypen gibt. Die Schmetterlingstypenzählung muss also nicht normiert werden. 7.2 Zusammenhang zwischen Höhe und Anzahl Schmetterlingstypen Da der oben beschriebene Zusammenhang zwischen der Grösse der Counties und der Anzahl Schmetterlingstypen nicht besteht, wird die Korrelation und Regression ohne weitere Korrektur der Anzahl Schmetterlingstypen durchgeführt werden. Correlation: 0.5507680922618453 Die Korrelation ist im mittleren Bereich. Es scheint also ein Zusammenhang zwischen der Höhe und der Anzahl der Schmetterlingstypen zu geben. Zur weiteren Analyse werden ebenfalls die Regressionen betrachtet. 22 RSQ: RSQcorrected: Linear 0.10 0.10 Quadratisch 0.27 0.27 Kubisch 0.25 0.25 Logarithmisch Log10 0.05 0.11 0.05 0.11 Tabelle 2 RSQ der Regressionen mittlere Höhe und Anzahl Schmetterlingstypen, auf zwei Dezimalstellen gerundet. Die Regressionen ergeben keine guten Ergebnisse. Das beste Ergebnis erzielt eine quadratische Regression. Aber auch diese vermag nicht mehr als 27% der Varianz zu erklären. Somit kann nicht davon ausgegangen werden, dass in unserem Datensatz ein Zusammehang zwischen der mittleren Höhe und der Anzahl Schmetterlingstypen besteht und es werden keine Regressionsgleichungen aufgestellt. 7.3 Berechnung des PseudoHistogramms Für die Höhenwerte und die Anzahl Schmetterlingstypen wurde ein pseudo- Histogramm mit den selben Höhenklassen aus Wilson et al. (2007) berechnet. Diese sind: 1: < 800 m 2: 800 – 1000 m 3: 1000 – 1200 m 4: 1200 – 1400 m 5: 1400 – 1600m 6: > 1600m Als Resultat erhalten wir folgende Werte: < 800 800 - 1000 1000 - 1200 1200 - 1400 1400 - 1600 > 1600 | | | | | | Count: Count: Count: Count: Count: Count: 2753 108 51 92 105 12 Mean: Mean: Mean: Mean: Mean: Mean: 35.3770432255721 91.0 113.84313725490196 102.1086956521739 117.32380952380953 119.5 Stddev.: Stddev.: Stddev.: Stddev.: Stddev.: Stddev.: 30.51778592360076 36.409406199677086 37.89848152579182 43.789068966094064 24.157533957058753 19.313207915827967 Man erkennt, dass die meisten mittleren Höhen der Counties unter 800 m.ü.M. sind. In der Höhe über 1600m.ü.M. gibt es lediglich 12 Counties, was nicht reicht um als repräsentativ erachtet zu werden. Daher wird diese Höhenstufe nicht weiter betrachtet. Unter Ausschluss der höchsten Höhenstufe, ist die Höhenstufe mit der maximalen Anzahl Schmetterlingstypen, diejenige von 1400-1600m.ü.M. Was nicht erstaunt sind die relativ beachtlichen Standardabweichungen. Relativ zur mittleren Anzahl Schmetterlinge, muss man festhalten, dass die erste Klasse ( < 800 m.ü.M.) nicht zu gebrauchen ist, da die Standardabweichung in der Grössenordnung des eigentlichen Werts liegt. Auch die anderen Werte sind mit grosser Vorsicht zu betrachten, da die Standardabweichung jeweils rund 30% beträgt. 23 8 Diiskussion und Scchlussfo olgerung gen Im Folgenden sollenn die Resultaate mit den in i der Fachlliteratur vorlliegenden Errgebnissen verglichen werden und u Problem me besprochenn werden. 8.1 Veergleich d der Ergeb bnisse In Camppbell und Reece (2003) und u Werner und u Buszko (2005) wirdd darauf hinggewiesen, dasss bereits Darwin den Zusamm menhang derr Grösse dess betrachteten n Gebietes und u der Bioddiversität bestehe. Es sollten inn grossen Geebieten also mehr m Schmetterlingstypeen vorkommeen, als in kleeinen. Abbildu ung 4: Zusamm menhang der Spezies S und der Fläche (Werner und Buszk ko 2005). Der Zussammenhangg bei nordam merikanischeen Vögeln, welche ein ähnliches W Wanderverhaalten wie Schmetteerlinge aufw weisen, sei zuudem linear. In der von uns u berechneten Regressiion, erzielt die lineare Regressiion aber nurr einen RSQ von 0.10, und u somit beesteht dieser Zusammenhhang nicht (C Campbell und Reece 2003). 24 In Wilsoon et al. (2007) wird einn klarer Zusaammenhang zwischen sppecies richnes und eleva ation und wegen des d Klimawanndels, deren Verschiebunng in höhere Gebiete, posstuliert. Abb bildung 5 Zusaammenhang der species rich hnes und der ellevation (Wilsoon et al. 2007, G Grafik angepa asst). Auch dieeser Zusamm menhang konnnte aus unseeren Daten nicht n erkannt werden. Diee beste Regression ist zwar aucch quadratiscch, aber der sehr niedrigge RSQ von 0.27 0 lässt keeine statistiscch gefestigte Aussage zu. Die Form F der resultierenden Funktion F wuurde daher gaar nicht erst verglichen. v Betrachtten wir nun noch n das Histtogramm nacch Wilson ett al. (2007): A Abbildung 6: Histogramm H deer species-rich hness und der Höhe H (Wilson et e al. 2007, Graafik angepasstt). Unsere Werte W weichhen nicht exxtrem von denen d von Wilson W et al. (2007) ab.. Jedoch sin nd die zu erwartennden Fehlerbbalken wohl um u einiges Grösser. G Die Höhenstufe zwischen 14400 und 160 00 müsste in unsereem Fall jedoch die maxim male Anzahl Schmetterlin ngstypen auffweisen. Dies ist der woh hl gravierenndste Untersschied. Rein qualitativ gibbt es hier ein nige Übereinstimmungenn. 25 8.2 Prroblemdisskussion Die unteerschiedlicheen Ergebnissee zu Referenzstudien ist durch d verschhiedene Faktooren zu erkläären. 8.2.1 Allgemein A ne Datenla age Allgemeein ist sehr wenig w über die d Ausganggsdaten bekan nnt. Pro Couunty ist ledigglich bekann nt, ob ein Schmetteerlingstyp „vvorkommt“ oder nicht. Ob es sich dabei um das d Wanderggebiet oder das d Areal handelt ist i unklar. Die Vermutunng liegt allerddings nahe, dass d es sich um u das Wanddergebiet han ndelt und somit Veergleiche mitt den obengeenannten Stuudien bezügliich des Areall nicht mögliich wären. 8.2.2 MAUP M Das Moddifiable Areaal Unit Probblem (MAUP P) (siehe daazu Openshaaw 1984) ist der erste Faktor der wohl einnen Fehler veerursacht. Abbildu ung 7: Visualissierung MAUP P (eigene Darsttellung). Betrachtten wir die obenstehende o e Abbildungg. Es sind zw wei fiktive Counties C A uund B dargesstellt. Die punktierrten Linien sollen s dabei zwei mögliche Grenzeen der Counnties darstelllen. In Grün n ist eine Schmetteerlingspopullation dargesstellt. In Graau sind zudeem verschieddene Höhensstufen dargeestellt. Es kommt nun ganz essentiell darrauf an, wiee die Aussen ngrenze derr Counties ggewählt wird d. In der Möglichhkeit, bei derr die Schmettterlingspopuulation zum County C A geehört, ist der Mittelwert der d Höhe zur Popuulation „helller“ als wenn sie zu B gehört. g Dies führt unweigerlich zu F Fehlern der mittleren Höhe. 26 8.2.3 Höhenwe H rte aus M MBB Abbild dung 8 Höhenw werte aus MBB B (eigene Darsttellung). In unserrem Projekt war w eine Meethode für Point-In-Poly P ygon vorgeseehen. Allerdiings übersch hritt diese bei der Berechnungg der Höhennpunkte einnes Polygons die zur Verfügung V sstehenden HardwareH Kapazitääten. Daher wurde auf einen e vereinnfachten Alg gorithmus miit einer Minnimum Bound ding Box (MBB) zurückgegriff z fen. In der obenstehende o en Abbildungg soll das Prroblem der Berechnung B der Höhenw werte aus ein ner MBB schematiisch darstelleen. Die dickee schwarze Linie L soll dab bei den Umrriss eines Coounties darsteellen, das rote Rechteck die MB BB und die Schattierung S im Hintergrrund eine möögliche Höheenverteilung. Es ist eiinfach nachzzuvollziehen, dass dies zu z Fehlern bei b der mittlleren Höhe eeines Countties führt. Dieser muss m aber reelativiert weerden. Die Counties C hab ben oft einee eher homoogene Verteiilung der höhenweerte. Zudem sind sie meeist relativ kllein und som mit ist, wegeen einer maxximalen Steig gung, der Fehler wiederum w veerhältnismässsig klein. Bei B weniger kompakten Formen deer Counties liegt die Vermutuung nahe, dasss der Fehlerr grösser wird. Dies wurd de aber nichtt überprüft. Die Ausw wirkungen auf a die Berecchnungen derr Höhenstufeen sollten weeniger gross aausfallen. 8.2.4 Unzureich hende statistische P Prüfung In unseerer Studie wurden Tests T ohne Prüfung der d Modellbbedingungen durchgeführt. Der Korrelattionskoeffizieent nach Peaarson setzt unter u anderem m voraus, daass die Datenn normalvertteilt sind. Ein zureeichender Test T auf Norrmalverteilunng, wie derr nonparameetrische Testt nach Kolm mogorovSmirnovv ist nach Sttahel (2002) „komplizierrt“ zu berech hnen. Daherr wurde auf die Program mmierung eines sollchen Test veerzichtet. Die Reggressionen konnten k bereeits anhand des d niedrigeen RSQ als unzureichennd betrachtett werden. Wäre eiin Modell anhand a des RSQ als guut erachtet worden, w wärren weitere Tests der Residuen R Vorausseetzung. Unseere Methodeen geben als return einen n double[] mit m Residuen zurück. Es wäre w also durchauss möglich, geewisse Modeellvoraussetzzungen nach Backhaus ett al. (2006) w weiter zu prüfen. 27 8.3 Weiterführende Fragen • • • • • Mittels einer Ranggrössen-Korrelation würde das Problem der Normalverteilung umgangen. Diese Korrelation ist aber wesentlich schwieriger zu berechnen. Regression mittels Modus oder Median würden evt. sinnvollere Resultate liefern. Informationen in Hashtables könnten weiter verwendet werden. Die Daten wurden strukturiert eingelesen und stehen für weitere Abfragen und Analysen bereit. Ausgehend vom Centroid könnten Berechnungen wie Kernel Density Estimation berechnet werden. Mögliche Berechnungen der Korrelation etc. könnten auch auf höherer Aggregationsstufe durchgeführt werden. 28 9 Literatur Anton, H. (2004): Lineare Algebra. 3. Auflage, Spektrum Akademischer Verlag, Berlin. Backhaus, K. et al. (2006): Multivariate Analysemethoden: Eine anwendungsorientierte Einführung. 11. Auflage, Springer, Berlin. Bourke, P. (1988): Calculating the area and centroid of a polygon. http://local.wasp.uwa.edu.au/~pbourke/geometry/polyarea/ (Zugriff: 9.6.2008). Burrough, P. A., McDonnell, R. A. (1998): Principles of Geographical Information Systems. Oxford University Press, Oxford. Bühl, A. (2006): SPSS 14: Einführung in die modern Datenanalyse. 10. Auflage, Pearson Studium, München. Campbell, N. A. und Reece, J. B. (2003): Biologie. 6. Auflage, Spektrum Akademischer Verlag GmbH Heidelberg, Berlin. Douglas, M. M. (1986): The Lives of Butterflies. University of Michigan Press, Michigan. Gall, H. (2006): Einführung in das Programmieren. Informatik I, Vorlesungsunterlagen WS2006/07, Institut für Informatik, Universität Zürich, Zürich. Lauter, J. et al. (1993): Mathematik Sekundarstufe II: Wahrscheinlichkeitsrechnung und Statistik. 6. Auflage, Cornelsen Verlag, Berlin. National Assosiation of Counties (NACO) (2008): The Voice of America’s Counties. http://www.naco.org/ (Zugriff 11.6.2008). O’Rourke, J. (1998): Computational Geometry in C. Second Edition, Cambridge University Press, New York. Openshaw, S. (1984): The Modifiable Areal Unit Problem. Geo Books, Norwich. Schiedermeier, R. (2005): Programmieren mit Java: Eine methodische Einführung. Pearson Studium, München. Schweizerischer Bund für Naturschutz (1987): Tagfalter und ihre Lebensräume. Band 1, Fotorotar, Egg. Stahel, W. A. (2002): Statistische Datenanalyse. 4. Auflage, Vieweg & Sohn Verlagsgesellschaft mBH, Braunschweig/ Wiesbaden. Storrer, H. H. (1995): Einführung in die mathematische Behandlung der Naturwissenschaften II. 2. Auflage, Birkhäuser Verlag, Basel. 29 Ullenboom, C. (2007): Java ist auch eine Insel. 7.Auflage, Galileo Press, Bonn. Werner, U. und Buszko, J. (2005): Detecting biodiversity hotspots using species–area and endemics– area relationships: the case of butterflies. Biodiversity and Conservation, 2005:14, 1977–1988. Wilson, R. J. et al. (2007): An elevational shift in butterfly species richness and composition accompanying recent climate change. Global Change Biology, 2007:13, 1873–1887. 30 Anhang • UML - Diagramm 31 Geo452: Räumliche Algorithmen in JAVA statistics statistics::Statistics +variance(double[]): double() +stddeviation(double[]): double() +mean(double[]): double() +min(double[]): double() +max(double[]): double() +correlation(double[], double[]): double() +logTenCorrelation(double[], double[]): double[]() +linReg(double[], double[]): double[]() +quadReg(double[], double[]): double[]() +cubReg(double[], double[]): double[]() +logReg(double[], double[]): double[]() +logTenReg(double[], double[]): double[]() +pseudoHist(double[], double[], int,int,int,int,int)() geometry thematic readData Point Polygon County -double x -double y -double z +Point(double, double)() +Point(double,double,double)() +equals(Point)() : bool +displayPoint()() +getMin(Point)() : Point +getMax(Point)() : Point +distanceTo(Point)() : double +angelTo(Point)() : double +getDeterminant(Point, Point)() : double -uid : int -centroid : Point -points: Vector -meanHeight : double +Polygon(int, Vector)() +setheightValues(double[])() +calcMeanHeightPoly()() : double +pointInPolygon(Point)() : bool +hasNegativeValues()() : bool +getPolygonArea()() : double +getPolygonArea()() : double +pointInPolygon2(Point)() : bool +getPointArray()() +displayPolygon()() -uids: Vector -polygons: Vector -fips: int -countyName: String -state: String -butterflies: Vector -area: double -meanHeight: double +setArea(double)() +addPolygons(Polygon)() +countButterflies()() : int +calcCountyArea()() : double +getMeanheightCounty()() : double +displayCounty()() +displayCountyStatistics()() Rectangle IOHelper +readCountiesGeometry(String): Hashtable() +readCountiesInfo(String): Hashtable() +readButterflyTypes(String): Vector() +readButterflyLocations(String)() +readAllData(): Hashtable() ReadRaster +readRasterFile(String)() : Raster +readRasterFileT(String)() : Raster +readRasterFileToPoints(String): Vector() PointGroup -minP : Point -maxP : Point +hasInside(Point)() : bool Segment -start : Point -end : Point +getLength()() : double +getDeterminant(Point)() : double +getOrientation(Point)() : int +intersects(Segment)() : bool -points: Vector +PointGroup (Vector)() +addPoint(Point)() +findCentroid()() : Point +findBoundingBox()() : Rectangle +findNearestPoint(Point)() : Point +sortOrigin()() +getminYPoint()() : Point +convexHull()() : Polygon +displayPoints() Butterfly -id: int -species: String -family: String -subFamily: String -commonName: String +Butterfly(int, String, String, String, String)() +displayButterfly()() visualization GISFrameFX -nf: GISFrame -counties: Hashtable -dtm: Raster +GISFrame(Hashtable, Raster)() +processDataRequest(int)() Raster -cellValues[][] : float -xll : double -yll : double -cellSize : double -nRows : int -nCols : int -noDataValue : int +getMeanHeightInMBB(Rectangle)() : double +outputGridRaster(String)() +displayRaster()() Jonas Snozzi, Gianluca Miele Bemerkung zum Diagramm: Die getters und setters der einzelnen Klassen wurden aus Platzgründen weggelassen. Es werden nur die wichtigsten Methoden aufgeführt! 13. Juni 2008