Welcome to the LimeSurvey Community Forum

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

Problem mit Randomisierung

  • Shanrai
  • Shanrai's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
2 months 6 days ago - 2 months 6 days ago #256823 by Shanrai
Problem mit Randomisierung was created by Shanrai
LimeSurvey version: 5.6.50+240109 
Own server or LimeSurvey hosting: Server wird von meiner Uni gehostet
Survey theme/template: fruity


Hallo!
Ich habe folgendes Problem:Ich möchte zwischen 6 Gruppen randomisieren, aber ich benötige eine Randomisierung, die so gleichmäßig wie möglich ist. Also nicht z.B. 20 Personen in Gruppe 1, 30 in Gruppe 2 und so weiter. 

Ich habe folgendes Skript gefunden, aber ich habe Schwierigkeiten, es zum Laufen zu bringen: [url] forums.limesurvey.org/forum/design-issue...en-conditions#116631 [/url]

Die Frage-ID, in der ich dieses Skript ausführen möchte, heißt "randnumber". Alle Fragegruppen haben die Bedingung randnumber == 1, randnumber == 2 und so weiter. Ich habe das Skript im Quellcode meiner Frage eingefügt.

ChatGPT sagt, ich solle  "var thisQuestion = $('#question{QID}');" in "var thisQuestion = $('#question{randnumber}');" ändern, aber keine der beiden Optionen funktioniert. 

Vielleicht übersehe ich hier etwas offensichtliches? 

Über jede Hilfe würde ich mich freuen!

Beste Grüße
Last edit: 2 months 6 days ago by Shanrai.

Please Log in to join the conversation.

  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
2 months 6 days ago #256840 by Joffm
Replied by Joffm on topic Problem mit Randomisierung
Hallo,
nee, nicht wirklich
Das script, welches Du zeigst, ist mehr als 9 Jahre alt. Heute wird so etwas mit einer schlappen Funktion erledigt.
Nämlich in einer Frage vom Typ Gleichung, welcher Du dann den Code "randnumber" geben kannst:
Hier schon die abgesicherte Version: {if(is_empty(randnumber),rand(1,6),randnumber)}

Lies dazu einmal mein "Tutorial 4: Gleichungen, Zufall", welches auf Dein Szenario eingeht. Insbesondere werden dort einige Ideen bezüglicvh der Gleichverteilung aufgezeigt.
Findest Du hier im deutschen Teil, auf einer der folgenden Seiten.

Joffm

P.S. Wenn es um LimeSurvey geht, kannst Du Dir von ChatGPT viele nette Gute-Nacht-Geschichten erzählen lassen, aber keine vernünftige Antwort erwarten.
Wie auch hier; für uns ist es nur ein Quell der Heiterkeit.

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

Please Log in to join the conversation.

  • Shanrai
  • Shanrai's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
2 months 6 days ago - 2 months 6 days ago #256869 by Shanrai
Replied by Shanrai on topic Problem mit Randomisierung
Vielen Dank für die Hilfe. 

Ich habe mir mal das Tutorial angeschaut und versucht die "leastFilled"-Methode für LS5.x umzusetzen, bekomme aber in der Fragenübersicht für die Gleichungen "statCountIf" den Fehler "Undefinierte Funktion" angezeigt, ich gehe daher davon aus, dass in meiner Installation (über die Uni) das statFunctions Plugin nicht installiert ist. 

Grundsätzlich ist das beschriebene Vorgehen mit {if(is_empty(randnumber),rand(1,6),randnumber)} auch möglich und vorstellbar, wenn ich dann aber bspw. feststelle, dass Gruppe 3 und 5 schon gut gefüllt sind und in den anderen Gruppen noch Antworten fehlen hätte ich ein Problem. Gibt es für solche Fälle eine praktikable Lösung? 

Die im (sehr alten) Skript genutzte Lösung mit einem Array fand ich daher relativ elegant, geht sowas mit den Gleichungen nicht mehr? 
 
Last edit: 2 months 6 days ago by Shanrai.

Please Log in to join the conversation.

  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
2 months 6 days ago - 2 months 6 days ago #256872 by Joffm
Replied by Joffm on topic Problem mit Randomisierung
Hallo,

Die im (sehr alten) Skript genutzte Lösung mit einem Array fand ich daher relativ elegant, geht sowas mit den Gleichungen nicht mehr? 

Natürlich geht das; zeige ich unten.

Zunächst gesagt: Zufall bleibt Zufall.
Wir alle haben in der Schule mit dem Galton-Brett gespielt und damit die Binomialverteilung gelernt.
D.h. es ist wurscht, wie Du die Zufallszahl bestimmst. Das Ergebnis ist irgendwie verteilt Und nach dem Gesetz der großen Zahl wird es prozentual immer besser.

Gut, das nebenbei.

 wenn ich dann aber bspw. feststelle, dass Gruppe 3 und 5 schon gut gefüllt sind und in den anderen Gruppen noch Antworten fehlen hätte ich ein Problem.

Das ist doch kein wirkliches Problem.

