Seite 1 von 2

Fahrsimulatordatenauswertung

Verfasst: Di Apr 06, 2021 4:29 pm
von Studentpsych
Hallo liebe Community,
ich studiere Psychologie und soll im Rahmen eines interdisziplinären Seminars Fahrsimulator-Daten auswerten. Nun bin ich mit den Daten extrem überfordert, 50.000 Zeilen x 50 Spalten (Variablen, nicht alle werden benötigt) pro Versuchsperson. Die 50.000 ergeben sich, da das Experiment in 10 Millisekundeneinheiten mitgeschnitten wurde und es im Mittel ca. 8 Minuten pro Versuchperson dauerte. Bisher habe ich auch nur mit Excel und SPSS gearbeitet, diese Programme stoßen allerdings beim gegebenen Beispiel an ihre Grenzen. Um den Versuch wie gewohnt auszuwerten (Mittelwertsvergleiche; T-Test zwischen Experimentalgruppen) müssten die Daten erst mit R-Stutio aufbereitet werden, so dass am Ende eine Tabelle existiert in der jedem der Versuchspersonen (insgesamt 24) ein einzelner Wert pro abhängige Variable zugeordnet ist. Diese abhängigen Variablen wären Geschwindigkeitsdifferenz, Abstand und die Minimum-Time-to-Collision (zwischen zwei Fahrzeugen) und errechnen sich relativ einfach anhand der Variablen (z.B. Geschwindigkeitsdifferenz: GeschwindigkeitFahrzeug1 – GeschwindigkeitFahrzeug2,3,4,5,6). Da es sich um ein Fahrsimulatorexperiment handelt gibt es eine Definierte Strecke in Metern (ist die Variable, die als Orientierung dient) auf welcher die Versuchsperson (Fahrzeug1) fährt. Auf dieser Strecke gibt es genau 5 Ampeln, an welchen es jeweils zu einer Interaktion mit Fahrzeug2,3,4,5,6 (jedes dieser Fahrzeuge kommt nur einmal vor und zwar jeweils an einer Ampel und ist simuliert/programmiert) kommt. Da wir nur die Interaktion zwischen Fahrzeug1 und den anderen simulierten Fahrzeugen untersuchen sind nur die 5 Ampelabschnitte +/- 100 Meter für die Auswertung relevant, die Ampeln sind feste Punkte auf der Strecke definiert in Metern (jede Versuchsperson ist die gleiche, vorgefertigte Strecke gefahren). Der Minimalwert der Abhängigen Variablen soll in diesem Streckenintervall +/- 100 Meter pro Ampel, pro Versuchsperson ausfindig gemacht werden. Jede Versuchsperson hat eine einzelne CSV-Datei, ich habe mich bereits damit abgefunden, dass ganze einfach 24-mal mit einem Skript durchzuführen, anstatt es in eine einzelne Datei zu schreiben, um es nicht komplizierter zu machen.
Meine Fragen wären jetzt:
Wie kann man ein Skript schreiben, welches:
1. Die Daten auf +/- 100 Meter pro Ampel reduziert
2. Bestimmten Variablen innerhalb dieser Abschnitte einen Definierten Betrag hinzuaddieren, damit die Variablen untereinander vergleichbar sind
3. Pro Ampelabschnitt eine oder mehrere abhängige Variablen berechnet (z.B. Geschwindigkeit: GeschwindigkeitFahrzeug1 – GeschwindigkeitFahrzeug2,3,4,5,6) zwischen zwei oder mehreren unabhängigen Variablen welche sich pro Ampelabschnitt unterscheiden (da immer ein anderes simuliertes Fahrzeug pro neuen Ampelabschnitt folgt)
4. Den Minimalwert bzw. Maximalwert dieser Abhängigen Variablen bestimmt (pro Abschnitt)
5. Diese 5 Werte pro Abhängige Variable, pro Versuchsperson in Ampelreihenfolge in eine neue Datei schreibt und die neue Variable benennt

