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

Vielen vielen Dank für die Antwort, das war schonmal super hilfreich! Das mit dem rotieren hat geklappt, jedoch kommt bei mir eine Fehlermeldung wenn ich das loopPage mit dem vorgeschlagenen "for" austausche und ich weiß nicht warum.

Mein Code schaut jetzt so aus:

if (!isset($blocks)) {
  $blocks = array(
    array('G105', 'G102', 'G101'),
    array('G106', 'G115', 'G103'),
    array('G107', 'G116', 'G111'),
    array('G108', 'G117', 'G112'),
    array('G109', 'G118', 'G113'),
    array('G110', 'G119', 'G114')
    );
 
  // Die Liste zufällig mischen
  shuffle($blocks);
    // Rotation für eine eventuelle Wiederholung der Seite zwischenspeichern
    registerVariable($blocks);
}

// Anzeigen der Blöcke
for ($i=0; $i<6; i++) {
// Frage anzeigen
    question($blocks[$i][0]);
    question($blocks[$i][1]);
    question($blocks[$i][2]);
}

Aber mir wird angezeigt, dass ich einen Befehl oder String nicht abgeschlossen habe. Der Fehler wird in Zeile 17(die geschweifte Klammer nach registerVariable und der Zeile mit den for Bedingungen angezeigt. Woran kann es liegen? Ich habe alle Klammern jetzt schon 3 mal überprüft.

Zu der Randomisierung hätte ich auch noch eine Frage: Ich habe momentan 4 Seiten:
G1 mit der rotierenden Abfrage der Gründe&Fragen dafür
G2 mit der rotierenden Abfrage der Gründe&Fragen dagegen
G3 + G31 mit der rotierenden Abfrage der Gründe&Fragen dafür&dagegen

Ich möchte, dass jeder Proband nur eine der drei Kategorien angezeigt bekommt. Ich habe bereits einen Zufallsgenerator (R001) angelegt mit:
1= G1
2= G2
3= G3-G31

Zunächst hatte ich diesen Code verwendet:
question('R001'); // Zettel ziehen
$pages = value('R001', 'label'); // Gezogene Seitenabfolge auslesen

Aber damit werden ja jedem Probanden alle drei Optionen angezeigt, nur halt in randomisierter Reihenfolge.
Muss ich mit "if" arbeiten, um nur jedem Probanden eine der Seiten zu zeigen?
Danach soll es für alle Probanden bei der Seite mit der Kennung "weiter" genau gleich weitergehen.

Oder kann ich es mit ihrem Code erreichen? Ich verstehe nicht so ganz was 'label' und i++ bedeutet...

$rubrik = value('RG01', 'label');
for ($i=0; $i<6; $i++) {
  // Fragen anzeigen
  question(id($rubrik, $blocks[$i][0]));
  question(id($rubrik, $blocks[$i][1]));
  question(id($rubrik, $blocks[$i][2]));
}

Aber auch wenn ich es so schreibe, werden bspw. erst rotiert alle Fragen aus G2 und dann aus G3 abgefragt:

$zahl = value('R001', 'label');
setPageOrder($zahl, 'weiter');

if ($zahl == 1) {
goToPage('G1');

} elseif ($zahl == 2) {
goToPage ('G2');

} elseif ($zahl == 3) {
goToPage ('G3');

}

Mir fehlt noch etwas, das sagt, dass jeder Proband wirklich nur eine der drei Bedingungen zugespielt bekommen soll.
Es wäre super super toll, wenn Sie mir da nochmal helfen könnte, da ich aus der Seite "Seiten rotieren" leider nicht schlau werde.

Dankeschön!

in SoSci Survey (dt.) by s126979 (140 points)
edited by SoSci Survey
>  jedoch kommt bei mir eine Fehlermeldung wenn ich das loopPage mit dem vorgeschlagenen "for" austausche und ich weiß nicht warum.

Bitte posten Sie Fehlermeldungen stts im Wortlaut, dann können wir dazu auch eine hilfreiche Antwort geben.

Und lassen Sie das goToPage() bitte weg. Das macht nur Ärger.

> Aber auch wenn ich es so schreibe, werden bspw. erst rotiert alle Fragen aus G2 und dann aus G3 abgefragt:

Für die Umsetzung, wie von mir empfohlen, benötigen Sie nur eine einzige (!) Seite im Fragebogen. Zumindest für die G1 bis G3-Fragen. Und auf diesen darf auch nur der PHP-Code stehen.

1 Answer

0 votes

Also ich habe jetzt alles auf eine Seite gepackt, dort befindet sich jetzt nur der Zufallsgenerator R001 und darunter der php Code. Muss ich die arrays für jede Fragengruppe einzeln bilden, wie hier in meinem Code? Ich habe jetzt hier im Grunde vier Mal den selben Code zum bilden und rotieren der Arrays geschrieben: für Rubrik G1, G2 und G3. G3 ist zwei geteilt, da hier die gemischten Gründe präsentiert werden und ich jeweils die positiven und negativen Gründe als Blöcke zusammen haben möchte, diese sollen dann aber jeweils rotieren, deswegen 2x3.
Das mit der Randomisierung klappt aber leider noch nicht. Muss ich dann mit $blocks $blocks1 und $blocks2 + $blocks3 arbeiten? Oder muss ich die Codes irgendwie zusammenführen?

In meinem Zufallsgenerator steht weiterhin 1= G1, 2= G2, 3= G3-G31
Ich habe den Code mal hiereingepackt, das Ziel ist wie Sie meinten ein einfaktorielles Design mit 3 Gruppen.

Vielen vielen Dank für die Hilfe!

if (!isset($blocks)) {
  $blocks = array(
    array('G105', 'G102', 'G101'),
    array('G106', 'G115', 'G103'),
    array('G107', 'G116', 'G111'),
    array('G108', 'G117', 'G112'),
    array('G109', 'G118', 'G113'),
    array('G110', 'G119', 'G114')
    );
 
  // Die Liste zufällig mischen
  shuffle($blocks);
    // Rotation für eine eventuelle Wiederholung der Seite zwischenspeichern
    registerVariable($blocks); 
}


// Anzeigen der Blöcke
$i = loopPage(count($blocks));
// Frage anzeigen
    question($blocks[$i][0]);
    question($blocks[$i][1]);
    question($blocks[$i][2]);
//Blöcke bilden, jeweils ein Grund + Frage Neuartigkeit + Frage Überzeugungskraft
// Liste der Gründe und Fragen erstellen und mischen
if (!isset($blocks1)) {
  $blocks1 = array(
    array('G201', 'G207', 'G208'),
    array('G202', 'G209', 'G218'),
    array('G203', 'G210', 'G219'),
    array('G204', 'G211', 'G220'),
    array('G205', 'G212', 'G221'),
    array('G206', 'G217', 'G222')
    );
 
  //Die Liste zufällig mischen
  shuffle($blocks1);
    //Rotation für eine eventuelle Wiederholung der Seite zwischenspeichern
    registerVariable($blocks1);
}

//Anzeigen der Blöcke
$i = loopPage(count($blocks1));

//Frage anzeigen
question($blocks1[$i][0]);
question($blocks1[$i][1]);
question($blocks1[$i][2]);


//Blöcke bilden, jeweils ein Grund + Frage Neuartigkeit + Frage Überzeugungskraft
// Liste der Gründe und Fragen erstellen und mischen
if (!isset($blocks2)) {
  $blocks2 = array(
    array('G301', 'G307', 'G308'),
    array('G302', 'G309', 'G314'),
    array('G303', 'G310', 'G315')
    );
 
  //Die Liste zufällig mischen
  shuffle($blocks2);
    //Rotation für eine eventuelle Wiederholung der Seite zwischenspeichern
    registerVariable($blocks2);
}

//Anzeigen der Blöcke
$i = loopPage(count($blocks2));

//Frage anzeigen
question($blocks2[$i][0]);
question($blocks2[$i][1]);
question($blocks2[$i][2]);

//Blöcke bilden, jeweils ein Grund + Frage Neuartigkeit + Frage Überzeugungskraft
// Liste der Gründe und Fragen erstellen und mischen
if (!isset($blocks3)) {
  $blocks3 = array(
    array('G304', 'G311', 'G316'),
    array('G305', 'G312', 'G317'),
    array('G306', 'G313', 'G318')
    );
 
  //Die Liste zufällig mischen
  shuffle($blocks3);
    //Rotation für eine eventuelle Wiederholung der Seite zwischenspeichern
    registerVariable($blocks3);
}

//Anzeigen der Blöcke
$i = loopPage(count($blocks3));

//Frage anzeigen
question($blocks3[$i][0]);
question($blocks3[$i][1]);
question($blocks3[$i][2]);

// Randomisierung

$rubrik = value('R001', 'label');
for ($i=0; $i<6; $i++) {
  // Fragen anzeigen
  question(id($rubrik, $blocks[$i][0]));
  question(id($rubrik, $blocks[$i][1]));
  question(id($rubrik, $blocks[$i][2]));
}
by s126979 (140 points)
Sie haben hier jetzt 2 PHP-Codes gepostet ... verwenden Sie diese beide oder sind das alterantive Umsetzungen?

> In meinem Zufallsgenerator steht weiterhin 1= G1, 2= G2, 3= G3-G31

Ich würde dort für die 3 nur G hineinschreiben, wenn das die Rubrik ist, die Sie für Gruppe 3 verwenden.

Haben Sie in allen Gruppen die gleiche Anzahl Fragen/Blöcke oder variiert das?
Ich weiß nicht, warum die php Codes hier geteilt dargstellt werden. Ich verwende beide, also es ist ein Code.
Im oberen sind die 6 Fragen aus der Rubrik G1, dann kommen im "zweiten" Code die Definition der Arrays aus Fragen aus G2. Und dann in zwei Teile aufgesplittet die aus G3.

Jede Gruppe bekommt gleich viele Fragen. Gruppe 1 alle 6 Fragen(arrays) aus G1 (nur positiv), Gruppe 2 alle 6 Fragen aus G2 (nur negativ) und Gruppe 3 auch 6 Fragen (3 positive und 3 negative).

Ich habe mich ein paar Stunden durch das Handbuch geklickt, und an sich trifft auf mich zu: Randomisierung mit php Code --> Randomisierung von Seiten --> setPageOrder. Nur auf der Erklär Seite von setPageOrder geht es nur noch darum, was man macht, wenn man die Reihenfolge von Seiten randomisieren möchte und trotzdem alle Seiten allen Probanden gezeigt werden sollen. Was mir fehlt ist, was gemacht werden muss, wenn man die 3 Szenarien zufällig aufteilen will, und jeder proband nur ein Szenario bekommt und die anderen nie sieht.
> Jede Gruppe bekommt gleich viele Fragen.

Sie definieren 4 Variablen: $blocks, $blocks1, $blocks2 und $blocks3. Die letzten beiden mit 3 Zeilen, die ersten beiden mit 6 Zeilen. Das kann ich noch nicht ganz nachvollziehen?!

> Was mir fehlt ist, was gemacht werden muss, wenn man die 3 Szenarien zufällig aufteilen will

Wie oben beschrieben: Ich würde empfehlen, dass Sie insgesamt nur ein einziges verschachteltes Array definieren, wo nur die Zahlen der Fragen drin stehen. Und die Zuordnung, aus welcher Rubrik die Fragen dann genommen werden, würde ich über das id() erledigen: https://support.soscisurvey.de/?qa=29314/randomiserung-text-und-fragen-blocken-szenarien-aufteilen&show=29317#a29317
Sie definieren 4 Variablen: $blocks, $blocks1, $blocks2 und $blocks3. Die letzten beiden mit 3 Zeilen, die ersten beiden mit 6 Zeilen. Das kann ich noch nicht ganz nachvollziehen?!
> Die letzte Gruppe bekommt positive und negative Gründe. Ich möchte, dass die 3 positiven in sich rotieren und die 3 negativen in sich rotieren. Aber nicht, dass sich positive und negative Gründe vermischen.
Deswegen habe ich es in zwei x drei aufgeteilt, weil ich nicht weiß, wie ich es in einem einzigen Code umsetze.

Wie oben beschrieben: Ich würde empfehlen, dass Sie insgesamt nur ein einziges verschachteltes Array definieren, wo nur die Zahlen der Fragen drin stehen. Und die Zuordnung, aus welcher Rubrik die Fragen dann genommen werden, würde ich über das id() erledigen: https://support.soscisurvey.de/?qa=29314/randomiserung-text-und-fragen-blocken-szenarien-aufteilen&show=29317#a29317
> Ja, das verstehe ich leider nicht. Vermutlich bin ich einfach zu dumm, tut mir Leid an der Stelle und danke für Ihre Geduld. Woher weiß ich denn, welche Zahl eine Frage hat? Ich dachte jede Frage hat eine einzigartige Kennung wie G105. Und was ist der Vorteil, wenn ich statt bspw G105 nur 5 schreibe? Gibt es dazu im Handbuch irgendeine Seite, wo ich nachlesen kann?
Weil ich weiß nicht, wie ich es jetzt konkret umsetzen soll.
"$rubrik = value('RG01', 'label');
for ($i=0; $i<6; $i++) {
  // Fragen anzeigen
  question(id($rubrik, $blocks[$i][0]));
  question(id($rubrik, $blocks[$i][1]));
  question(id($rubrik, $blocks[$i][2]));
}"

Also an diesem Code verstehe ich nicht, warum nur $blocks verwendet wird. Wie werden denn die Fragen aus $blocks2 etc. verwendet? Oder muss ich vorher definieren, welche Fragen die Rubrik mit der Zahl 1, 2 und 3 beinhaltet?
Ich muss aber in jedem Fall vorher wie gehabt meine arrays definieren oder?
>  Ich möchte, dass die 3 positiven in sich rotieren und die 3 negativen in sich rotieren. Aber nicht, dass sich positive und negative Gründe vermischen.
Deswegen habe ich es in zwei x drei aufgeteilt, weil ich nicht weiß, wie ich es in einem einzigen Code umsetze.

In Ordnung, dann ist das mti den Zahlen keine so gute Idee - ich ging bisher davon aus, dass Sie die 6 Blöcke immer "wild" durcheinander mischen möchten.

Aber dann müssen wir nchmal ordentlich Schritt für Schritt alles durchgehen. Also: Sie ziehen die Experimentalgruppe aus RG01, korrekt?

Dann definieren Sie die $blocks-Variable als erstes auf Basis dieser Ziehung:

question('RG01');
if (!isset($blocks)) {
  if (value('RG01') == 1) {
    $blocks = array(
      array('G105',...
    );
    shuffle($blocks);
  } elseif (value('RG01') == 2) {
    $blocks = array(
      array('G205',...
    );
    shuffle($blocks);
  } else {
    $blocks1 = array(
      array('G305',...
    );    
    $blocks2 = array(
      array('G310',...
    );    
    shuffle($blocks1);
    shuffle($blocks2);
    $blocks = array_merge($blocks1, $blocks2);
  }
  registerVariable($blocks);
}

Der Rest ist dann nur noch die Anzeige der Blöcke.

$i = loopPage(count($blocks));
question($blocks[$i][0]);
question($blocks[$i][1]);
question($blocks[$i][2]);
Habe es gerade ausprobiert und es funktioniert alles! Vielen, vielen, vielen Dank!! Ich hätte vermutlich Ewigkeiten gebraucht bis es läuft, es ist echt nicht so leicht mit php zu arbeiten, wenn man es noch nicht so oft gemacht hat und gar nicht weiß, welche Möglichkeiten alle existieren.

Also nochmal besten Dank und einen schönen Tag!
...