Random Zuordnung zu 2 Gruppen

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
gming11
Beiträge: 27
Registriert: Do Feb 25, 2021 10:37 am

Random Zuordnung zu 2 Gruppen

Beitrag von gming11 »

Hallo zusammen ich habe folgende Frage:

Ich habe einen longitudinalen Datensatz mit 100 Probanden aus einem Experiment und 2 Zeitperioden mit jeweils 2Messzeitpunkten (leider auch mit Missing Data bzw. manche Probanden absolvierten nur eine Periode). Dabei ändert sich die Gruppenzugehörigkeit beim Periodenwechsel( vorher Gruppe 1, dann Gruppe 2 oder umgekehrt)

Der Datensatz würde in etwa so für die ersten drei Probanden aussehen:

Code: Alles auswählen

namen <- c("A", "A", "A", "A", "B", "B" , "B", "B", "C", "C")
Zeit <- c("t1", "t2", "t3", "t4", "t1", "t2", "t3", "t4", "t1", "t2") #hier fehlt z.b der Messzeitpunkt t3 und t4 für Proband C ergo die zweite Periode
Gruppe <- c(1,1,2,2,2,2,1,1,1,1) #ergo t1&t2 sind eine Periode und t3&t4 sind eine Periode
Dataframe <- data.frame(Proband= namen, Zeitpunkt= Zeit, Gruppe = Gruppe)
Dataframe
Nun sollte die Variable Gruppe entfernt bzw. überschrieben werden und zufällig sollen die Probanden eine Gruppe per Periode erhalten. Ein Outcome wäre z.b:

Code: Alles auswählen

GruppeRandom <- c(1,1,2,2,1,1,2,2,2,2) 
Wie kann ich dies programmtechnisch umsetzen, dass hier die Zeitpunkte t1&t2 und t3&t4 zusammengehören und wie kann dann eine zufällige Zuordnung stattfinden, sodass jeder Proband sowohl Gruppe 1 als auch Gruppe 2 erhält, nur in zufälliger Reihenfolge? Und wie kann ich mit missing data umgehen, wenn dabei missing data nur periodenweise vorkommt, ergo wie im skizzierten Beispiel oben dann der Proband nur eine Periode absolviert hat und auch diese Periode im Anschluss zufällig einer Gruppe zugeordnet werden sollte.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Random Zuordnung zu 2 Gruppen

Beitrag von bigben »

Hallo gming11,

schau mal, ob das hier das gewünschte leistet:

Code: Alles auswählen

namen <- c("A", "A", "A", "A", "B", "B" , "B", "B", "C", "C")
Zeit <- c("t1", "t2", "t3", "t4", "t1", "t2", "t3", "t4", "t1", "t2") #hier fehlt z.b der Messzeitpunkt t3 und t4 für Proband C ergo die zweite Periode
Gruppe <- c(1,1,2,2,2,2,1,1,1,1) #ergo t1&t2 sind eine Periode und t3&t4 sind eine Periode
Dataframe <- data.frame(Proband= namen, Zeitpunkt= Zeit, Gruppe = Gruppe)
Dataframe

namen <- c("A", "A", "A", "A", "B", "B" , "B", "B", "C", "C")
Zeit <- c("t1", "t2", "t3", "t4", "t1", "t2", "t3", "t4", "t1", "t2") #hier fehlt z.b der Messzeitpunkt t3 und t4 für Proband C ergo die zweite Periode
Gruppe <- c(1,1,2,2,2,2,1,1,1,1) #ergo t1&t2 sind eine Periode und t3&t4 sind eine Periode
Dataframe <- data.frame(Proband= namen, Zeitpunkt= Zeit, Gruppe = Gruppe)
Dataframe

Dataframe$Periode <- ifelse(Dataframe$Zeitpunkt %in% c("t1", "t2"), yes = 1L, no = 2L) # Periode explizit machen
Dataframe$GruppeNeu <- ave(Dataframe$Periode, Dataframe$Proband, 
                           FUN = function(periode){
                             A <- sample(1L:2L, 1)  # Zufallsentscheidung pro Proband, ob vertauscht wird oder nicht
                             B <- 3L - A
                             return(ifelse(periode == 1L, A, B))
                           })
Dataframe
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
gming11
Beiträge: 27
Registriert: Do Feb 25, 2021 10:37 am

Re: Random Zuordnung zu 2 Gruppen

Beitrag von gming11 »

Hallo Bernhard,

super danke für die schnelle Antwort!

Danke für den Code, es funktioniert ! Genau das wollte ich. Ganz klar ist mir die ave Funktion nicht, ich dachte dies macht etwas wie „averaging“ ?

Liebe Grüße
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Random Zuordnung zu 2 Gruppen

Beitrag von bigben »

Erstmal freut es mich, wenn es funktioniert, dann freut es mich aber auch, dass Du versuchst, aus dem Code was zu lernen.
Die Funktion ave hat einen blöden Namen. Ja, man kann damit den Durchschnitt pro Person berechnen, aber eben auch sehr viel mehr.

Sie betrachtet hier die Spalte Periode aber nach Probanden getrennt. Pro Proband wird die übergebene Funktion mit den Periodewerten aufgerufen. ave ist sehr oft sehr hilfreich und es lohnt sich, etwas Zeit in sie zu investieren.

Frag gerne nach.

LG, Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Random Zuordnung zu 2 Gruppen

Beitrag von bigben »

Hallo!

gming hat mich in einer PN nochmal gefragt, was hier wie randomisiert wird.

Der Code oben unterteil zunächst den Datensatz nach Probanden und betrachtet dann jeden Proband einzeln. Pro Proband wird einmal gewürfelt, ob für diesen Proband die bei periode == 1 als neue Gruppe eine 1 oder eine 2 zurückgegeben wird, dementsprechend dann für den anderen Periodenwert der andere neue Gruppenwert.

Ich hoffe, so war es verständlich. Weitere Fragen gerne als öffentliche Diskussion.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten