Welcome to the LimeSurvey Community Forum

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

Hilfe bei der Umsetzung für ein Uni-Projekt

  • ERed3456
  • ERed3456's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
4 months 3 weeks ago #265773 by ERed3456
Bitte helfen Sie uns, Ihnen zu helfen und füllen Sie gegebenenfalls aus:
LimeSurvey-Version: [siehe rechts unten auf Ihrem LimeSurvey-Admin-Bildschirm]
Eigener Server oder LimeSurvey Cloud:
Umfragethema/Vorlage:
==================
Hallo zusammen,

ich möchte in LimeSurvey folgendes Szenario für ein Uni-Projekt umsetzen und bin mir unsicher, wie ich das am besten anstellen soll. Vielleicht könnt ihr mir weiterhelfen:

Beschreibung des Szenarios:

• Es gibt 16 Töpfe, jeder Topf enthält 16 Kugeln.
• Jeder Proband erhält immer alle 16 Töpfe vorgelegt.
• Der erste Proband zieht aus jedem der 16 Töpfe eine Kugel zufällig und ohne Zurücklegen, sodass danach jeder Topf noch 15 Kugeln enthält.
• Der nächste Proband zieht dann wiederum aus jedem Topf eine Kugel zufällig und ohne Zurücklegen, sodass danach jeder Topf noch 14 Kugeln enthält, und so weiter.
• Dieser Prozess wird fortgesetzt, bis alle Kugeln aufgebraucht sind.
• Sobald alle Kugeln aufgebraucht sind, wird der Vorgang von vorne begonnen.
• Das Ziehen der Kugeln soll immer zufällig sein, sodass keine einheitliche Reihenfolge entsteht.

Meine Frage:

Wie kann ich dieses Szenario am besten in LimeSurvey umsetzen? Ist es überhaupt möglich, dies nur mit LimeSurvey zu realisieren, oder müsste ich hierfür zusätzliche Programmierungen vornehmen? Falls eine Programmierung nötig ist, welche Technologien oder Scripte wären dafür am besten geeignet?

Ich danke euch im Voraus für eure Hilfe und freue mich auf eure Antworten!
 

Please Log in to join the conversation.

  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
4 months 3 weeks ago #265774 by Joffm
Hallo,
zunächst: Dies alles findest Du in meinem "Tutorial 4: Gleichungen, Zu- und andere Fälle".
Ist hier im deutschen Teil, allerdings inzwischen ziemlich weit hinten, so Seite 10, 11, 12,.... Einfach gucken

Das Ziehen der Kugeln soll immer zufällig sein, sodass keine einheitliche Reihenfolge entsteht.

Und damit bist Du schon bei der Lösung; Du generierst eine Zufallszahl von 1-16.
Jetzt gibt es natürlich noch die Ideen der zyklischen Zuordnung oder des "least filled" Ansatzes, die im Tutorial beschrieben werden.
Und um Deine spezielle Idee zu verwirklichen, wäre es gut gewesen, Du hättest die Anfangsfragen beantwortet, zu Version und Ort des Hostings.
Denn davon hängt es ab, ob Du diese "anderen" Lösungen überhaupt verwenden kannst.

