Seite 1 von 4

Net Squared Displacement

Verfasst: Fr Aug 26, 2022 2:55 pm
von Arthemisia
Hallo, hat jemand schon einmal eine NSD Grafik erstellt?
Ich habe eine Reihe GPS Daten, von Vögeln, denen über mehrere Jahre hinweg Sender umgeschnallt waren, um deren Flugbewegungen zu dokumentieren.
Zur Auswertung soll eine Net Squared Displacement Grafik erstellt werden, ein Skript dazu habe ich gefunden, inklusive eines Tutorials auf englisch.
Irgendwie stoße ich immer wieder auf Fehlermeldungen, und ich weiß nicht, wo genau der Fehler (bzw die Fehler ...) liegt.
Danke schon mal,
Arthemisia

Re: Net Squared Displacement

Verfasst: Fr Aug 26, 2022 7:09 pm
von student
Hallo ,

handelt es sich vielleicht um folgendes Skript? Ich habe mich bisher noch nicht mit diesem Thema beschäftig, aber poste doch einfach mal das was Du gemacht hast (als lauffähiges Beispiel) und die Fehlermeldungen. Vielleicht kann Dir dann jemand einen Hinweis geben.

Ich weiß, das ist ein No Brainer: Du gehst ja sicher so vor, dass Du das Skript zeilenweise "abarbeitest", denn dann ist es oft leichter, die auftretende Fehlermeldung zu interpretieren.

Re: Net Squared Displacement

Verfasst: Mo Aug 29, 2022 9:10 am
von Arthemisia
Hallo zurück und schon mal danke für die schnelle Reaktion.
Ja, das ist das Skript, und ja, ich arbeite mich Stück für Stück durch.

Meine Probleme gehen schon ganz am Anfang los:

Code: Alles auswählen

deer.spdf <- SpatialPointsDataFrame(coords= coords, data = duemmer, proj4string = CRS(crs))
head(deer.spdf)
class(deer.spdf)
proj4string(deer.spdf)
plot(deer.spdf,col=deer.spdf$id)
Es kommt die Fehlermeldung, dass das "SpatialPointsDataFrame" nicht gefunden wurde, beim Plot bekomme ich eine leere Seite.

Und beim nächsten Teil verstehe ich nicht, was die Befehle bewirken sollen, um meine Daten bzw die Anweisungen im Skript für meine Daten anzupassen:

Code: Alles auswählen

d1 <- duemmer
str(d1)
indata <- d1d1<_
innames <- unique(d1$duemmer)
innames <- innames[1:10]
outnames <- innames
for (i in 1:length(innames)){
  data <- indata[which(indata$YearBurst==innames[i]),]
  if(dim(data)[1] != 0){
    data.xy = data[c("X", "Y")]
    coordinates(data.xy) <- ~X+Y
    sppt <- SpatialPointsDataFrame(coordinates(data.xy),data)
    proj4string(sppt) <- CRS("+proj=utm +zone=12 +datum=WGS84")
    write.table(sppt, paste(outnames[i],"txt",sep="."), sep="\t", quote=FALSE, row.names=FALSE)
    write.table(paste(outnames[i],"txt",sep="."), sep="\t", quote=FALSE, row.names=FALSE, col.names=FALSE, "In_list.txt", append=TRUE)
}
}

Re: Net Squared Displacement

Verfasst: Mo Aug 29, 2022 10:56 am
von student
Wie geschrieben, ich habe mich mit diesem Thema noch nicht auseinandergesetzt und das Skript habe ich nicht "nachgekocht".

Zur Fehlermeldung ...
das "SpatialPointsDataFrame" nicht gefunden wurde
... kann ich jetzt nur feststellen, dass die Funktion Bestandteil des Paketes sp ist. In dem Paket spatstat scheint sie nicht vorhanden zu sein, wie zuerst vermutet. Versuches es mal erneut, nachdem Du das Paket sp installiert hast.

Zum weiteren Code kann ich nur feststellen, dass Du ihn natürlich Deinen Anforderungen nach angepasst hast, aber hier ein Problem zeigt:
indata <- d1d1<_
innames <- unique(d1$duemmer)
Verständlich wird der Code, wenn Du Dir den Inhalt/Ausgabe jedes Objektes oder jeder Funktion ausgeben lässt. Z. B., was zeigt indata oder innames, auf der Konsole?

