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

0 votes

Ich möchte blockrandomisieren, und genauso viele Teilnehmer mit einem Summenscore von <34 wie >34 in die KG und die EG aufnehmen.

Hierfür habe ich bislang folgenden PHP-Code erstellt, aber er scheint nicht zu funktionieren, bzw. macht er nicht das, was ich gern möchte. Ich glaube, dass mir noch ein wesentlicher Bestandteil fehlt oder ich nicht zwei "if" gleichzeitig eingeben kann. Wie lautet bitte der richtige PHP-Code? Wie kann ich das machen? Brauche ich überhaupt 2 Zufallsgeneratoren?

$sum01 = valueSum('BQ01');
$sum02 = valueSum('BQ02');
$index = $sum01 + $sum02;
put('IV02_01', $index);

if (value('IV02_01') > 34) {
  question('ZG04');  // Personen mit hoher Zufriedenheit
} else {
  question('ZG03');  // Personen mit niedriger Zufriedenheit
}
 
// Stimulus anzeigen
$z = value('IV02_01');
if ($z == 1) {
  goToPage('EG');
} elseif ($z == 2) {
  goToPage('KG');
}

$z = value('ZG03');
if ($z == 1) {
  goToPage('EG');
} elseif ($z == 2) {
  goToPage('KG');
}
in SoSci Survey (dt.) by s140920 (160 points)
edited by SoSci Survey

1 Answer

0 votes

Brauche ich überhaupt 2 Zufallsgeneratoren?

Ja ... oder 2 Urnen.

Und vermutlich wäre es hilfreich, die IF-Filter einfach zu verschachteln (und beim ersten Zufallsgenerator die korrekte Variable abzufragen):

$sum01 = valueSum('BQ01');
$sum02 = valueSum('BQ02');
$index = $sum01 + $sum02;
put('IV02_01', $index);

if (value('IV02_01') > 34) {
  question('ZG04');  // Personen mit hoher Zufriedenheit
  $z = value('ZG04');
  if ($z == 1) {
    goToPage('EG');
  } elseif ($z == 2) {
    goToPage('KG');
  }
} else {
  question('ZG03');  // Personen mit niedriger Zufriedenheit
  $z = value('ZG03');
  if ($z == 1) {
    goToPage('EG');
  } elseif ($z == 2) {
    goToPage('KG');
  }
}

Generell rate ich bei der Randomisierung von der Verwendung von goToPage() ab. Es ist komplizierter und fehleranfälliger als den Stimulus direkt mittels text() anzuzeigen. Und der Fortschrittsbalken zeigt in den Experimentalgruppen u.U. einen anderen Wert.

by SoSci Survey (130k points)
Ich habe es nun zu setNextPage geändert, ist das besser als goToPage?

Selbst nachdem ich dies gemacht habe, bezieht sich der Zufallsgenerator scheinbar nicht auf die Variablen BQ01 und BQ02, da, auch wenn ich den Fragebogen beim Zufallsgenerator starte, ohne vorher die Variablen ausgefüllt zu haben, ich zufällig zu EG und KG geleitet werde. Normalerweise müsste in diesem Fall doch eine Fehlermeldung erscheinen, die sagt, dass ZG03 und ZG04 noch nicht zugeordnet werden konnte, oder nicht? Er kann ja nicht zuordnen (oder sollte es nicht können), ohne dass die Variablen BQ01 und BQ02 einen Summenwert ergeben konnten?
Was ist also falsch an dem Code?
> Ich habe es nun zu setNextPage geändert, ist das besser als goToPage?

Ja - allerdings nur leidlich :)

> Selbst nachdem ich dies gemacht habe, bezieht sich der Zufallsgenerator scheinbar nicht auf die Variablen BQ01 und BQ02

Dann fügen Sie unter dem $sum= ... doch mal folgende Zeilen ein:

debug($sum01);
debug($sum02);
debug($index);

Dann sollten Sie klarer sehen, warum es nicht klappt.

> Er kann ja nicht zuordnen (oder sollte es nicht können), ohne dass die Variablen BQ01 und BQ02 einen Summenwert ergeben konnten?

Nun, irgendwas haben Sie der Variable $sum ja zugeordnet... Also irgend etwas steht dort drin. Deshalb auch keine Fehlermeldung.
Ich glaube, nun funktioniert es einigermaßen, mit setNextPage .
Allerding funktioniert es nur, wenn ich die KG nehme, da dann die Seiten der EG übersprungen werden. Wenn Teilnehmer in die EG kommen, werden ihnen auch die Seiten der KG angezeigt, was ja nicht sein soll.
Wie löse ich diese Problem?
Verwenden Sie am besten setPageOrder(), wenn es um mehrere Seiten geht. Dann können Sie einfach angeben, wo es nach den "Spezial-Seiten" weitergehen soll. Und vor allem bekommen Sie auch keine Konfundierung durch den Fortschrittsbalken.

Für setNextPage() müssten Sie - genauso wie bei goToPage() - mit einem weiteren setNextPage() an geeigneter Stelle dafür sorgen, dass der jeweils andere Teil dann übersprungen wird. Und Sie haben eben weiterhin das Problem mit dem Fortschrittsbalken.
Ich habe nun alles so gemacht, wie Sie gesagt haben, und zumindest funktioniert es nun, dass die Teilnehmer nur entweder die Seiten der EG oder die Seiten der KG angezeigt bekommen.
Allerdings sehe ich bei den "erhobenen Daten" nun, dass in den Zufallsgeneratoren immer in beiden eine Losung stattfindet. Das heißt, in den erhobenen Daten steht im Zufallsgenerator für Unzufriedene bspw., dass der Teilnehmer in die KG gepackt wurde, aber es steht dann gleichzeitig bei dem Zufallsgenerator für Zufriedene, dass er in die EG gepackt wurde. Im Endeffekt handelt es sich bei diesem Beispiel um einen "Unzufriedenen" Teilnehmer, der tatsächlich nur KG angezeigt bekommen hat.
Ist es richtig, dass das in den erhobenen Daten so da steht? Und wie kann ich hinterher bei 100 Teilnehmern noch wissen, wer in welcher Gruppe war, wenn in beiden Randomisierungsvariablen jeweils etwas gezogen wurde?
> Allerdings sehe ich bei den "erhobenen Daten" nun, dass in den Zufallsgeneratoren immer in beiden eine Losung stattfindet.

Haben Sie die Zufallsgenerator-Fragen vielleicht noch auf die Fragebogen-Seite gezogen? Wenn ja, dann entfernen Sie sie bitte wieder. Das Hineinziehen und der Aufruf mittels question() sind äquivalent.

Warnung: Wenn aus beiden Zufallsgeneratoren gezogen wird, dann sind Ihre EG und KG am Ende nicht gleich groß!

> Und wie kann ich hinterher bei 100 Teilnehmern noch wissen, wer in welcher Gruppe war

Das sollten Sie unabhängig davon mittels put() in einer internen Variable abspeichern. Also einfach ein put('IV01_02', 1); bzw put('IV01_02', 2); in die beiden Filter-Zweige.
...