Allerdings gehen alle diese anderen Ideen irgendwie "in die Hose".
Nehmen wir an:
Teilnehmer 1 startet die Umfrage und bekommt die Kugel 5
Teilnehmer 2 startet - aus welchem Pool wird nun seine Kugel gezogen?
Teilnehmer 1 hat die Umfrage noch nicht abgeschlossen. Wird er sie überhaupt abschließen oder (aus Langeweile oder sonstwie) abbrechen?
Und schon haben wir ein Dilemma.
Wirklich zu lösen ist dies nur, wenn immer nur ein einziger Teilnehmer zur Zeit die Umfrage bearbeitet.
Also entweder "Zufallszahl" oder "least filled" (wobei dies sehr davon abhängt, mit welcher Frequenz die Teilnehmer die Umfrage starten.

Da Du ja eine sehr große Stichprobe benötigst, um überhaupt Vergleiche zwischen den Gruppen anstellen zu können, könnte ich mir vorstellen, dass Du mit einem Panel arbeitest.
Gerade dabei - wenn der Panel Provider die Einladungen nicht sukzessive herausschickt - bekommst Du einen hyperbolischen Verlauf der Teilnahme.
Am Anfang sehr, sehr viele; dann wird es aber auch schnell weniger.

Und zu:

Das Ziehen der Kugeln soll immer zufällig sein, sodass keine einheitliche Reihenfolge entsteht.

Es ist natürlich ziemlich sehr egal, ob die Reihenfolge der Kugeln
1,2,3,4,5,6...,15,16,1,2,...
oder
7,13,4,11,...,14,3,6,...
ist

1. Die Teilnehmer agieren doch unabhängig voneinander
2. In diesem Fall ist der Zufallsgenerator die Zeit, zu der ein Teilnehmer die Umfrage startet.

Joffm

P.S.
Warum hast Du die Frage denn gleich viermal abgeschickt?
Na gut, drei davon habe ich gelöscht.

Volunteers are not paid.
Not because they are worthless, but because they are priceless
The following user(s) said Thank You: ERed3456, sophie24

Please Log in to join the conversation.

  • ERed3456
  • ERed3456's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
4 months 3 weeks ago #265862 by ERed3456
Replied by ERed3456 on topic Hilfe bei der Umsetzung für ein Uni-Projekt
Danke für deine schnelle und hilfreiche Antwort sowie für deine Mühe und Arbeit an den hilfreichen Tutorials! 

Ich bin noch ganz neu bei LimeSurvey und deshalb etwas überfordert, aber ich denke, wir werden die neueste Version und LimeSurvey CE verwenden.

Es tut mir total leid für das mehrfache Posten. Mir wurde die ganze Zeit nicht angezeigt, dass meine Frage bereits hochgeladen wurde, weswegen ich dachte, es hätte nicht geklappt und ich es nochmal probieren müsste. Es tut mir total leid, wenn ich für Probleme im Forum gesorgt habe.

Ich bedanke mich nochmals vielmals!

Please Log in to join the conversation.

  • ERed3456
  • ERed3456's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
4 months 3 weeks ago #265863 by ERed3456
Replied by ERed3456 on topic Hilfe bei der Umsetzung für ein Uni-Projekt
Ich habe auch noch eine weitere Frage:
Lässt sich der zuvor beschriebene Vorgang auch auf folgendes Beispiel anwenden? Ich habe 16 verschiedene Texte für die Probanden. In jedem dieser 16 Texte gibt es 4 verschiedene Variablen mit jeweils 2 Ausprägungen, also 16 verschiedene Formen der 16 Texte. Auf diesen Versuch möchte ich das gleiche Szenario wie zuvor mit den Kugeln beschrieben anwenden. Jeder Proband soll alle 16 Texte vorgelegt bekommen, aber jeder soll etwas anderes bearbeiten und die Zuteilung soll zufällig erfolgen. Wenn alle möglichen Textformen verbraucht sind, soll es wieder von vorne beginnen.

Kann ich dann, wie du erklärt hast, für jede Form des Textes eine Zahl von 1 bis 16 generieren? Oder sind weitere/andere Schritte notwendig?

Es ist das erste Mal, dass ich mit LimeSurvey arbeite, weshalb ich mich noch sehr unsicher fühle. Deswegen bin ich sehr froh, dass ihr hier so ein tolles Forum mit einer so netten Community aufgebaut habt.
Ich bedanke mich vielmals im Voraus und bitte um Entschuldigung für die Umstände.

Please Log in to join the conversation.

  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
4 months 3 weeks ago - 4 months 3 weeks ago #265866 by Joffm
Hallo,
so, wie ich es verstehe, hast Du 16 Texte, die alle nach diesem Schema aufgebaut sind

Das (blaue/rote) (Auto Fahrrad) (raste/schlich) über (die Allee/den Boulevard)

Das kannst Du natürlich mit einer Zufallszahl (zz) von 1-16 erschlagen.
Theoretisch, die Praxis spricht dagegen.

Denn Du hast ja folgende Kombinationen
1. blau - Auto - raste - Allee
2. blau - Auto - raste - Boulevard
3. blau - Auto - schlich - Allee
4. blau - Auto - schlich - Boulevard
5. blau - Fahrrad - raste - Allee
6. blau - Fahrrad - raste - Boulevard
7. blau - Fahrrad - schlich - Allee
8. blau - Fahrrad - schlich - Boulevard
9. rot - Auto - raste - Allee
10. rot - Auto - raste - Boulevard
11. rot - Auto - schlich - Allee
12. rot - Auto - schlich - Boulevard
13. rot - Fahrrad - raste - Allee
14. rot - Fahrrad - raste - Boulevard
15. rot - Fahrrad - schlich - Allee
16. rot - Fahrrad - schlich - Boulevard

Dann würde das "tayloring" eines Satzes so aussehen
1. Möglichkeit
Das {if(zz<9,"blaue","rote")} {if(zz<4 or (zz>8 and zz<13),"Auto","Fahrrad")} {if(zz<3 or (zz>4 and zz<7) or (zz>8 and zz<11) or (zz>12 and zz<15),"raste","schlich")} über {if(floor(zz/2)==zz/2,"die Allee","den Boulevard")}

2. Möglichkeit - ja nach Zufallszahl den ganzen Satz mit einem verschachtelten IF 
{if(zz==1,"Das blaue Auto raste über die Allee", if(zz==2,"Das blaue Auto raste über den Boulevard", if(zz==3,"Das blaue Auto schlich über die Allee",..., "Das rote Fahrrad schlich über den Boulevard")))))))))))))))}

