zufällige Zuordnung aus einem Wortpool

More
2 months 1 week ago #218791 by verun4ik
Hallo alle zusammen,

ich möchte in der Umfrage zufällig aus 13 Wörtern ( AX, BX; CX; DX; EX; FX; GX; HX; IX, JX, KX; LX) immer nur zwei auswählen und in die Frage einbauen. Also so ungefähr:
Befragender 1 Anzeige

Frage 1: Was denken Sie über AX?
Anwort: Freitext

Frage 2: Was denken Sie über JX?
Antwort: Freitext

Befragender 2 Anzeige

Frage 1: Was denken Sie über LX?
Anwort: Freitext

Frage 2: Was denken Sie über IX?
Antwort: Freitext

Befragender 3 Anzeige

Frage 1: Was denken Sie über LX?
Anwort: Freitext

Frage 2: Was denken Sie über CX?
Antwort: Freitext

usw. Wie wäre es möglich?

Besten Dank
verun4ik

Please Log in to join the conversation.

More
2 months 1 week ago #218794 by tpartner
Please use English in this section of the forum.

Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.

Please Log in to join the conversation.

More
2 months 1 week ago #218798 by holch
Ich verschiebe das mal ins deutsche Forum.

Bitte immer im richtigen Forum posten, erhöht auch die Chancen auf eine Antwort.

I answer at the LimeSurvey forum in my spare time, I'm not a LimeSurvey GmbH employee.
No support via private message.
The following user(s) said Thank You: verun4ik

Please Log in to join the conversation.

More
2 months 1 week ago #218824 by verun4ik
Hat jemand eine Idee?
LG verun4ik

Please Log in to join the conversation.

More
2 months 1 week ago #218828 by holch
OK, ein Wort wäre einfach. Zwei auch. Aber zwei unter der Bedingung dass sie sich nicht wiederholen ist etwas komplizierter.

Da habe ich keine Lösung parat.

I answer at the LimeSurvey forum in my spare time, I'm not a LimeSurvey GmbH employee.
No support via private message.

Please Log in to join the conversation.

More
2 months 1 week ago #218831 by Joffm
Hallo,
das kann man wohl mit der "Standard javascript-Lösung"  zur Bestimmung von n Elementen aus einem Pool von m bewerkstelligen.

Ich denke einmal ins Blaue:
Du erstellst eine Frage vom Typ "Mehrfache kurze Texte" mit zwei Teilfragen.
Dorthinein kommt folgender javascript code
<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 = ["AX", "BX", "CX", "DX", "EX", "FX", "GX", "HX", "IX", "JX", "KX", "LX"];
 
      arr = shuffle(arr);
 
      var thisQuestion = $('#question{QID}'); 
      $('input[type=text]:eq(0)', thisQuestion).val(arr[0]);        
      $('input[type=text]:eq(1)', thisQuestion).val(arr[1]);
      $('#question{QID}').hide();
   });
</script>

Da diese Frage mithilfe das javascripts ausgeblendet wird "$('#question{QID}').hide();"  darf sie nicht in der Anzeigeform "Frage für Frage" benutzt werden. Es würde eine leere Form entstehen, welche nur die "Zurück" und "Weiter"-Button zeigt.
Daher propagieren wir ja immer "Gruppe für Gruppe" anzuzeigen, aber nur eine Frage in jede Gruppe zu stecken; dann sieht es für den Benutzer aus wie "Frage für Frage".
Aber hier kannst Du dann diese Frage zusammen mit einer anderen in einer Gruppe haben.

Gut, was gibt das alles?
 

Du erhältst zwei zufällige Elemente, auf die Du mit {QCode_SQ001} bzw: {QCode_SQ002} zugreifen kannst.

Viel Erfolg

Joffm

Und jetzt ist mir noch nicht klar, was hier gemeint ist mit "dass sie sich nicht wiederholen". 
Wie soll das, wenn überhaupt, gemeint sein?


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

Please Log in to join the conversation.

More
2 months 1 week ago #218844 by holch

Und jetzt ist mir noch nicht klar, was hier gemeint ist mit "dass sie sich nicht wiederholen".

Das kam ja von mir.

ich gehe einfach davon aus, dass dem gleichen Teilnehmer nicht zweimal das gleiche Wort angezeigt werden sollt. Ansonsten hätte man das ja mit zwei Zufallszahlen machen können, da kann es aber ja passier, dass man eben zweimal das gleiche Wort präsentiert bekommt, was vermutlich nicht so sonderlich sinnvoll ist.

I answer at the LimeSurvey forum in my spare time, I'm not a LimeSurvey GmbH employee.
No support via private message.

Please Log in to join the conversation.

More
2 months 3 days ago #218990 by verun4ik
Vielen Dank dafür.

Ich hätte eine Frage, die in ähnliche Richtung geht. Und zwar möchte ich dei einer Matrixfrage (Zahlen) mit checkboxes, aus 50 Teilantworten zufällig nur 13-16 Optionen anzeigen.

Mit {if(random==1, random, (rand(1,5)))} funktioniert es nicht, wenn ich es in jede Zeile eingebe.

Hat wer eine Idee?
Besten Dank
verun4ik

Please Log in to join the conversation.

More
2 months 2 days ago #219024 by Joffm
Das machst Du - fast - genauso.
Nimm eine Frage vom Typ "kurzer Text". Nennen wir sie "QPool"
Darin dieses script; fast identisch mit dem vorigen.
<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 < 51; i++) {
         arr.push(("0"+i).slice(-2));
      }
 
      arr = shuffle(arr);
      anumbers = arr.slice(0,15).join('#');
      $('#question{QID} input[type="text"]').val("#"+anumbers+'#');
      $('#question{QID}').hide();
   });
</script>

Du erhältst dann so etwas in der Frage:
#12#34#03#45#21#26#46#01#16#32#38#44#09#36#39

Die Rauten haben zwei Aufgaben.
1. Ohne die führende Raute würde der Text mit "12" beginnen; wenn man nun nach der "12" sucht, hat sie den Index "0". "0" bedeutet aber wiederum, "nicht gefunden". Dies wird so vermieden.
2. Wenn man die einzelnen Zahlen nicht trennen würde ("1234034521..."), würde auch die Zahl "23" gefunden, die nicht in Pool enthalten ist.

Und jetzt ist klar wie man weiter vorgeht.
Die 1. Teilfrage wird gezeigt, wenn "01" im Text enthalten ist, die 2., wenn "02" enthalten ist, usw.

Dazu dient die Funktion "strpos", die - wie oben schon gesagt, entweder "0" zurückgibt, wenn der Teilstring nicht enthalten ist, oder die Stelle, an welcher er beginnt.

Also:
Teilfrage 1: strpos(QPool,"01")>0
Teilfrage 2: strpos(QPool,"02")>0
Teilfrage 3: strpos(QPool,"03")>0
...
​​​​​​​Teilfrage 50: strpos(QPool,"50")>0
​​​​​​​

zufällig nur 13-16 Optionen

Da musst Du Dich schon einigen. Dieser Wert wird im script fest eingetragen (arr.slice(0,15)), also hier 15.
Sicherlich könnte man jetzt anfangen, durch das script einen String mit 16 Ziffern zu erzeugen.
Danach eine Gleichung, die eine Zufallszahl zwischen 13 und 16 erzeugt.
Dann noch eine Gleichung, die den String mit Hilfe der Funktion "substr" auf die dann zufällige Länge kürzt.
Und dien nimmt man dann für die Relevanzgleichung.

Joffm


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

Please Log in to join the conversation.

Start now!

Just create your account and start using Limesurvey today.

Register now