Fragen nach Urnenprinzip ohne "Zurücklegen" darstellen

More
1 month 3 days ago #219889 by jucus13
Hallo zusammen, 
ich nutze die Version Version 3.22.9+200317 von LimeSurvey.

Ich möchte gerne eine Fragegruppe erstellen, bei der 4 Fragen zufällig nacheinander angezeigt werden. 
Es soll nach folgendem Prinzip aussehen:
Frage 1: eine auch 4 möglichen Fragen
Frage 2: eine aus den 4 möglichen Fragen (aber nicht die, die schon angezeigt wurde)
Frage 3: eine aus den 4 möglichen Fragen, die aber nicht angezeigt wurden in Frage 1 und 2.

Ich habe hierfür schon die rand-Funktion genutzt, jedoch kann ich hier nicht einstellen, dass die Fragen, die schon angezeigt wurden, NICHT mehr angezeigt werden. 

Ich suche also eine Option nach dem Urnenprinzip ohne Zurücklegen.

Vorab schon einmal vielen Dank!
 

Please Log in to join the conversation.

More
1 month 3 days ago #219891 by Joffm
Hallo, die Frage ist: Gibt es nur diese 4 Fragen?
Um diese in unterschiedlicher Reihenfolge darzustellen, dient der "Randomisierungsgruppenname"
Alle vier bekommen denselben Namen dort verpasst, egal, was Du Dir ausdenken willst, "RG1" oder "Fitzliputzli-Tralala".

Wenn Du allerdings mehr als vier Fragen hast, aber aus diesem Pool nur vier in unterschiedlicher Reihenfolge zeigen willst, gibst Du wieder allen denselben "Randomisierungsgruppennamen".
Darüberhinaus erzeugst Du eine zweite Gruppe, die aber nicht angezeigt wird (Relevanz "0")
In die erste Gruppe kommen vier Fragen, in die zweite alle übrigen.

Das war's.

Joffm
 


Volunteers are not paid.
Not because they are worthless, but because they are priceless

Please Log in to join the conversation.

More
1 month 3 days ago #219892 by jucus13
Vielen Dank für die Antwort. Jedoch kann ich das nicht ganz verstehen.

Ja, es gibt 27 mögliche Fragen. Aus diesen Fragen sollen zufällig 4 Stück ausgewählt werden.

Wenn jedoch bereits eine Frage aus dem Pool der 27 Fragen dargestellt wurde, soll diese nicht doppelt kommen.

Ich verstehe nicht ganz, warum ich dafür eine zweite Gruppe erstellen soll, die dann nicht angezeigt wird.

Please Log in to join the conversation.

More
1 month 3 days ago #219893 by Joffm
Im Grunde ist es ganz einfach.
Du hast 27 Fragen, 4 werden gezeigt, weil sie in Gruppe 1 sind, 23 nicht, da in Gruppe 2.
Und da alle denselben Randomisieringsgruppennamen haben, werden alle 27 verwürfelt.
Das heißt, irgendwelche 4 landen in Gruppe 1.
Probiere es einfach aus und lies noch einmal im Handbuch darüber nach
Joffm
 


Volunteers are not paid.
Not because they are worthless, but because they are priceless

Please Log in to join the conversation.

More
1 month 1 day ago #219935 by jucus13
Vielen Dank für die Nachricht. Es hat nun geklappt!

Ich würde nun gerne auch hinter jede Frage eine weitere Frage mit Bedingung einfügen. Jedoch wird mir hier das nur teilweise angezeigt, obwohl hinter alle 27 möglichen Fragen die bedingte Frage hinzugefügt hab.

Kann es ein Problem geben, weil die Fragen randomisiert sind? Bzw. wie löse ich, dass jede Frage eine weitere Frage aufzeigt mit Bedingung?

Vielen Dank fürs Helfen!

Please Log in to join the conversation.

More
1 month 1 day ago #219940 by Joffm
Hallo,
ist das jetzt alles?
Angefangen hat es mit 4 Fragen in unterschiedlicher Reihenfolge.
Dann waren es 4 aus 27 Fragen.
Und jetzt sind es 4 gepaarte Fragen aus 27 Paaren.

Und dazu muss ich sagen: Dann geht es so nicht.
Dazu musst Du alles total anders angehen.

