0 votes
in SoSci Survey (dt.) by s091065 (210 points)
edited by SoSci Survey

Hallo,

vielleicht kann mir hier jemand mit meinem Problem helfen.
Ich habe ein Doppelaufgaben-Design, für welches ich Folgendes versuche zu programmieren:
- Es gibt 4 Fragen (jede hat 7 Items), alle 4 Fragen müssen zunächst zufällig durchmischt werden (Frage A,B,C,D)
- Nun brauche zunächst eine feste Zuweisung, dass auf ein Item aus Frage A immer ein Item aus Frage B folgt und auf Frage C immer ein Item der Frage D
- Wenn diese feste Zuweisung zu "Paaren" erfolgt ist, müssten diese fixen Paare wiederum randomisiert werden. So, dass eine Darbietung wie z.B. : AB,AB,CD,CD,AB,CD erfolgt. (Ein Item ist ein Stimulus, auf welchen reagiert werden muss; also müsste ein Item pro Seite angezeigt werden).

Nun habe ich bisher leider keinerlei Vorerfahrung und habe mir versucht was zusammen zu basteln mit Hilfe des Forums und der allgemeinen Anleitung, aber ich fürchte, das was ich bisher habe stimmt sich in so manchem nicht...Ich habe einiges ausprobiert, aber so richtig vielversprechend war noch nichts...
Das ist einer meiner bisherigen Versuche (TE01-TE04 sind die Fragen A,B,C,D):

if (!isset($items)) {
$itemA= getItems ('TE01','all');
$itemB= getItems ('TE02','all');
$itemC= getItems ('TE03','all');
$itemD= getItems ('TE04','all');
shuffle ($itemA);
shuffle ($itemB);
shuffle ($itemC);
shuffle ($itemD);
$items=array();
  for ($i=0; $i<count(8); $i++) {
    $items[] = array($itemA[$i], $itemB[$i]);
    $items[] = array($itemC[$i], $itemD[$i]);
}
shuffle ($items);

registerVariable($items);

}
$i = loopPage(count($items));
question($items[$i]);

Falls mir da jemand irgendwie weiterhelfen kann, wäre ich sehr dankbar.

Beste Grüße!

1 Answer

+1 vote
by SoSci Survey (328k points)
selected by s091065
 
Best answer

Nun habe ich bisher leider keinerlei Vorerfahrung

Dafür sind Sie aber schon ziemlich weit gekommen. Respekt!

Als Ergebnis Ihrer Funktion bekommen Sie ein geschachteltes Array, und zwar aus Paaren von jeweils AB und CD. Diese Päärchen mischen Sie dann. Jetzt fehlen nur noch zwei Kleinigkeiten:

  1. Sie müssen (wenn Sie die Items einzeln zeigen möchten) das verschachtelte Array wieder "flach" machen, damit Sie eine Abfolge von Items, nicht von Paaren haben.

  2. Sie müssen in der Liste noch vermerken, um welche Frage es geht, denn getItems() liefert nur die Nummer des Items, ohne Frage. Die Information A, B, C oder D geht im Moment noch verloren.

Um es noch ein wenig komplizierter zu machen (nein, das ist tatsächlich der einfachste Weg) legen ich also als erstes noch eine Schachtel-Ebene in den Paaren an. Und zwar speichere ich zur Item-Nummer noch die Frage:

$paare=array();
  for ($i=0; $i<count(8); $i++) {
    $paare[] = array(array('TE01', $itemA[$i]), array('TE02', $itemB[$i]));
    $paare[] = array(array('TE03', $itemC[$i]), array('TE04', $itemD[$i]));
}

Den Variablenname $items habe ich hier durch $paare ersetzt. Und nach dem letzten shuffle() müssen wir die Paare noch aufteilen:

shuffle ($paare);
$items = array();
foreach ($paare as $paar) {
  $items[] = $paar[0];
  $items[] = $paar[1];
}
registerVariable($items);

Am Ende müssen Sie in question() neben der Frage-ID noch die Item-ID angeben. Wohlgemerkt: In $items sind lauter Arrays abgelegt, die jeweils eine Frage-Kennung auf Index 0 und eine Item-Nummer auf Index 1 enthalten:

question($items[$i][0], $items[$i][1]);

Hier nochmal alles zusammen und vorbehaltlich eventueller Flüchtigkeitsfehler.