Im Skript wird als Kommentar (alles was nach dem #-Zeichen kommt) dargelegt, was der Autor sich dabei gedacht hat. Sollte etwas trotzdem unklar sein, hilft die R-Hilfe bestimmt weiter.

Re: Net Squared Displacement

Verfasst: Di Sep 06, 2022 3:09 pm
von Arthemisia
Hallo zurück!

Erst einmal danke für die Tipps, das hat wirklich weiter geholfen, es gibt aber immer noch ein richtig übles Problem in meinen Daten, das ich einfach nicht gelöst bekomme.

Im Datensatz ist eine Spalte mit Zeitstempel (Datum und Uhrzeit), allerdings teilweise im Format (YYYY / MM / DD), teilweise im Format (DD . MM . JJJJ). Der Datensatz lag als CSV mit "," als Trennzeichen vor, aber weil ich ja nicht alle Spalten der Rohdaten brauche, hab ich die in Excel konvertiert. Excel erkennt die Zeitstempel mit (YYYY / MM / DD) als Datum plus Uhrzeit, aber die (DD . MM . JJJJ) werden mit "benutzerdefiniert" bezeichnet.
R bezeichnet jetzt im Datensatz die von Excel als Datum markierten als "chr", die mit Punkten als Trennzeichen werden als "factor" markiert. Entsprechend erkennt das Skript in der Zeile "duemmer$NewDate<-as.POSIXct(data.duemmer$timestamp, format="%d.%m.%Y %H:%M:%S"" nur teilweise als Zeitstempel, alle anderen werden als "NA" markiert. Am Ende bekomme ich eine Results-Liste nur mit Nullen.

Was kann ich machen, damit R die Zeitstempel einheitlich als Datum und Uhrzeit erkennt?

Re: Net Squared Displacement

Verfasst: Di Sep 06, 2022 4:52 pm
von bigben
Hallo Arthemisia,

Solche selbstausgedachten Beschreibungen wie "
YYYY / MM / DD) als Datum plus Uhrzeit, aber die (DD . MM . JJJJ) " funktionieren oft nicht. Einmal sind die darin enthaltenen Leerzeichen sehr ungewöhnlich, zum anderen beschreibst Du damit Datumsangaben aber keine Uhrzeit, die dann im Satz wieder vorkommt. Das macht keine Lust, dafür was zu programmieren.
Bitte poste ein Datenbeispiel in Form von lauffähigem R Code, dann wird sich für das Datumsproblem eine Lösung finden lassen.

viewtopic.php?t=11

LG, Bernhard

Re: Net Squared Displacement

Verfasst: Di Sep 06, 2022 5:26 pm
von Arthemisia
Hallo Bernhard,

das waren keine "selbstausgedachten Datumsformate", sondern das, was Excel daraus gemacht hat, und genau da liegt ja mein Problem, an dem ich jetzt seit Tagen herumexperimentiere und nicht weiter komme. Es ging mir darum, zu zeigen, dass ein Teil der Zeitstempel im Datum "/" als Trennstriche hat und in der Reihenfolge Jahr, Monat, Tag, und der andere Teil "." als Trennzeichen und die Reihenfolge Tag, Monat, Jahr hat. Die Uhrzeiten danach erkennt Excel auch als Uhrzeit (im üblichen Format HH:MM:SS), aber R kennt ja keine Uhrzeit als Format, sondern nur in der Kombination mit Datum und Zeit.
Und einen lauffähigen R Code habe ich nicht, deswegen ja meine Frage, was ich machen kann.

Ich habe so ziemlich alles ausprobiert, was mir eingefallen ist. Ich habe versucht, die Spalten in Excel in eine Spalte mit Datum und eine Spalte mit Uhrzeit zu teilen, und dann in R mit "paste(duemmer$date, duemmer$time)" wieder zusammengeführt, was auch zuerst so aussah, als ob das funktioniert hätte, aber dann musste ich feststellen, dass R dann die Zeitstempel für reinen Text hält. Ich habe versucht, die Zeitstempel erst als "factor" zu bezeichnen, und dann wieder zurück zum Datumsformat, aber dann bekomme ich zerschossene Daten, mit denen das Skript dann überhaupt nichts mehr anfangen kann.

Muss ich in Excel etwas anders einstellen? Und wenn ja, wie? Oder gibt es einen lauffähigen R Code, wie man die verschiedenen Datumsformate vereinheitlichen kann?

Schöne Grüße zurück,
Arthemisia

Re: Net Squared Displacement

Verfasst: Di Sep 06, 2022 11:53 pm
von Athomas
Ich vermute, Dein Problem ist weitgehend hausgemacht...

Zur Aufbereitung von Daten ist R wesentlich besser geeignet als Excel - wenn man es denn gut genug kann!
Wenn Excel dazwischen kommt, ist das Chaos vorprogrammiert: weil es mitdenken möchte - und das nicht immer wie gewünscht klappt :D !

Zeig uns doch mal (in maschinenlesbarer Form, evtl. nur einen Teil) Deine ursprüngliche csv-Datei - bitte bevor sie mit Excel in Berührung gekommen ist. Du wirst Dich wundern, wie einfach sich diese (Einlese-) Probleme aus der Welt schaffen lassen!

Re: Net Squared Displacement

Verfasst: Mi Sep 07, 2022 6:32 am
von Arthemisia
Hallo zurück,
die Rohdaten sehen so aus:

trackId,site,timestamp,location.long,location.lat,tag.id,sensor.type.id,algorithm.marked.outlier,gps.fix.type,gps.maximum.signal.strength,gps.satellite.count,gps.time.to.fix,ground.speed,heading,height.above.msl,import.marked.outlier,location.error.numerical,manually.marked.outlier,update.ts,visible,deployment.id,event.id,sensor.type,tag.local.identifier,coords.x1,coords.x2,optional,sensor,timestamps,comments,death.comments,individual.id,local.identifier,ring.id,sex,taxon.canonical.name,timestamp.start,timestamp.end,number.of.events,number.of.deployments,sensor.type.ids
GG_2016_D055,Dümmer,4/15/2020 0:02,8.3572871,52.5062228,137649807,653,,1,-149,0,151,0,0,23.6,FALSE,999.9,,36:18.6,TRUE,171568817,14780739283,GPS,3805,8.3572871,52.5062228,TRUE,GPS,4/15/2020 0:02,rigned as adult female in family catch at Lake Dümmer,NA,171568710,GG_2016_D05,DEW_278013,f,Anser anser,00:30.0,01:11.0,101136,1,"GPS,Acceleration,Accessory Measurements,Magnetometer"
GG_2016_D055,Dümmer,4/15/2020 1:02,8.3572871,52.5062228,137649807,653,,1,-148,0,151,0,0,23.6,FALSE,999.9,,36:18.6,TRUE,171568817,14780739284,GPS,3805,8.3572871,52.5062228,TRUE,GPS,4/15/2020 1:02,rigned as adult female in family catch at Lake Dümmer,NA,171568710,GG_2016_D05,DEW_278013,f,Anser anser,00:30.0,01:11.0,101136,1,"GPS,Acceleration,Accessory Measurements,Magnetometer"
GG_2016_D076,Dümmer,5/1/2021 0:30,8.3322451,52.4789916,168738356,653,,3,-136,7,15,0.07,357,40.4,FALSE,6.2,,40:07.6,TRUE,171569493,18642415365,GPS,3807,8.3322451,52.4789916,TRUE,GPS,5/1/2021 0:30,caught as adult female in family catch at Lake Dümmer,NA,171569482,GG_2016_D07,DEW_278020,f,Anser anser,00:21.0,30:22.0,181924,1,"GPS,Acceleration,Accessory Measurements,Magnetometer"
GG_2016_D076,Dümmer,5/1/2021 1:30,8.3322818,52.4789651,168738356,653,,3,-130,8,14,0.03,0,29.6,FALSE,1.8,,40:07.6,TRUE,171569493,18642415369,GPS,3807,8.3322818,52.4789651,TRUE,GPS,5/1/2021 1:30,caught as adult female in family catch at Lake Dümmer,NA,171569482,GG_2016_D07,DEW_278020,f,Anser anser,00:21.0,30:22.0,181924,1,"GPS,Acceleration,Accessory Measurements,Magnetometer"
... ich wundere mich gerade darüber, warum Excel die Datumsangaben (obwohl sie ja hier im selben Format stehen) beim Konvertieren einmal als Datum erkennt und einmal nicht ... es gibt auch mehrere Spalten, die mit "timestamp" beschriftet sind, k.a. warum ...

Unter "site" gibt es zwei verschiedene Populationen, die kann ich mit subset herausfiltern. Für die weitere Verarbeitung der Daten benötige ich einen Data Frame mit den Spalten "trackId", "timestamp", "location.long" (wird zu "coords_x1") und "location.lat" (wird zu "coords_x2).

Bei der NSD Grafik geht es darum, wie sich Wanderungsbewegungen im Jahresverlauf verändern. Das heißt, das Skript fasst die Zeitstempel in Untersets für Jahre und Monate zusammen. Folglich müssen die Zeitstempel so dargestellt werden, dass R die Jahres- und Monatsangaben auch als solche erkennt (also in diesem Format: as.POSIXct( duemmer$timestamp, format = "%Y-%m-%d %H:%M:%S")).

Schöne Grüße,
Arthemisia

Re: Net Squared Displacement

Verfasst: Mi Sep 07, 2022 8:52 am
von Athomas
Ich benutze data.table - weil ich es gewohnt bin, das ließe sich aber auch analog auf base-R übertragen:

Code: Alles auswählen

library(data.table)
DT <- fread("P:/R/R Forum/Daten 202209/Beispiel.txt")

DT[  , ":="(Timestamp = as.POSIXct(timestamp, format="%m/%d/%Y %H:%M"),
            Timestamps= as.POSIXct(timestamps, format="%m/%d/%Y %H:%M"))]

Extrakt <- DT[  , c("trackId", "Timestamp", "site", "location.long", "location.lat")]
setnames(Extrakt, c("location.long", "location.lat"), c("coords_x1", "coords_x2"))