Net Squared Displacement

Alles zum Thema der beschreibenden Statistik

Moderator: jogo

Arthemisia
Beiträge: 17
Registriert: Fr Aug 26, 2022 2:47 pm

Net Squared Displacement

Beitrag 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
Benutzeravatar
student
Beiträge: 674
Registriert: Fr Okt 07, 2016 9:52 am

Re: Net Squared Displacement

Beitrag 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.
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt
Das Ad-Oculos-Projekt auf YouTube

Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)
Arthemisia
Beiträge: 17
Registriert: Fr Aug 26, 2022 2:47 pm

Re: Net Squared Displacement

Beitrag 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)
}
}
Benutzeravatar
student
Beiträge: 674
Registriert: Fr Okt 07, 2016 9:52 am

Re: Net Squared Displacement

Beitrag 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.
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt
Das Ad-Oculos-Projekt auf YouTube

Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)
Arthemisia
Beiträge: 17
Registriert: Fr Aug 26, 2022 2:47 pm

Re: Net Squared Displacement

Beitrag 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?
bigben
Beiträge: 2777
Registriert: Mi Okt 12, 2016 9:09 am

Re: Net Squared Displacement

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Arthemisia
Beiträge: 17
Registriert: Fr Aug 26, 2022 2:47 pm

Re: Net Squared Displacement

Beitrag 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
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Net Squared Displacement

Beitrag 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!
Arthemisia
Beiträge: 17
Registriert: Fr Aug 26, 2022 2:47 pm

Re: Net Squared Displacement

Beitrag 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
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Net Squared Displacement

Beitrag 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"))
Antworten