if (!isset($items)) {
  $itemA = getItems('TE01','all');
  $itemB = getItems('TE02','all');
  $itemC = getItems('TE03','all');
  $itemD = getItems('TE04','all');
  shuffle($itemA);
  shuffle($itemB);
  shuffle($itemC);
  shuffle($itemD);
  $paare = array();
  for ($i=0; $i<count(8); $i++) {
    $paare[] = array(array('TE01', $itemA[$i]), array('TE02', $itemB[$i]));
    $paare[] = array(array('TE03', $itemC[$i]), array('TE04', $itemD[$i]));
  }
  shuffle($paare);

  $items = array();
  foreach ($paare as $paar) {
    $items[] = $paar[0];
    $items[] = $paar[1];
  }
  registerVariable($items);

}
$i = loopPage(count($items));
question($items[$i][0], $items[$i][1]);

Wenn Sie möchten, können Sie das shuffle($itemA) und shuffle($itemC) am Anfang noch weglassen - aber es stört auch nicht.

by s091065 (210 points)
Wow, super, vielen Dank für die schnelle und sicher hilfreiche Antwort! Nun bin ich gerade unterwegs, werde es aber heute später direkt ausprobieren und noch mal rückmelden ob alles geklappt hat!
by s091065 (210 points)
Also, das hat sehr gut funktioniert. Vielen Dank!

Nun stehe ich leider bei einem "Folgeproblem" etwas auf dem Schlauch :/
Da ich hier ja nun 4 Fragen mische, habe ich nun das Problem dass jedes einzelne Item innerhalb des Blocks als "erstes" und "letztes" Item der Frage behandelt wird, so dass nun immer nach jedem Item der eingetragene Text erscheint, der vor jedem ersten und letzten Item erscheinen soll.
Ich könnte nun ja einfach bei den einzelnen Fragen den Text vor und nach jedem Item austragen,beide Felder frei lassen und einfach die Instruktionen für jeden Block (der aus den zusammengeschmischten 4 Fragen besteht) auf eine eigene Seite im Fragebogen stellen...Aber da bin ich mir nun unsicher ob dann für kein Item innerhalb des Blocks die Reaktionszeit gemessen wird , da bei Fragen ohne Start-Text eine Warnung steht, dass keine RZ gemessen werden kann und in meinem Fall ja jedes Item wieder das "erste" zu sein scheint...Da bin ich nun leider etwas verwirrt wie ich das handhaben kann?
by SoSci Survey (328k points)
Von den Reaktionszeiten hatten Sie bisher nichts geschrieben. Es kann sein, dass das die Sache ein wenig verkompliziert.

Reaktionszeiten sauber messen kann man nur zwischen zwei Klicks. Denn Sie zeigen - mit dem aktuellen PHP-Code - alle Items auf getrennten Seiten. Und da brauchen Sie den ersten Klick quasi als Referenz für den zweiten.

Wenn Sie die Reaktionszeiten benötigen, müssen Sie alle Items in eine Frage packen und dann in der passenden Reihenfolge anzeigen. Das dann aber in einer neuen Frage...
by s091065 (210 points)
Ohja, das hatte ich vorher nicht erwähnt. Naja, ich kann das oben Erfragte aber zum Glück noch für andere Teile der Arbeit nutzen, war also nicht umsonst =)
Verstehe, zum Glück hatte ich genau das was Sie hier nun schreiben vorher schon mal erledigt und wollte es einfach mal probieren ob ich so nicht eine schönere Randomisierung reinbekommen kann. Dann nehme ich nun das, was ich schon hatte.
Ok, noch mal vielen Dank! Wirklich tolle Unterstützung hier!
by SoSci Survey (328k points)
Im Prinzip können Sie den Code von oben verwenden. Nur müssen Sie die Listen mit den Items ($itemA bis $itemD) einfach direkt als Nummern vorgeben, z.B. array(1,2,3,4,5), array(6,7,8,9,10) u.s.w - und statt Paaren reichen dann doch wieder die "einfachen" Werte. Auf das loopPage() können Sie ebenfalls verzichten. Wenn Sie die "schönere" Randomisierung haben möchten, ist das also kein Problem :)
by s091065 (210 points)
Ah! Ok, super, dann werde ich das mal ausprobieren! Danke für den Tipp! =)

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...