Und zwar kannst Du 27 Gruppen erstellen mit den Paaren.
Damit später die Fragenpaare wieder randomisiert angezeigt werden, bekommen jetzt die GRUPPEN denselben Randomisierungsgruppennamen.

Und jetzt benötigst Du noch Deine Ziehung.
Dazu kannst Du eine Frage vom Typ "kurzer Text" erstellen mit folgenden javascript im Fragetext (Quellcode-Modus)
<script type="text/javascript" charset="utf-8">
 
function shuffle(array) {
  var currentIndex = array.length, temporaryValue, randomIndex;
 
  // While there remain elements to shuffle...
  while (0 !== currentIndex) {
 
    // Pick a remaining element...
    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex -= 1;
 
    // And swap it with the current element.
    temporaryValue = array[currentIndex];
    array[currentIndex] = array[randomIndex];
    array[randomIndex] = temporaryValue;
  }
 
  return array;
}
 
 
    $(document).on('ready pjax:scriptcomplete',function(){
// Fill the array
      var arr = [];
      for (var i = 1; i < 28; i++) {
         arr.push(('000'+i).slice(-2));
      }
 
      arr = shuffle(arr);
      anumbers = arr.slice(0,4).join(',');
      $('#question{QID} input[type="text"]').val("#"+anumbers+",");
//      $('#question{QID}').hide();
   });
</script>

Damit bekommst Du einen String mit vier zufälligen Zahlen aus den 27.
Im script ist diese Zeile 
//      $('#question{QID}').hide();
auskommentiert. D.h. die Frage wird angezeigt.
Dies ist zum Testen auch richtig. In der "scharfen" Umfrage werden die beiden Schrägstriche dann entfernt.
Desweiteren ist zu sagen, dass diese Frage nicht alleine in einer Gruppe sein kann. Also füge sie in irgendeine Gruppe am Start der Umfrage ein.

Gut, jetzt hast Du einen String mit 4 Zahlen.
Dann kannst Du genau diese 4 Gruppen anzeigen, indem Du die Relevanzgleichungen der Gruppen folgendermaßen setzt:
Gruppe 1: Ist die "01" im string? Ja, dann angezeigt, nein, dann nicht angezeigt.
Gruppe 2: Ist die "02" im string? Ja, dann angezeigt, nein, dann nicht angezeigt.
Usw.
Dazu nimmst Du die Funktion "strpos"
Siehe hier.
manual.limesurvey.org/ExpressionScript_-...mplemented_functions
Und jetzt weißt Du auch, warum ein "#"-Zeichen am Anfang steht.
Ohne dieses würde die Suche nach "03" den Index "0" ergeben.
Das bedeutet aber auch "nicht gefunden".
Daher die Raute; damit ist der kleinste Index auf jeden Fall 1.

Viel Erfolg

Joffm

 


Volunteers are not paid.
Not because they are worthless, but because they are priceless

Please Log in to join the conversation.

More
1 month 1 day ago #219957 by Joffm
Ich habe gerade gesehen, dass der screenshot des Textstrings fehlt.

Er sieht irgendwie so aus: #03,09,21,13


Volunteers are not paid.
Not because they are worthless, but because they are priceless

Please Log in to join the conversation.

More
1 month 22 hours ago #219961 by jucus13
Vielen Dank für die ausführliche Beschreibung!
Ich habe den ersten Teil hinbekommen mit den Randomisierungsgruppen.

Ich habe hier mehrere Probleme:
1) Wenn ich diesen Quellcode eingebe, dann speichere und später wieder öffne ist der Code viel kürzer und verschwindet quasi. Ich muss also den ganzen Code nochmals reinkopieren. Ist das denn so gedacht?

2) Die Gruppen werden mir hier zwar randomisiert angezeigt, jedoch immer noch alle 27 Fragengruppen und nicht nur 4 Stück.
a)Wo sollte dieser String von 4 Zahlen erscheinen?
b) Und wo genau setze bzw. schreibe ich diese Funktion "strpos" hinein?


Viele Grüße

Please Log in to join the conversation.

More
1 month 21 hours ago #219963 by Joffm
Übrigens ist mir eingefallen, dass Du möglicherweise auch die Fragen-Property ".relevanceStatus" benutzen kannst.