Ist also beides etwas unhandlich..
Daher würde ich eher zu 4 Zufalsszahl von 1-2 tendieren.

Aber ohne Dein genaues Design zu sehen, ist dies alles "ins Blaue gesprochen".
Schicke also besser den lss Export Deiner Umfrage bzw. eines Prototypen mit diesen relevanten Fragen.

Joffm

P.S.
Da Du von "Uni-Projekt" sprachst, gehe ich davon aus, dass Du auf einer Uni-Installation arbeitest, und vermutlich kein javascript einsetzen kannst.
Oder warum hast Du die Eingangsfragen nach Version und Ort des Hostimngs nicht beantwortet?

 

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 4 months 3 weeks ago by Joffm.
The following user(s) said Thank You: ERed3456

Please Log in to join the conversation.

  • ERed3456
  • ERed3456's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
4 months 2 weeks ago - 4 months 2 weeks ago #265990 by ERed3456
Replied by ERed3456 on topic Hilfe bei der Umsetzung für ein Uni-Projekt
Vielen Dank für deine ausführliche Antwort und entschuldige meine späte Antwort.

Leider denke ich, dass es immer noch nicht die Lösung ist, die ich suche. Ich habe 16 Texte, von denen jeder 16 verschiedene Versionen hat, da jeder Text 4 Variablen mit jeweils 2 Ausprägungen enthält (also 4^2). Konkret bedeutet das, dass Text 1 in 16 verschiedenen Versionen vorliegt, und Text 2 ebenfalls in 16 verschiedenen Versionen, sodass insgesamt 256 Texte entstehen, benannt von 1.1 bis 16.16.

Die 16 Texte folgen einem ähnlichen Aufbau mit diesen Variablen: „meine/unsere“, „China/Deutschland“, „ist/ist nicht“, „mit/ohne“. In manchen Texten werden auch andere Varianten wie „ich/wir“, „Russland/Schweiz“, „sind/sind nicht“ verwendet. Meine Aufgabe besteht nun darin, dass jeder Proband alle 16 Texte zur Bewertung erhält. Allerdings soll der erste Proband aus allen 16 Versionen pro Text zufällig eine Version ziehen können, während der nächste Proband nur noch aus den verbleibenden 15 Versionen ziehen kann, der darauf folgende Proband aus den 14 Versionen, und so weiter. Dies bedeutet, dass das Ziehen nach dem Zufallsprinzip ohne Zurücklegen erfolgt, sodass, wenn alle 16 Versionen aufgebraucht sind, der Prozess von vorne beginnt.

Ich habe bereits verschiedene Optionen ausprobiert. Beim ersten Versuch habe ich 16 Fragegruppen erstellt (Text1 bis Text16) und in diesen Gruppen jeweils 16 Fragen mit den jeweiligen 16 Versionen eingefügt. Dann habe ich für Text1.1 die Bedingung `rand(1, 16) == 1` und für Text1.2 `rand(1, 16) == 2` und so weiter verwendet. Das hat auch funktioniert, sodass nach Zufallsprinzip eine der 16 Versionen angezeigt wird. Aber wie kann ich dafür sorgen, dass der nächste Proband nur noch aus den verbleibenden 15 Versionen zieht und erkannt wird, welche Version ausgeschlossen werden muss?

In meinem zweiten Versuch habe ich nur eine Fragegruppe mit 16 Fragen für die 16 Texte erstellt und mithilfe von Platzhaltern die 16 Versionen pro Text generiert. So wurden alle 16 Texte angezeigt, und es wurden zufällig immer andere Textversionen angezeigt. Allerdings wurde hier nicht berücksichtigt, dass der vorherige Proband bereits eine Version verwendet hat, und es erfolgte kein Ziehen ohne Zurücklegen.

Leider darf ich dir die Texte nicht senden, da es sich um ein Uni-Projekt handelt und vertraulich ist. Hier ist jedoch der JavaScript-Code, den ich beim zweiten Versuch unter meinen Text eingefügt habe:

```html
<script type="text/javascript">
function getRandomElement(arr) {
return arr[Math.floor(Math.random() * arr.length)];
}
var placeholders = {
"(My/Our)": ["My", "Our"],
"(Germany/China)": ["Germany", "China"],
"(achieved / did not achieve)": ["achieved", "did not achieve"],
"(with/without)": ["with", "without"]
};
var text = document.getElementById("dynamicText").innerHTML;

for (var placeholder in placeholders) {
var replacement = getRandomElement(placeholders[placeholder]);
text = text.replace(placeholder, replacement);
}

document.getElementById("dynamicText").innerHTML = text;
</script>
```

Mit diesem JavaScript konnte ich arbeiten. Nach langem Ausprobieren denke ich jedoch, dass es allein mit LimeSurvey ohne zusätzliche Programme nicht möglich ist, diesen Wunsch vollständig umzusetzen. Da es ja nicht möglich ist, einzustellen, welche Version der vorherige Proband gezogen hat und diese beim nächsten Durchgang auszuschließen. Ich kämpfe nun schon länger mit diesem Problem und verzweifle langsam, da ich keine Lösung finde.

Zusätzlich möchte ich anmerken, dass ich bisher noch nicht genau weiß, ob ich Zugriff auf JavaScript habe, da das Projekt über einen Uni-Server durchgeführt werden soll und ich bisher noch keinen Zugang habe. Derzeit arbeite ich mit der freien Version von LimeSurvey und weiß nicht ob diese anders ist.

Ich bedanke mich vielmals im Voraus für deine Hilfe! Und entschuldige mich für die Umstände 
Last edit: 4 months 2 weeks ago by ERed3456.

Please Log in to join the conversation.

  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
4 months 2 weeks ago #265991 by Joffm
Naja, noch sind wir uns ja einig.
Ich habe es für einen Text gezeigt; die anderen sind ja analog.

Und dass Deine Idee mit der zyklischen Zuweisung in Praxen nicht funktioniert, wurde schon erklärt.
Natürlich kannst Du mit dem seit Version 5.x vorhandenen Plugin "statFunctions" und einem kleinen Script "spielen" (mit dem Wissen, dass Abbrüche es ad absurdum führen).

Ich bevorzuge immer noch einen "least filled" Ansatz.

So, jetzt schicke einmal den lss Export Deines Werkes.
Dann wissen wir wenigstens schon einmal ungefähr, mit welcher Version Du arbeitest.

Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless
The following user(s) said Thank You: ERed3456

Please Log in to join the conversation.

  • ERed3456
  • ERed3456's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
4 months 2 weeks ago #265995 by ERed3456
Replied by ERed3456 on topic Hilfe bei der Umsetzung für ein Uni-Projekt
Danke für deine schnelle Antwort! Ich habe versucht, meine Umfrage etwas abzuändern und herunterzuladen, und hoffe, dass ich es richtig gemacht habe. Es ist vor allem wichtig, dass ich das Problem mit dem Ziehen ohne Zurücklegen gelöst bekomme.

Please Log in to join the conversation.

  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
4 months 2 weeks ago #265997 by Joffm
Ich habe noch einmal nachgedacht.

Und zwar über Dein Vorhaben des "zufällig Herausnehmens ohne Zurücklegen".
Wie Du schon schriebst

Da es ja nicht möglich ist, einzustellen, welche Version der vorherige Proband gezogen hat und diese beim nächsten Durchgang auszuschließen. Ich kämpfe nun schon länger mit diesem Problem und verzweifle langsam, da ich keine Lösung finde.

Da LimeSurvey ja keinerlei Kenntnis hat über die Vorgänge bei früheren Teilnehmern (wieso sollte es auch?), muss also etwa anderes her.

1. Der "ajax-call".
Damit wird ein externes script (meinetwegen in php, oder einer anderen Sprache) aufgerufen, welches eine ebenfalls externe Datenbank abfragt und das Ergebnis an LimeSurvey zurückgibt.
Da könnte ich mir vorstellen, dass in der Datenbanktabelle 16 Spalten sind mit anfänglich jeweils 16 Elementen.
Bei einem Aufruf wird nun für jede Spalte mit einer Zufallszahl von 1 bis zur noch in der Spalte befindlichen Anzahl ein Element ausgewählt und aus der Spalte gelöscht.
Wenn die Spalte irgendwann leer ist, wird sie wieder in den Anfangszustand versetzt.

Das ist relativ leicht zu implementieren.
Wenn ich aber von "Uni-Projekt" lese, bezweifle ich, dass Du irgendwelche Rechte bekommen wirst, diese Datenbank und das script anzulegen.
Abhilfe könnte sein: Du mietest Dir ein Web-Hosting (Strato, IONOS, usw.) und erstellst die Datenbank dort.
In LimeSurvey sähe es so aus:
Code:
<script type="text/javascript" charset="utf-8">
$(document).on('ready pjax:scriptcomplete',function(){
   $.post('https://www.myServer/myScript.php' , { para1: "{para1}", para2: "{para2}" },function(data) {
        $('#question{QID} input[type="text"]').val(data)
    });
});
</script>


Und die php-Seite sieht dann irgendwie so aus
Code:
<?php
$para1 = $_POST["para1"];
$para2 = $_POST["para2"];
 
// Irgendetwas wird gemacht (Datenbankverbindung, SQL-Abfrage, usw und $result berechnet
// und hier zurückgegeben
echo $result;
?>

Es wird also - in einer Frage vom Typ "kurzer Text" - ein script aufgerufen, falls nötig können Parameter übergeben werden, und im Textfeld der Frage wird das Ergebnis gespeichert.

ABER: Was ist das Ergebnis?
Die 256 Möglichkeiten werden in zufälliger Reihenfolge ausgespuckt, d.h. nach 256 Durchläufen war jede Kombination einmal an der Reihe (einmal abgesehen von der Tatsache, dass einige Umfragen gar nicht abgeschlossen, sondern irgendwo zwischendurch abgebrochen wurden)

2. SAVEDID
LimeSurvey hat eine Information über den vorherigen Teilnehmer, nämlich die SAVEDID
Statistisch gibt es keinen Unterschied zwischen der oben gezeigten zufälligen Reihenfolge und der natürlichen Reihenfolge 1,2,3,...255,256 gibt (nach 256 Durchläufen war jede Kombination einmal "dran").
Stell Dir einfach vor, Lieschen Müller startet den Fragebogen 2 Sekunden vor Karl Meier; damit erhalten beide eine bestimmte Kombi zugeteilt.
Hätte Lieschen noch einmal am Kaffee genippt, hätte sie erst später als Karl eine (andere) Kombi zugeteilt bekommen. Der Zufall liegt hier also in der Zeit.
Also können wir sie nutzen.
Also einfach mit {SAVEDID-256*floor((SAVEDID-1)/256)}
Alles dies ist auch beschrieben in meinem "Tutorial 4: Gleichungen, Zufall,...", Kap. 2 (hier im deutschen Teil, Seite 11,12,13,... einfach gucken).

Damit erhältst Du eine Zahl von 1-256, die genau einer Kombination der 16 Sätze mit jeweils einer der 4x2 Ausprägungen entspricht.

Joffm

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

Please Log in to join the conversation.

  • holch
  • holch's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
4 months 2 weeks ago #265999 by holch
Abgesehen von den schwierigkeiten bei der technischen Umsetzung frage ich mich gerade, wie und was man da analysieren will.

Wie gross ist denn die Stichprobe, damit man da vergleiche anstellen kann?

Wenn du die Probanden kennst und per Email einladen kannst, dann könntest du die Verteilung der Texte im vorhinein bestimmen und dann via token und custom variables die entsprechenden Texte anzeigen lassen.

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.

  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
4 months 2 weeks ago - 4 months 2 weeks ago #266006 by Joffm
Möglicherweise bin ich etwas verwirrt.
Liegt wohl daran, dass es 16 Texte geben soll, jeder aber auch 16 Variationen.
Der Teilnehmer soll alle 16 Texte sehen.
Soll er dann in jedem Text dieselbe Variation sehen, also eine der 16 möglichen?
Und die nächsten sehen nur noch eine der 15, 14, 13,... restlichen?
Wie gesagt, es ist vom statistischen Standpunkt her völlig schnuppe, ob die Reihenfolge 7,4,1,113,15,11,... ist, oder 1,2,3,4,.
Das liegt doch auch daran, wie Du die Variationen durchnummerierst.

Aber ich habe in der Zwischenzeit die Lösung mit dem ajax-call mal als Fingerübung angelegt.
Läuft, wie sie sein soll.

Und auch mit der Funktion "statCountif", bzw. dem Plugin "getStatInSurvey" könntest Du dies wohl irgendwie bewerkstelligen.
Siehe dazu mein "Tutorial 3: Gimmicks", Kap. 3.2.2. / 3.2.3.
Du zählst einfach das bisherige Vorkommen . Alle Werte, die kleiner sind als das Maximum, kommen wieder in die Urne.
Ist ja klar:
Wenn anfänglich zufällig ein 5 und eine 8 gezogen wurden, wirst Du eine Häufigkeit von 1 für "5" und "8" erhalten, die übrigen haben eine Häufigkeit von "0", sind also noch in der Urne.
Dann wird die "13" gezogen, damit hat auch sie eine Häufigkeit von 1, usw.
Im Grunde eben ein "least filled".

Und noch eines: ein lsg-Export ist kein lss-Export.
Diese sind bei uns nicht beliebt.
Nicht nur, dass lsq und lsg sprachsensitiv sind - sie können nur in eine Umfrage mit derselben Basissprache importiert werden, es fehlen auch - manchmal wichtige - umfrageweite Einstellungen.

Ich habe die Gruppe trotzdem einmal importiert.
Ich sehe aber nur einen Satz mit den entsprechenden Variationen
My/Our team is in Germany/China. The team achieved/did not achieve remarkable success in the competition with/without effective strategies.
Davon soll es also noch 15 andere geben?
Und jetzt noch einmal: Jeder Satz eine andere Variation, oder jeder Satz dieselbe zufällige aus den 16?

Joffm

P.S. @holch: Zu Auswertungen äußere ich mich nicht mehr.
Aber da die Stichprobe ja wirklich sehr groß sein muss, habe ich eher nicht an eine geschlossene Umfrage gedacht.

Hier ein Ergebnis nach 6 Durchläufen







Und in der Datenbank sind dann nur noch die restlichen Werte. Um nicht alle Werte zweistellig anlegen zu müssen, habe ich sie durch Buschstaben ersetzt
A=1
B=2
C=3
...

 

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 4 months 2 weeks ago by Joffm.

Please Log in to join the conversation.

  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
4 months 1 week ago #266018 by Joffm
So, und jetzt noch eine Lösung - ausschließlich mit ExpressionScript:

Erstelle eine Frage vom Typ "list(radio)" (Q2a) mit 16 Optionen (1,2,3,4,...) - diese speichert die letztendlich gewählte Zahl.
So, jetzt geht es los
In der "Kalkulationsgruppe" (hier "G3") wird ein "Hilfscontainer" angelegt, einfach eine Frage "mehrfache Zahleingabe" mit 16 Teilfragen (Q3a)
1. "eqQ3a": In einer Frage vom Typ "Gleichung" wird die Häufigkeit der einzelnen Optionen der Frage Q2a abgefragt und in die einzelnen Felder des "Containers Q3a geschrieben.
Dazu dient die Funktion "statCountif"
{Q3a_1=statCountIf(Q2a.sgqa, "1",0)}
{Q3a_2=statCountIf(Q2a.sgqa, "2",0)}
{Q3a_3=statCountIf(Q2a.sgqa, "3",0)}
...
{Q3a_15=statCountIf(Q2a.sgqa, "15",0)}
{Q3a_16=statCountIf(Q2a.sgqa, "16",0)}


2. "eqMin": Es wird das Minimum der dort eingetragenen Werte bestimmt. Klar, wenn beim ersten Lauf die "5" gezogen wurde, hat diese nun de Häufigkeit "1", die restlichen "0" - nur diese werden berücksichtigt.
{min(that.Q3a)}

3. "eqList": Alle Werte des "Containers" mit dieser Häufigkeit werden zu einem String zusammengefasst (hier wieder die Benutzung von Buchstaben, um nur mit einstelligen Objekten umgehen zu müssen)
{join(if(Q3a_1==eqMin,'A',''),if(Q3a_2==eqMin,'B',''),if(Q3a_3==eqMin,'C',''),...,if(Q3a_15==eqMin,'O',''),if(Q3a_16==eqMin,'P',''))}

4. "eqRand": Es wird eine Zufallszahl erzeugt von 1- Länge des Strings
{if(is_empty(self),rand(1,strlen(eqList)),self)}

5. "eqZahl" : Es wird der an dieser Stelle befindliche Buchstabe genommen.
{substr(eqList,eqRand-1,1)}

6. "eqQ2a" Die "list(radio)"-Frage wird mit diesem Wert besetzt (Hier wieder die Rückübersetzung von Buchstabe zu Zahl)
{Q2a=if(eqZahl=="A",1,if(eqZahl=="B",2,if(eqZahl=="C",3,if(eqZahl=="D",4,if(eqZahl=="E",5,if(eqZahl=="F",6,if(eqZahl=="G",7,if(eqZahl=="H",8,if(eqZahl=="I",9,if(eqZahl=="J",10,if(eqZahl=="K",11,if(eqZahl=="L",12,if(eqZahl=="M",13,if(eqZahl=="N",14,if(eqZahl=="O",15,if(eqZahl=="P",16,0))))))))))))))))}

Hier meine Baumstruktur. Natürlich werden sämtliche Fragen versteckt.
 

Damit hat man nun Bedingungen wie
Q2a==12 um den Satz mit der entsprechenden Variationen anzuzeigen

Und es ist auch klar, dass ein Test nur mit aktivierter Umfrage erfolgreich ist, da ansonsten ja gar keine Daten vorhanden sind.

Joffm

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

Please Log in to join the conversation.

Moderators: holchJoffmtpartner

Lime-years ahead

Online-surveys for every purse and purpose