Ich weiß wirklich nicht, wie ich dabei vorgehen soll und habe noch nie mit solchen Datenstrukturen gearbeitet und habe auch keine Ahnung von Programmieren. Falls mir da jemand ein paar Tipps geben könnte, wäre ich sehr dankbar.
Viele Grüße

Re: Fahrsimulatordatenauswertung

Verfasst: Di Apr 06, 2021 5:28 pm
von bigben
Hallo!
Studentpsych hat geschrieben: Di Apr 06, 2021 4:29 pmBisher habe ich auch nur mit Excel und SPSS gearbeitet, diese Programme stoßen allerdings beim gegebenen Beispiel an ihre Grenzen.
Ja, es soll Datenauswerteprogramme geben die ein Problem damit haben, wenn man sie mit Daten konfrontiert.
Jede Versuchsperson hat eine einzelne CSV-Datei, ich habe mich bereits damit abgefunden, dass ganze einfach 24-mal mit einem Skript durchzuführen, anstatt es in eine einzelne Datei zu schreiben, um es nicht komplizierter zu machen.
Für einen Anfänger kann das eine sinnvolle Strategie sein, die Komplexität zu reduzieren.
... gibt es eine Definierte Strecke in Metern (ist die Variable, die als Orientierung dient) auf welcher die Versuchsperson (Fahrzeug1) fährt. [...] Der Minimalwert der Abhängigen Variablen soll in diesem Streckenintervall +/- 100 Meter pro Ampel, pro Versuchsperson ausfindig gemacht werden. [...]
Wie kann man ein Skript schreiben, welches:
1. Die Daten auf +/- 100 Meter pro Ampel reduziert
Beispielsweise mit der Funktion subset().
2. Bestimmten Variablen innerhalb dieser Abschnitte einen Definierten Betrag hinzuaddieren, damit die Variablen untereinander vergleichbar sind
Da müsste man definieren welchen Variablen welche Beträge hinzugefügt werden sollen. Aber eigentlich reicht in R ein Pluszeichen, um einer Reihe von Werten jeweils eine Konstante hinzuzufügen:

Folgendes ist ein funktionierendes Minimalbeispiel. Du kannst es einfach per copy und paste in eine R-Konsole kopieren und versuchen nachzuvollziehen, was ich damit sagen will:

Code: Alles auswählen

werte <- c(1, 2, 2.5, 3, 5, 9)
print(werte)

print(werte + 10)
3. Pro Ampelabschnitt eine oder mehrere abhängige Variablen berechnet (z.B. Geschwindigkeit: GeschwindigkeitFahrzeug1 – GeschwindigkeitFahrzeug2,3,4,5,6) zwischen zwei oder mehreren unabhängigen Variablen welche sich pro Ampelabschnitt unterscheiden (da immer ein anderes simuliertes Fahrzeug pro neuen Ampelabschnitt folgt)
Das kommt nun darauf an, wie die Daten aussehen, welche Variablen Du wie berechnen willst und so weiter. Um so etwas zu kommunizieren eignen sich reproduzierbare Minimalbeispiele sehr gut. Die Gegenfrage lautet: Was kannst Du schon in R, auf welchem Niveau brauchst Du eine Antwort und bist Du schon in der Lage, ein reproduzierbares Minimalbeispiel zu posten, anhand dessen wir Dir das vormachen können?
4. Den Minimalwert bzw. Maximalwert dieser Abhängigen Variablen bestimmt (pro Abschnitt)
Für Minimalwerte gibt es die Funktionen min() und which.min(), für Maximalwerte die Funktionen max() und which.max(). Die Aufgabe, das für verschiedene Abschnitte zu machen kann man auf vielfältigste Art und Weise lösen. Oft bekommen Fragende hier gleich einen Blumenstrauß an Antworten auf diesen Typ Frage.
5. Diese 5 Werte pro Abhängige Variable, pro Versuchsperson in Ampelreihenfolge in eine neue Datei schreibt und die neue Variable benennt
Kommt darauf an, wie die Daten in R aussehen. In eine neue Datei schreiben kann man mit write.table().
Ich weiß wirklich nicht, wie ich dabei vorgehen soll und habe noch nie mit solchen Datenstrukturen gearbeitet und habe auch keine Ahnung von Programmieren. Falls mir da jemand ein paar Tipps geben könnte, wäre ich sehr dankbar.
R ist eine ausgewachsene Programmiersprache. Ihr einziger Nachteil gegenüber SPSS ist, dass man sie erst lernen muss, bevor man sie verwenden kann. Sie kann alles, was man mit Daten machen kann, aber natürlich gibt es nicht für alles einen Menüpunkt zum Anklicken. Wir verstehen uns als Forum das denen hilft, die R lernen wollen. Wir sind kein Programmierservice. Mir ist gerade nicht klar, ob Du bereit bist, R zu lernen, um dieses Problem anzugehen oder ob Du jemanden suchst, der für Dich ein Datenextraktionsprogramm schreibt. Vielleicht können wir dies zunächst klären: Willst Du selbst R lernen und wenn ja, wie weit bist Du schon gekommen oder suchst Du einen Programmierer für dieses Teilproblem und wenn letzteres, bietest Du Koautorenschaft, Acknowledgement, Geld oder Gotteslohn an?

