mutate-Befehl

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Antworten
Tom
Beiträge: 20
Registriert: Mi Nov 13, 2019 4:21 pm

mutate-Befehl

Beitrag von Tom »

Hallo liebe Community,

ich habe ein Problem mit der Anwendung des Mutate-Befehls. Und zwar würde ich in meiner Tabelle gerne eine neue Variable erstellen.

Mein Code hierzu lautet: Tabelle %>% mutate ( hits = ATRG == 1 & RBa == 1)

Ich möchte also, dass die neue Variable hits die Bedingung enthält, dass die bereits bestehenden Variablen ATRG und RBa beide 1 ergeben.
Das Ergebnis dieses Codes wird mir dann auch in der Konsole für die ersten 55 Fälle mit "False" bzw. "TRUE" angezeigt, allerdings erscheint die neue Variable nicht in meiner Tabelle. Danach müsste ich die neue Variable hits dann nämlich noch z-standardisieren und das wollte ich dann mit dem scale-Befehl machen. Das Vorgehen kommt aus der Signalentdeckungstheorie und mein Ziel ist es letztlich, durch zwei neue Variablen, nämlich die "hits" und die "false alarm" die Sensititvität (d') zu ermitteln.
Aber zunächst einmal müsste dann erst einmal funktionieren, dass die Variable hits überhaupt in meiner Tabelle auftaucht und ich dann damit weiter arbeiten kann.

Weiß jemand eine Lösung? Danke Euch im Voraus für die Unterstützung.

LG Tom
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: mutate-Befehl

Beitrag von jogo »

Hallo Tom,

wie sieht es aus mit:

Code: Alles auswählen

TabelleNeu <- Tabelle %>% mutate ( hits = ATRG == 1 & RBa == 1)
Gruß, Jörg
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: mutate-Befehl

Beitrag von bigben »

Da wir im dplyr-Land sind und Pipes benutzen, böte sich alternativ sowas an:

Code: Alles auswählen

library(magrittr)
library(dplyr)

tabelle <- data.frame(ATRG = sample(0:1, 20, TRUE), RBa = sample(0:1, 20, TRUE))
head(tabelle)


tabelle %<>% mutate ( hits = ATRG == 1 & RBa == 1)
print(tabelle)
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: mutate-Befehl

Beitrag von jogo »

oder

Code: Alles auswählen

Tabelle %>% mutate ( hits = ATRG == 1 & RBa == 1) -> TabelleNeu ## bzw.
Tabelle %>% mutate ( hits = ATRG == 1 & RBa == 1) -> Tabelle
das könnte m.E. auch noch der pipe_Philosophie entsprechen.

Gruß, Jörg
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: mutate-Befehl

Beitrag von bigben »

Aua. Ja, Information fließt jetzt immer von links nach rechts. Vorbei die guten alten Zeiten, als wir alles in Klammern geschachtelt und übersichtlich geschrieben haben

Code: Alles auswählen

`<-`(tabelle, `%>%`(tabelle, mutate(hits = ATRG == 1 & RBa == 1)))
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Tom
Beiträge: 20
Registriert: Mi Nov 13, 2019 4:21 pm

Re: mutate-Befehl

Beitrag von Tom »

Hallo Jörg, hallo Bernhard,

vielen Dank schonmal für Eure Hilfe, das hat jetzt prima funktioniert. Jetzt werde ich noch genauso die zweite neue Variable ("false alarm") erstellen und dann klappt das hoffentlich auch mit der z-Standardisierung der beiden Variablen und mit der Berechnung der Sensitivität (d').

Falls sich jemand mit der Signalentdeckungstheorie auskennt, darf er sich sehr gerne melden ;) Mein Ziel soll es letztlich sein, die Sensitivität für verschiedene Schwierigkeitsstufen (sogenannte Loads) zu ermitteln und dann zu schauen, inwieweit sich diese über alle Versuchspersonen gerechnet signifikant voneinander unterscheiden. Dafür werde ich dann wohl eine Einfaktorielle Anova mit Messwiederholung verwenden, da es in dem Experiment für jede Versuchsperson dieselben (drei verschiedenen) Schwierigkeitsstufen gibt und der Ablauf des Experiments für alle identisch ist. Würdet ihr statistisch auch so vorgehen, oder habt ihr andere Ansätze? Bin dankbar für jeden Hinweis :)

LG Tom
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: mutate-Befehl

Beitrag von bigben »

Hallo Tom,

erklär doch mal von vorne was Du machen willst, welche Daten vorliegen, wie sie in R vorliegen. Sich so nach und nach alles zusammenreimen macht keinen Spaß.

LG, Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: mutate-Befehl

Beitrag von EDi »

bigben hat geschrieben: Mo Jan 25, 2021 1:04 pm Aua. Ja, Information fließt jetzt immer von links nach rechts. Vorbei die guten alten Zeiten, als wir alles in Klammern geschachtelt und übersichtlich geschrieben haben

Code: Alles auswählen

