0 votes
in SoSci Survey (dt.) by s282798 (150 points)

Guten Abend,

ich stelle den Teilnehmern in meinem Fragebogen 30 random gezogene Fragen. Anschließend würde ich ihnen gerne die Möglichkeit geben, entweder 20 weitere Fragen zu beantworten, oder die Umfrage zu beenden. Die 20 Fragen sollen nur Fragen enthalten, die in den 30 Fragen davor noch nicht gestellt wurden.
Ich habe mir das Ganze so vorgestellt: nach der Fragebogenseite mit den 30 random Fragen gelangt man auf die nächste Seite, auf der man auf "Weiter" oder auf "Beenden" klicken kann. Wenn man auf Weiter klickt, kommen 20 weitere random Fragen, wenn man auf Beenden klickt, kommt man auf die nächste Seite im Fragebogen, auf der man noch kurz Feedback bekommt und die Fragen bewertet, bevor man ganz fertig ist.

Nun meine Frage: wie kann ich das Ganze programmieren?

Vielen Dank im Voraus für Ihre Hilfe.

by s109993 (12.0k points)
Hier werden Zufallsziehungen sehr ausführlich beschrieben. Es gibt viele ver. Möglichkeiten. Sie müssen einmal schauen, was für Sie am besten ist: https://www.soscisurvey.de/help/doku.php/de:create:randomization

1 Answer

+1 vote
by SoSci Survey (327k points)

Die 20 Fragen sollen nur Fragen enthalten, die in den 30 Fragen davor noch nicht gestellt wurden.

Dafür gibt es (mindestens) zwei Möglichkeiten:

  1. Sie können gleich zu Beginn 50 Fragen ziehen, und dann erstmal nur 30 davon verwenden.

  2. Sie können den (in dem Fall zweiten) Zufallsgenerator mittels show() einbinden und über den "filter" Parameter festelegen, aus welchen Codes (noch) gezogen werden darf. Das wäre dann die Menge, die von allen möglichen Fragen übrig bleibt, wenn Sie die ersten 30 abziehen. Das lässt sich z.B. mit array_diff() erledigen.

by s282798 (150 points)
Vielen Dank für Ihre Rückmeldung! Wie würde ich denn 2. konkret umsetzen? Ich arbeite für meine Bachelorarbeit das erste Mal mit SoSci Survey und habe es leider noch nicht geschafft, den Code so anzupassen, dass es funktioniert.

Alternativ haben wir das Ganze aktuell so gelöst, dass wir die Umfrage dupliziert haben und sie hinter unsere Filterfrage eingefügt haben. Der Code für die zweite Frage sieht aktuell so aus:

$fragen1 = valueList('RD01', NULL, 'label');


if (!isset($fragen)) {
  // Liste der Frage-Kennungen definieren
  $fragen = array_merge($fragen1);
  // Die Liste zufällig mischen
  shuffle($fragen);
  // Die Rotation für eine eventuelle Wiederholung der Seite zwischenspeichern
  registerVariable($fragen);
}

$anzahlFragen = min(30, count($fragen));
$gewaehlteFragen = array_slice($fragen, 0, $anzahlFragen);


foreach ($gewaehlteFragen as $frage) {
    question($frage);
}

Und an sich klappt es auch gut, dass weitere 30 Fragen ausgewählt werden, allerdings kommen hier noch manche Fragen doppelt. Haben Sie eine Idee, wie ich hier einbauen könnte, dass bereits verwendete Fragen nicht noch einmal gezogen werden?

Vielen Dank für Ihre Hilfe!
by SoSci Survey (327k points)
> Alternativ haben wir das Ganze aktuell so gelöst, dass wir die Umfrage dupliziert haben und sie hinter unsere Filterfrage eingefügt haben.

Schlechte Idee - dann wiederholen sich Stimuli potenziell wieder.

>  Der Code für die zweite Frage sieht aktuell so aus

Warum haben Sie dort noch ein shuffle()? Davon würde ich abraten, der Zufallsgenerator mischt ja schon.

> $anzahlFragen = min(30, count($fragen));

Auch diese und die nächste Zeile brauchen Sie m.E. nicht.

> Wie würde ich denn 2. konkret umsetzen?

Sie würden eine Liste aller möglichen Codes erstellen - das sollte (!) mit getItems() möglich sein. Dann entnehmen Sie die bereits verwendeten Codes aus der Liste, und übergeben den Rest als Filter an den zweiten Zufallsgenerator. Also:

$all = getItems('RG02', 'all');
$drawn = array_values(valueList('RG01'));
$rest = array_diff($all, $drawn);
show('RG02', ['filter' => $rest]);

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

...