LG,
Bernhard

Re: Fahrsimulatordatenauswertung

Verfasst: Mi Apr 07, 2021 1:16 pm
von Studentpsych
Hallo Bernd,
erstmal vielen Dank, dass du dir die Zeit genommen hast dich in mein Problem einzulesen, um es zu verstehen! Ebenfalls hilfreich sind die einzelnen Befehle, die du mir als Unterpunkte kommentiert hast. Um an dieser Stelle gleich auf deine erste Frage zurückzukommen, ich habe bis jetzt gar keine Ahnung von R. Was ich bis jetzt gemacht habe ist, dass ich einem Tutorial gefolgt bin, mithilfe dessen ich den Arbeitsordner festgelegt, die Tabelle der Versuchspersonen eingelesen und mir anzeigen lassen habe.
getwd()
setwd("C:/Users/RobinAOE/Desktop")
daten <- read.csv("P1 - Kopie.csv", header = TRUE, sep = ",")
View(daten)
daten <- read.csv("P1.csv", header = TRUE, sep = ",")
View(daten)
Von hier aus wüsste ich leider noch nicht wie ich die von dir genannten Befehle integrieren soll, das R auch das macht, was ich möchte (gewollte Variablenabschnitte berücksichtigt, welche Variable, von -bis).
Um auf deine zweite Frage zurückzukommen, ich hatte eigentlich schon den Plan R anhand meines Beispiels zu lernen, immerhin so weit, dass ich dieses dann auch auswerten kann. Allerdings, falls jemand bereit wäre mir das live zu zeigen und zu erklären (z.B. über ein Kommunikationsprogramm), dann wäre ich auch gerne bereit Geld dafür zu bezahlen.
LG,
Robin

Re: Fahrsimulatordatenauswertung

Verfasst: Mi Apr 07, 2021 1:27 pm
von bigben
Hallo Robin,

> Allerdings, falls jemand bereit wäre mir das live zu zeigen und zu erklären (z.B. über ein Kommunikationsprogramm), dann wäre ich auch gerne bereit Geld dafür zu bezahlen.

Dann ist das jetzt einmal lesbar hier hin geschrieben und Interessierte können das finden und sich bei Dir melden.

Was die kostenfreie aber öffentliche Beratung im Forum angeht: Wie oben schon ausführlich beschrieben geht das am besten mit aussagekräftigen Beispieldaten. Siehst Du irgendeine Möglichkeit, uns ein solches CSV hier im Forum einzustellen? Schon klar, Du willst Deine Daten nicht vorab veröffentlichen aber keiner von uns kennt den zugehörigen Versuchsaufbau und damit kann das keiner von uns betrügerischerweise publizieren. Auch hat keiner von uns Interesse daran, Daten für deren Zustandekommen er nicht bürgen kann unter seinem Namen zu veröffentlichen. Es muss auch kein vollständiger Datensatz von 50.000 Zeilen sein, nur genug, um das Finden des Streckenintervalls +/+ 100m um die Ampel vorzumachen.

