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
Java­Code 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 Pseudo­Histogramm 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 Pseudo­Histogramms 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

Documentos relacionados