`<-`(tabelle, `%>%`(tabelle, mutate(hits = ATRG == 1 & RBa == 1)))
Ich finde der "->" Operator produziert schrecklich unlesbaren Code :(

BigBen, das Paket hier dürfte auch was für dich sein: https://github.com/dirkschumacher/llr
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Tom
Beiträge: 20
Registriert: Mi Nov 13, 2019 4:21 pm

Re: mutate-Befehl

Beitrag von Tom »

bigben hat geschrieben: Mo Jan 25, 2021 4:32 pm Hallo Tom,

erklär doch mal von vorne was Du machen willst, welche Daten vorliegen, wie sie in R vorliegen. Sich so nach und nach alles zusammenreimen macht keinen Spaß.

LG, Bernhard

Hallo Bernhard, Jörg und EDi,

das mache ich sehr gerne. Ich habe ein neurowissenschaftliches Wahrnehmungsexperiment durchgeführt, bei dem untersucht wird, inwieweit Probanden noch einen Ton wahrnehmen können, wenn die visuelle Wahrnehmung durch ansteigenden Schwierigkeitsgrad der zu bewältigenden visuellen Aufgaben immer mehr gefordert wird. Das Experiment wird dann ausgewertet, indem man sich anschaut, ob die unterschiedlichen Schwierigkeitsgrade bei der visuellen Wahrnehmung (Load 1-3) einen Einfluss auf die auditive Erkennungsleistung haben, also ob der Ton bei dem höchsten Schwierigkeitsgrad (Load 3) noch wahrgenommen werden konnte oder es zwischen den jeweiligen Schwierigkeitsstufen signifikante Unterschiede im Hinblick auf die auditive Wahrnehmungsleistung gibt.
Somit werte ich dann sowohl visuelle Parameter (Reaktionszeit und Fehlerrate), als auch auditive Variablen aus, nämlich die Hits (h) und Falscher-Alarm-Rate (fa) und die Sensitivität (d') und das Kriterium (das ist die Antworttendenz c). Diese Variablen entstammen der Signalentdeckungstheorie und die Sensitivität ergibt sich dann bspw. aus der Subtraktion von Hits und Falscher-Alarm-Rate. Diese müssen allerdings z-standardisiert sein, da die Formel hierzu lautet:

d' = z(Hits) - z(Falscher Alarm-Rate)

Das Kriterium (c) lässt sich ebenfalls berechnen und zwar mit der Formel:

c = -0.5 * z(Falscher Alarm) + z(Hits).

Vom Ablauf her ist das Experiment für alle Probanden dasselbe und ich möchte nun schauen, ob die verschiedenen Loads einen signifikanten Effekt auf die auditive Wahrnehmungsleistung haben, also ob ein Ton auch noch bei sehr schweren visuellen Aufgaben (das wäre dann Load 3) gehört werden kann.

Dazu habe ich dann zuerst die beiden neuen Variablen bestimmt, nämlich die Hits- und die Falscher-Alarm-Rate. Hits ergibt sich daraus, dass ein Proband korrekt durch einen Tastendruck auf der Tastatur erkannt hat, dass es einen Ton gab. Dann ist das auditive Target (Variable „ATRG“) gleich dem Response-Button auditiv (Variable „RBa“) und zwar müssen beide 1 sein.
Somit habe ich die neue Variable „Hits“ mit dem mutate-Befehl unter der Bedingung erstellt, dass ATRG und RBa beide 1 ergeben.

Die Falscher-Alarm-Rate ergibt sich dann daraus, dass es kein auditives Target gab, aber der Proband dennoch geglaubt hat, einen Ton zu hören. Somit ist dann ATRG = 0 für nicht vorhanden und RBa = 1, weil dennoch eine Antwort gegeben wurde. Damit habe ich dann die neue Variable fa (steht für falscher-Alarm-Rate) bestimmt.


Meine weiteren Auswertungsschritte sind jetzt wie folgt:

1) Die Sensitivität und das Kriterium ermitteln (dazu habe ich mir jetzt gedacht, dass ich am besten zuerst die Variablen hits und fa mit dem scale-Befehl z-standardisiere und daraus ergäben sich dann die neuen Variablen Zhits und Zfa. Dann kann ich diese in die beiden obigen Formeln packen und somit d' und c ausrechnen

2) Nun möchte ich schauen, inwieweit sich d' zwischen den verschiedenen Load-Stufen voneinander unterscheidet, also ob es nur einen Unterschied zwischen leichten und schwierigen Aufgaben (Load 1 und Load 3) oder auch zwischen mittelschweren und schweren Aufgaben (Load 2 und Load 3) gibt. Da weiß ich noch nicht genau, welches statistische Verfahren sich hierzu am besten eignet.

Ich hatte an eine einfaktorielle Anova mit Messwiederholung gedacht - passt das für Euch auch, oder habt ihr andere Ansätze?

Ich hoffe, es ist jetzt klarer geworden, wie mein Experiment und mein Auswertungsplan aussehen.

LG und danke für Eure Hilfe
Tom
Antworten