Code: Alles auswählen

daten <- read.csv("P1 - Kopie.csv", header = TRUE, sep = ",")
View(daten)
Die Argumente header = TRUE und sep = "," sind auch schon die Voreinstellungen bei read.csv. Du könntest sie also auch weglassen. Sieht denn die Anzeige von View(daten) so aus, als hätte das mit dem Einlesen der Daten gut geklappt? Hier im Forum bevorzugen wir eigentlich die Version str(daten) - da kann man nicht soviele Daten sehen aber besser erkennen, ob R richtig verstanden hat, was Zahlen und was Texte sind.

Früher oder später kommt das eh, deshalb kann ich es auch jetzt schon schreiben: Bitte benutze [code}-Tags, wenn Du R Code oder eine R Ausgabe im Forum benutzt, für den geübten erhöht das die Lesbarkeit enorm weitere dazu hier.

LG,
Bernhard

Re: Fahrsimulatordatenauswertung

Verfasst: Mi Apr 07, 2021 8:26 pm
von Studentpsych
Hallo Bernhard,
vielen Dank erneut für deine Antwort und die Erläuterungen. Um auf deine Frage zurückzukommen, ja die Tabelle schien gut lesbar und vollständig zu sein, dennoch wird diese Tabelle nur visuell angezeigt und ich habe ein bisschen die Funktion von Excel vermisst, dass ich Variablen direkt markieren kann, ist aber aufgrund der Datenmenge wahrscheinlich sowieso nicht hilfreich.
Beim Reinstellen meiner CSV-Datei habe ich weniger Angst vor einer fremden Veröffentlichung, allerdings handelt es sich hierbei um Versuchspersonendaten und diese sollten nicht öffentlich zugänglich gemacht werden. Aber ich habe mal eine CSV-Datei auf ein Minimum reduziert und so modifiziert, dass die Struktur der Daten erhalten bleibt jedoch nicht auf eine einzelne Person zurückzuführen ist und bei der die meisten Werte durch ihren Variablennamen ersetzt wurden (außer bei 2 Variablen). Die Variable „Car_Road_sRoad“ gibt die Strecke in Meter an die Fahrzeug1 gefahren ist (dient hier als Orientierungsvariable, z.B. 800 Meter = Ampel 1, bedeutet Interaktion mit Fahrzeug2). Im Vergleich dazu gibt der Wert der Variable „Traffic_T00_sRoad“ die Strecke von Fahrzeug2 an (zu dieser Variable müsste ein Wert hinzuaddiert werden z.B. 350 Meter, damit sie mit „Car_Road_sRoad“ vergleichbar ist). Bei „Car_Road_sRoad“ = 800 Meter ist also das Streckenintervall +/- 100 Meter definiert und innerhalb dieses Intervalls ist zum Beispiel der Wert von „Traffic_T00_sRoad“ - „Car_Road_sRoad“ (Abstand) interessant.
Anzumerken ist, dass die hochgeladene Datei nur 500 kb groß sein darf (die Originaldatei war 45 mb), weshalb die Variable „Car_Road_sRoad“ im Hochgeladenen-Datensatz nicht bis 800 kommen kann (ich konnte leider nur einen kleinen Bruchteil anhängen). Dennoch würde das Prinzip gleich bleiben.
LG,
Robin
Beispiel.csv
(451.32 KiB) 75-mal heruntergeladen

Re: Fahrsimulatordatenauswertung

