Welcome to the LimeSurvey Community Forum

Ask the community, share ideas, and connect with other LimeSurvey users!

Randomisierung

  • Tizizizzi
  • Tizizizzi's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
4 years 8 months ago #194064 by Tizizizzi
Randomisierung was created by Tizizizzi
Hallo Lime Survey,

ich habe eine Frage bezüglich randomisieren von Fragen. Ich habe 5 verschiedene Fragen. Der Befragte soll jedoch nur 2 der 5 erhalten. Die erste Frage basiert auf vorherige angegebenen Antworten, diese ist somit manipuliert. Die Manipulation habe ich schon korrekt codiert. Nun soll die zweite Frage jedoch eine randomisierte Frage aus den übrig gebliebenen 4 Fragen sein. Ist dies möglich? Hier ist eine vereinfachte Version der Manipulation:

OR > DR and MC and PC and TC --> OR
DR > OR and MC and PC and TC --> DR
MC > OR and DR and PC and TC --> MC
PC > OR and DR and MC and TC --> PC
TC > OR and DR and MC and PC --> TC

Wenn der Befragte nun bei der ersten Fragen OR erhält, soll die zweite Frage eine randomisierte aus (DR, MC, PC, TC) sein.
The topic has been locked.
  • tpartner
  • tpartner's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
4 years 8 months ago #194084 by tpartner
Replied by tpartner on topic Randomisierung
English please 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.
The following user(s) said Thank You: DenisChenu
The topic has been locked.
  • holch
  • holch's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
4 years 8 months ago #194126 by holch
Replied by holch on topic Randomisierung
I am moving this to the German section, where it belongs.

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 topic has been locked.
  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
4 years 8 months ago #194169 by Joffm
Replied by Joffm on topic Randomisierung
Naja, gut, jetzt hat holch Dir die Arbeit abgenommen.

Die erste Frage ist natürlich: von welchem Fragentyp ist die Frage, auf der die Entscheidung für die erste Frage beruht?
Dann: Möchtest Du, dass die Frage des "Siegers" immer zuerst kommt, und danach der zufällig ausgewählte "Verlierer"?
Oder ist das egal?
Und natürlich: Ist sichergestellt, dass es immer einen eindeutigen Sieger gibt?

Ich werde jetzt zunächst skizzieren, was die Vor- und Nachteile sind.
Wenn die Reihenfolge erhalten werden soll, müsstest Du 5 einzelne Fragen anlegen für den Sieger, die durch Relevanz eingeblendet werden - und danach noch 5 Fragen für den Verlierer.
Ansonsten genügen 5 Fragen, da ja einfach 2 aus 5 angezeigt werden.

Du kannst auch nur zwei Fragen anlegen und blendest Dein "OR", "DR", ... per Expression Manager ein (Stichwort: Micro-Tayloring.

So, und jetzt zur Programmierung.
Deine Skizze sagt ja so etwas, wie: Es gewinnt der mit der höchsten Punktzahl, oder so.

Da die Frage nach dem Fragentyp nicht klar ist, nehme ich einfach eine multiple Zahleneingabe (Q1) für die 5 Items, die mit "unique(self)" validiert ist, dass es keine gleichen Werte gibt.

Also bestimmen wir zunächst einmal die höchste Punktzahl.
Also eine Gleichung "eqMax". Mit der Funktion "max(x1,x2,...)", in unserem Fall also {max(that.Q1)} bestimmen wir die höchste Punktzahl.
Dann ist also der "Sieger" dasjenige Item, welches diese Punktzahl hat.
Und wir müssen uns nur um die anderen kümmern.
Um nun aus den restlichen vier zufällig einen auszuwählen, benutze ich gerne einen String.
Mithilfe der Funktion "join" und dem "If"-statement erzeugen wir diesen.
{join(if(Q1_SQ001!=eqMax,"1",""),if(Q1_SQ002!=eqMax,"2",""),if(Q1_SQ003!=eqMax,"3",""),if(Q1_SQ004!=eqMax,"4",""),if(Q1_SQ005!=eqMax,"5",""))}
Wir bekommen also einen String, der aus den Ziffern besteht, die nicht dem MaxWert-Item entsprechen.

Und jetzt suchen wir zufällig eins aus.
Natürlich mit der Funktion "rand(x,y)" und der Funktion "substr".
Nennen wir diese Gleichung "eq2"
{substr(join(if(Q1_SQ001!=eqMax,"1",""),if(Q1_SQ002!=eqMax,"2",""),if(Q1_SQ003!=eqMax,"3",""),if(Q1_SQ004!=eqMax,"4",""),if(Q1_SQ005!=eqMax,"5","")),rand(0,3),1)}

Hier ist also alles zusammen.
Wir nehmen den Teilstring "substr" aus unserem "join", und zwar von der zufälligen Stelle rand(0,3) an, und 1 Zeichen lang.
Die Zufallszahl wird übrigens von 0 bis 3 erzeugt, da "substr" bei "0" anfängt zu zählen; das erste Zeichen hat also den Index "0".
So, jetzt haben wir also ein Zeichen, das uns das zweite, zufällige Item angibt.

Wenn Du nun für jedes Item "OR", "DR", ... eine Frage anlegst, wäre die Relevanzgleichung
OR: Q1_SQ001==eqMax OR eq2=="1" (also: entweder hatte OR den höchsten Wert oder wurde in eq2 ausgewählt.
DR: Q1_SQ002==eqMax OR eq2=="2"
...

Und alle diese 5 Fragen haben denselben Randomisierungsgruppennamen, damit die zwei gewählten in zufälliger Reihenfolge erscheinen

Solltest Du es vorziehen mit Micro-Tayloring zu arbeiten, reduziert sich alles auf zwei Fragen.
In die erste fügst Du in den Fragentext so etwas ein wie:
Dies ist die Frage zum "Sieger", nämlich {if(Q1_SQ001==eqMax,"OR",if(Q1_SQ002==eqMax,"DR",if(Q1_SQ003==eqMax,"MC",if(Q1_SQ004==eqMax,"PC","TC"))))}
Auch hier wird wieder verglichen, wer die höchste Punktzahl hat, und dann das Item eingeblendet.

Und in die andere Frage:
Dies ist die Frage zum anderen zufällig ausgesuchten Item, nämlich {if(eq2=="1","OR",if(eq2=="2","DR",if(eq2=="3","MC",if(eq2=="4","PC","TC"))))}
Hier wird entsprechend mit "eq2" verglichen.

Okay, viel geschrieben.

Hier ein Beispiel mit beiden Szenarien.
Ich habe auf "Gruppe für Gruppe" gestellt; dann sieht man das Ergebnis besser.

File Attachment:

File Name: limesurvey...9464.lss
File Size:28 KB

Volunteers are not paid.
Not because they are worthless, but because they are priceless
The topic has been locked.
Moderators: holchJoffmtpartner

Lime-years ahead

Online-surveys for every purse and purpose