Indem Du bei jeder der Gruppen testest, ob die Summe dieses Status der übrigen 26 Gruppen noch kleiner als 4 ist.

Ich werde nach dem Frühstück einmal schauen.

Joffm

1) Wenn ich diesen Quellcode eingebe, dann speichere und später wieder öffne ist der Code viel kürzer und verschwindet quasi. Ich muss also den ganzen Code nochmals reinkopieren. Ist das denn so gedacht?

Arbeitest Du mit so etwas wie einer Uni-Installation, zumindest nicht auf Deiner eigenen Installation?
Das sind wichtige informationen, da die Admins an Universitäten oft verbieten javascript einzufügen.

 


Volunteers are not paid.
Not because they are worthless, but because they are priceless

Please Log in to join the conversation.

More
1 month 21 hours ago #219964 by jucus13
Ja, ich arbeite mit einer Uni-Installation.

Please Log in to join the conversation.

More
1 month 19 hours ago - 1 month 19 hours ago #219974 by Joffm
Gut, dann etwas umständlicher, nur mit Fragen vom Typ "Gleichung" (Punkt 2.) oder wirklich Hauruck (Punkt 1.).
forums.limesurvey.org/forum/german-forum...zufallszahlen#209705

Und hier noch die erwähnte Lösung mit ".relevanceStatus":
An den Anfang jeder deiner 27 Gruppen füge eine Frage vom Typ "Gleichung" ein (diese wird natürlich versteckt). Sei es "eq01" - "eq27".
In jeder dieser Gleichungen wird der "relevanceStatus" aller ANDEREN 26 ersten Fragen summiert.
eq01: sum(Q2.relevanceStatus,Q3.relevanceStatus,...,Q27.relevanceStatus)
eq02: sum(Q1.relevanceStatus,Q3.relevanceStatus,...,Q27.relevanceStatus)
...
eq27: sum(Q1.relevanceStatus,Q2.relevanceStatus,...,Q26.relevanceStatus)

Und die beiden Fragen jeder Gruppe bekommen als Relevanzgleichung:
Gruppe 1:
Q1: eq01 lt 5
Q1a: eq01 lt 5

Gruppe 2:
Q2: eq02 lt 5
Q2a: eq02 lt 5

Geht auch.

Joffm

Ansonsten würde ich vorschlagen, Du schickst uns den Prototypen Deines Werkes als lss Export.
​​​​​​​Prototyp heißt, nur Platzhalter für die Fragen, nur die Struktur ist zunächst wichtig.


Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 1 month 19 hours ago by Joffm.

Please Log in to join the conversation.

More
4 weeks 1 day ago #220003 by jucus13
Vielen Dank für die Antworten und die Mühe.

Das klingt alles recht komplex und schwierig. Ich werde zunächst eine andere Strategie verfolgen.

Wahrscheinlich ist demnach Limesurvey nicht das optimale Tool, um meine Ideen umzusetzen :-)

Viele Grüße

Please Log in to join the conversation.

More
4 weeks 1 day ago #220013 by Joffm
Also von Komplexität kann hier nun keine Rede sein. 

Mit der Property ".relevanceStatus" ist es ja nun wirklich einfach.
Wie Du siehst, haben alle Gruppen dieselbe Struktur.
 

Die hast Du doch in 10 Minuten angelegt.
Zunächst hintereinander 27 Gruppen anlegen.
Gleichungsfrage einmal erstellen, dann 26mal kopieren (dabei die Formel anpassen)
Da die Fragen nun alle in derselben Gruppe sind, in die entsprechenden Gruppen schieben.

Jetzt hast Du Deinen Prototypen, den Du dann mit dem "Fleisch", also Deinen Fragen füllen kannst.

Joffm

P.S.
Als Schlusswort zu diesem kleinen Problem hier:
Hättest Du gleich zu Beginn einen lss-Export Deiner Umfrage-Struktur geschickt, wäre die Kuh längst vom Eis und Du hättest ein funktionierendes Gerüst.
 


Volunteers are not paid.
Not because they are worthless, but because they are priceless
Attachments:

Please Log in to join the conversation.

Start now!

Just create your account and start using Limesurvey today.

Register now