Verfasst: Mi Apr 07, 2021 9:31 pm
von bigben
Hallo Robin,
Studentpsych hat geschrieben: Mi Apr 07, 2021 8:26 pm... allerdings handelt es sich hierbei um Versuchspersonendaten und diese sollten nicht öffentlich zugänglich gemacht werden.
Die gehören natürlich nicht ins Netz gestellt. Da wirst Du einen anderen Weg finden müssen. Notfalls helfen wir Dir, eine geeignete anonyme Fassung in R zu erstellen.
Die Variable „Car_Road_sRoad“ gibt die Strecke in Meter an die Fahrzeug1 gefahren ist
Das ist eine ganz komische Variable, die nahezu konstant nur auf der 5. Nachkommastelle etwas variiert (hundertstel Millimeter) und auch das nicht monoton. Schau es Dir selbst an:

Code: Alles auswählen

fasi <- read.table("http://forum.r-statistik.de/download/file.php?id=1438",
                   sep = ";", dec = ".", header = TRUE)
str(fasi)
summary(fasi$Car_Road_sRoad)
plot(fasi$Car_Road_sRoad, type = "l", xlab = "Zeile")
Im Vergleich dazu gibt der Wert der Variable „Traffic_T00_sRoad“ die Strecke von Fahrzeug2 an

Bei den hochgeladenen Beispieldaten ist der Wert eine Konstante:

Code: Alles auswählen

summary(fasi$Traffic_T00_sRoad)
plot(fasi$Traffic_T00_sRoad, type = "l", xlab ="Zeile")
Anzumerken ist, dass die hochgeladene Datei nur 500 kb groß sein darf (die Originaldatei war 45 mb), weshalb die Variable „Car_Road_sRoad“ im Hochgeladenen-Datensatz nicht bis 800 kommen kann (ich konnte leider nur einen kleinen Bruchteil anhängen).


Ein Bruchteil, mit dem sich kaum arbeiten lässt. Du schreibst ja, dass Du die Daten mit

Code: Alles auswählen

setwd("C:/Users/RobinAOE/Desktop")
daten <- read.csv("P1 - Kopie.csv", header = TRUE, sep = ",")
vollständig einlesen kannst. Probier danach mal folgendes:

Code: Alles auswählen

daten.kurz <- daten[seq(1, nrow(daten), 13), c("Car_Road_sRoad", "Traffic_T00_sRoad")]
head(daten.kurz, 20)
summary(daten.kurz)
write.table(daten.kurz, "P1_für_Forum.csv")
Das sollte einen Datensatz mit Namen daten.kurz erstellen, der aber nur jede 13. Zeile aus daten enthält und auch nur die zwei hier relevanten Spalten und das dann als CSV speichern. Stell sicher, dass keine personenbezogenen Daten drin sind und ob die Datei unter 500KB groß ist. Andernfalls erhöhe die Zahl 13 auf was größeres, bis es passt. Dann sollten wir einen Datensatz haben, in dem sich die Autos auch bewegen. Wenn das gar nicht läuft, muss man schlimmstenfalls auf Dropbox oder ähnliches ausweichen.

LG,
Bernhard

Re: Fahrsimulatordatenauswertung

Verfasst: Do Apr 08, 2021 12:55 pm
von Studentpsych
Hallo Bernhard,
vielen Dank erneut, dass du dir die Zeit genommen hast, um dir mein konkretes Beispiel anzuschauen. Du hast natürlich mit allem recht, das alte Beispiel hat nur ein paar Sekunden des gesamten Versuchs repräsentieren können. Daher (weil es in 10 Millisekunden mitgeschnitten wurde) ist Fahrzeug1 fast nur im Stand aufgenommen worden (am Anfang des Versuchs bevor es eigentlich losging) und das erste Szenario (erreichen der Ampel1 und Interaktion mit Fahrzeug2) wurde erst gar nicht getriggert, weswegen Fahrzeug2 über diese Zeit hinweg an seiner Startposition verweilt und daher eine Konstante ist. Nur während des Szenarios ist Fahrzeug2 also nicht konstant, bis es kurz nach der 1. Ampel wieder abbiegt und stehen bleibt (und ist bis zum Ende des Versuchs wieder eine Konstante). Deine geschriebenen Konsolenbefehle haben wunderbar funktioniert! Die neue Datei enthält nun die zwei Variablen auf ein 13tel verkürzt.

Re: Fahrsimulatordatenauswertung