1. Bezahlst Du die Leute?
Wenn nicht, lass es einfach laufen, bis alle Gruppen voll sind.
Eine gewisse Overquota benötigst Du sowieso. Stichwort "Qualitätssicherung"
Denn es gibt immer irgendwelche Hanseln und Spaßvögel, seien es "Speeder", "Justifier", "Happy Clicker" oder Leute, die mit "Orig-Antworten" glänzen wollen oder in jeder offenen Frage ihr Weltbild zu Besten geben. Die musst Du ja rausschmeißen.
Und was dann noch überzählig ist, lässt Du Deine Oma per Zufall rausschmeißen.
Die Oma ist eine Person, die nun wirklich gar nichts mit der Umfrage am Hut hat, und einfach blind sagt, der und der  fliegt raus.

2. Eben doch javascript (Nebenbei gefragt: Hast Du die Rechte, javascript einzusetzen? Ist bei Uni-Installationen oft nicht der Fall)
Ist im Tutorial, Kap. 3.2.1.
Dort wird zwar "x out of y" gezeigt, ist aber analog auf Deine Sache anzuwenden.
Frage vom Typ "kurzer Text" und
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, hier Zahlen von 1 - 6
  var arr = [1,2,3,4,5,6];
 
  arr = shuffle(arr);
  $('#question{QID} input[type="text"]').val(arr[0]);
  $('#question{QID}').hide();
});
</script>


Und wenn eine Gruppe voll ist, entfernst Du einfach die Zahl aus dem Array.

3. Falls Du keine Rechte hast, ist es ja ein Einfaches dies mit drei Fragen vom Typ "Gleichung" zu ersetzen
1. "eqBase"
{123456}

2. "eqRand"
{if(is_empty(eqRand,rand(1,strlen(eqBase),eqRand)}
Erzeugt also eine Zufallszahl von 1 bis zur Länge des Textes in eqBase.

3. "eqZahl"
{substr(eqBase,eqRand-1,1)}
Greift sich aus eqBase die Zahl heraus, die an der Stelle eqRand steht (-1, weil substr bei 0 anfängt)

Damit erhältst Du dasselbe wie mit dem javascript.
Wenn eine Gruppe voll ist, änderst Du einfach den Eintrag in "eqBase", z.B. {1346}

Es gibt also sehr viele Möglichkeiten,. wobei ich aus alter Marktforschungserfahrung die erste präferiere.
Du kannst ja einmal in Excel oder OpenOffice testen, welche Verteilungen Du bei - sagen wir - 600 Teilnehmern erwarten kannst.
Das machst Du zehnmal und bekommst ein Gefühl, ob sich der Aufwand überhaupt lohnt.
Oder Du guckst einfach in irgendwelche wissenschaftliche Tabellen, um das 95% Vertauensintervall zu bestimmen.

Falls die Teilnehmer bezahlt werden, dann würde ich eher (3) als (2) benutzen.

So, das war recht schnell heruntergeschrieben.

Das Beste ist - falls Du noch Probleme hast - den lss Export dieser relevanten Fragen zu schicken. 

Joffm


 

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 2 months 6 days ago by Joffm.
The following user(s) said Thank You: Shanrai

Please Log in to join the conversation.

  • Shanrai
  • Shanrai's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
2 months 6 days ago - 2 months 6 days ago #256876 by Shanrai
Replied by Shanrai on topic Problem mit Randomisierung
Perfekt, vielen Dank! 

Der javascript-Ansatz funktioniert super, die Berechtigung habe ich glücklicherweise. 

Das "Problem" mit meiner Untersuchung ist, dass ich im Rahmen einer Masterarbeit eine relativ enge Gruppe an Personen habe, die sich für die Untersuchung eignen. In meinem Fall eben nur Studierende der Fachbereiche Psychologie & Psychotherapie und Personen, die in einer psychologisch tätigen Einrichtung arbeiten und irgendeine Art von Ausbildung in dem Bereich haben. Incentives für die Umfrage können wir, außer ein paar Gutscheine (und im Falle der Studierenden Versuchspersonenstunden), nicht anbieten. 
Daher habe ich Glück, wenn ich gerade so auf 158 vollständige & von Ausreißern/"immer-in-die-Mitte-Klickern" usw. bereinigten Datensätze komme (die ich für eine ANOVA brauche, falls die angenommene Effektstärke hinhaut). Und das ist der Grund, warum ich möglichst gleichmäßig auf die Gruppen verteilen muss. Grundsätzlich wäre es natürlich nicht so wild, wenn ich am Ende wegen zu kleiner Stichprobe keine (signifikanten) Effekte finde, man hofft aber doch immer, dass man etwas herausbekommt. 

Wenn ich das mit Excel simuliere komme ich teils auf nur 9 VP in einer Gruppe, während eine andere 40 VP hat - da macht das schon Sinn die Studie ein wenig enger im Blick zu behalten und zwischendurch mal anzupassen. 

Wenn ich dann sehe, dass ich in Gruppe 1, 2 und 4 meinetwegen 15-20 "volle" Datensätze habe, kann ich die Gruppen erstmal rausnehmen und abwarten bis die anderen Gruppen aufgeholt haben. Das sollte ja mit dem Skript wunderbar funktionieren :) 

Danke nochmal für die schnelle und unkomplizierte Hilfe, das ist echt Gold wert! 
Last edit: 2 months 6 days ago by Shanrai.

Please Log in to join the conversation.

Moderators: Joffm

Lime-years ahead

Online-surveys for every purse and purpose