Verfasst: Do Apr 08, 2021 1:41 pm
von bigben
Hallo Robin,

da hat sich in Zeile 1417 ein Fehler mit Dezimalkomma statt Dezimalpunkt eingeschlichen. Wahrscheinlich hast Du da manuell was an den Daten geändert. So lassen sich die Daten jetzt einlesen und der Fehler flicken:

Code: Alles auswählen

fasi <- read.table("http://forum.r-statistik.de/download/file.php?id=1441",
                   sep = ";", dec = ".", header = TRUE)

fasi[1417, 1] <- "2100"  # müssen wir manuell zuweisen da falsch in der Datei
fasi[1417, 2] <- 570.7
fasi$Car_Road_sRoad <- as.numeric(fasi$Car_Road_sRoad)
Zunächst immer gründlich schauen, ob jetzt alles passt:

Code: Alles auswählen

summary(fasi)
plot(fasi$Car_Road_sRoad, type = "l", xlab = "Zeile")
lines(fasi$Traffic_T00_sRoad, type = "l", xlab = "Zeile", col ="red")
legend("topleft", col = c("black", "red"), lty = c(1, 1), legend = c("Proband", "Auto erste Ampel"))
Sieht gut aus.

Als nächstes interessiert uns nur, was 100 Meter vor und 100 Meter nach der Ampel passiert ist, die bei 800 Metern steht. Richtig? Wir schaffen uns einen neuen Datensatz namens `ampel_1`. Er ist eine Untermenge, ein subset von fasi und soll nur die Zeilen enthalten, in denen Car_Road_sRoad größer als 700m aber kleiner als 900m ist. Das kann man recht wörtlich so übersetzen:

Code: Alles auswählen

ampel_1 <- subset(fasi, Car_Road_sRoad > 700 & Car_Road_sRoad < 900)
summary(ampel_1)
Die beschreibende Statistik in summary(ampel_1) bestätigt, dass alles soweit geklappt hat. Ich bin aber ein visueller Mensch, ich will das als Plot sehen:

Code: Alles auswählen

plot(ampel_1$Car_Road_sRoad, type = "l", xlab = "Zeile", ylim = c(190, 900))
lines(ampel_1$Traffic_T00_sRoad, type = "l", xlab = "Zeile", col ="red")
legend("topleft", col = c("black", "red"), lty = c(1, 1), legend = c("Proband", "Auto erste Ampel"))
Es spricht in R gar nichts dagegen, beliebig viele Tabellen gleichzeitig in einer Sitzung zu benutzen, solange sie einen eindeutigen Namen haben. Du hast also jetzt mit dem Namen fasi weiter Zugriff auf den Ausgangsdatensatz und unter dem Namen ampel_1 Zugriff auf den Datensatz um die erste Ampel herum und es spricht nichts dagegen, auch ampel_2, ampel_3 und so weiter in der gleichen Sitzung zu erzeugen und zu verarbeiten.

So, im nächsten Schritt soll dem "roten" Auto eine Konstante hinzuaddiert werden. Welche Konstante? Ich mach es einfach mal mit 435 vor:

Code: Alles auswählen

ampel_1$Traffic_T00_sRoad <- ampel_1$Traffic_T00_sRoad + 435
Ist das wirklich so einfach? Wir prüfen das nochmal mit summary und mit einem Plot:

Code: Alles auswählen

plot(ampel_1$Car_Road_sRoad, type = "l", xlab = "Zeile", ylim = c(700, 900))
lines(ampel_1$Traffic_T00_sRoad, type = "l", xlab = "Zeile", col ="red")
legend("topleft", col = c("black", "red"), lty = c(1, 1), legend = c("Proband", "Auto erste Ampel"))

summary(ampel_1)
Was steht als nächstes auf dem Programm?
3. Pro Ampelabschnitt eine oder mehrere abhängige Variablen berechnet (z.B. Geschwindigkeit: GeschwindigkeitFahrzeug1 – GeschwindigkeitFahrzeug2,3,4,5,6) zwischen zwei oder mehreren unabhängigen Variablen welche sich pro Ampelabschnitt unterscheiden (da immer ein anderes simuliertes Fahrzeug pro neuen Ampelabschnitt folgt)
Ich nehme an, da brauchen wir jetzt ein paar Spalten mehr, um mit den anderen Spalten rechnen zu können?

LG,
Bernhard

Re: Fahrsimulatordatenauswertung

Verfasst: Fr Apr 09, 2021 5:05 pm
von Studentpsych
Hallo Bernhard,
danke für deine schnelle Antwort. Ich bin echt beeindruckt, wie gut du mein Experiment von der knappen Beschreibung verstehst und direkt in R umsetzen kannst. Ich habe jeden deiner Befehle ausgeführt und versucht nachzuvollziehen. Da ich auch ein visueller Mensch bin gefällt mir die Idee, sich das Ganze als Plot anzeigen zu lassen, um eine nachvollziehbare Übersicht zu bekommen. Was ich allerdings noch nicht verstehe, wie kannst du durch die folgende Funktion so einfach erkennen, dass sich in Zeile 1417 ein Fehler eingeschlichen hat?

Code: Alles auswählen

fasi <- read.table("daten.kurz.csv",
                   sep = ";", dec = ".", header = TRUE)
Dass sich der Fehler eingeschlichen hat, liegt bestimmt (wie du schon vermutet hast) daran, dass ich die Datei zusammengeschustert habe, sodass sie nicht mehr auf eine einzelne Versuchsperson zurückzuführen ist.
Wow, wir scheinen bis jetzt schon ziemlich weit gekommen zu sein. Genau der nächste Schritt wäre, den Abstand (zwischen den beiden Variablen) den wir schon durch den Plot erzeugt haben, numerisch als Funktion zu berechnen. Dabei könnte man in Tabelle Ampel1 den Wert Car_Road_sRoad von Trafic_T00_sRoad abziehen und in eine neue Tabelle schreiben?
Genau, für die weiteren abhängigen Variablen habe ich eine neue CSV zusammengeschustert (bin bei der Datenreduktion wieder so vorgegangen wie du es mir gezeigt hast, die Datei ist im Anhang zu finden). Car_v gibt die Geschwindigkeit von Fahrzeug1 an, während Traffic_T00_LongVel für die Geschwindigkeit von Fahrzeug2 steht. Hierbei sind die Geschwindigkeitsdifferenz Traffic_T00_LongVel - Car_v und die Time-To-Collision (Zeit bis Fahrzeug1, Fahrzeug2 auffahren würde) interessant. Die Time-To-Collision ergibt sich aus dem Abstand geteilt durch die Geschwindigkeitsdifferenz. Letztlich interessiert uns bei diesen Variablen der Minimalwert.

Lg,
Robin

Re: Fahrsimulatordatenauswertung

Verfasst: Fr Apr 09, 2021 7:58 pm
von bigben
Hallo Robin,
Studentpsych hat geschrieben: Fr Apr 09, 2021 5:05 pmdanke für deine schnelle Antwort. Ich bin echt beeindruckt, wie gut du mein Experiment von der knappen Beschreibung verstehst und direkt in R umsetzen kannst.
Ich glaube, den Teil hast Du einfach gut beschrieben.
Was ich allerdings noch nicht verstehe, wie kannst du durch die folgende Funktion so einfach erkennen, dass sich in Zeile 1417 ein Fehler eingeschlichen hat?
Kann ich nicht. Ich habe die Problemanalyse weggelassen, um hier nicht unnötig vom Thema abzuschweifen. Ich habe im str() Output gesehen, dass R die erste Zeile als Zeichenkette erkannt hat und da war klar dass irgendwo was stehen muss, was für R keine Zahl ist. Der Rest war dann so schwer nicht, aber das führt vielleicht zuweit vom Thema. Können wir mal in einem anderen Thread machen.

Jetzt wenden wir uns erst Deinem neuen Datensatz zu, und bereiten uns die Daten vor:

Code: Alles auswählen

fasi <- read.table("http://forum.r-statistik.de/download/file.php?id=1442",
                   sep = ";", dec = ".", header = TRUE)
str(fasi)

ampel_1 <- subset(fasi, Car_Road_sRoad > 700 & Car_Road_sRoad < 900)
summary(ampel_1)
Wow, wir scheinen bis jetzt schon ziemlich weit gekommen zu sein. Genau der nächste Schritt wäre, den Abstand (zwischen den beiden Variablen) den wir schon durch den Plot erzeugt haben, numerisch als Funktion zu berechnen. Dabei könnte man in Tabelle Ampel1 den Wert Car_Road_sRoad von Trafic_T00_sRoad abziehen und in eine neue Tabelle schreiben?
Mein Vorschlag wäre, das nicht in eine neue Tabelle, sondern in eine neue Spalte der alten Tabelle zu schreiben. R macht uns das wirklich leicht:

Code: Alles auswählen

ampel_1$distance <- ampel_1$Traffic_T00_sRoad - ampel_1$Car_Road_sRoad

summary(ampel_1)
plot(ampel_1$distance, type = "l", main = "Abstand über die Zeit")
und schon haben wir eine Spalte mehr in unserem Dataframe.
Genau, für die weiteren abhängigen Variablen habe ich eine neue CSV zusammengeschustert (bin bei der Datenreduktion wieder so vorgegangen wie du es mir gezeigt hast, die Datei ist im Anhang zu finden.


Genau deshalb habe ich Dich vorher gefragt, ob Du selbst unterwegs R lernen möchtest. Das bedeutest, dass Du solche Übertragungsarbeit selbst machst. :)
Car_v gibt die Geschwindigkeit von Fahrzeug1 an, während Traffic_T00_LongVel für die Geschwindigkeit von Fahrzeug2 steht. Hierbei sind die Geschwindigkeitsdifferenz Traffic_T00_LongVel - Car_v ...
Das ist das gleiche in grün:

Code: Alles auswählen

ampel_1$delta_v <- ampel_1$Traffic_T00_LongVel - ampel_1$Car_v
(summary und plot überlasse ich Dir ;) )
Die Time-To-Collision ergibt sich aus dem Abstand geteilt durch die Geschwindigkeitsdifferenz.
Das kannst Du Dir inzwischen wahrscheinlich denken:

Code: Alles auswählen

ampel_1$ttc <- ampel_1$distance / ampel_1$delta_v
Letztlich interessiert uns bei diesen Variablen der Minimalwert.
Haben wir nicht zwischendurch irgendwo vergessen, der Position des anderen Autos eine Konstante hinzuzuaddieren? Das würde ja die distance und damit die time-to-collision verändern! Achso ja, das minimum der ttc:

Code: Alles auswählen

print(min(ampel_1$ttc))
Und hier noch was für's Auge, denn wir wollen ja die Plausibilitätsprüfung nicht vernachlässigen. Bitte das Grafikfenster groß genug aufziehen:

Code: Alles auswählen

par(mfrow = c(4,1), mar = c(1.7,4,1,1)) # wir wollen vier Grafiken übereinander zeichnen
plot(ampel_1$Car_Road_sRoad, ylab = "Position [m]", type = "l", ylim = c(200,900))
lines(ampel_1$Traffic_T00_sRoad, col = "red")
plot(ampel_1$distance, type="l", ylab = "distance")
plot(ampel_1$Car_v, ylab ="Velocity", type ="l")
lines(ampel_1$Traffic_T00_LongVel, col ="red")
plot(ampel_1$ttc, ylab = "Time to collision", type = "l")


Die time to collision wird halt kurzfristig extrem , wenn das andere Auto langsamer wird und die Relativgeschwindigkeit kurzfristig Null wird, damit der Nenner der time-to-collision Null wird. Da musst Du jetzt drüber nachdenken.

So, nun schau mal, wie weit Du damit jetzt selbst kommst und dann melde Dich, wenn Du auf Probleme stößt.

LG,
Bernhard