"Zyklische Zuordnung" zu Fragen / Gruppen

More
1 year 3 months ago #211405 by Joffm
Oft wird der Wunsch gehegt, die Zuordnung von Umfrageteilnehmern zu Gruppen nicht mittels der Funktion "rand(x,y)" zu realisieren, sondern zyklisch.
Soll heißen, der erste Teilnehmer (TN) fällt in Gruppe 1, der zweite in Gruppe 2, der dritte in Gruppe 3, der vierte wieder in Gruppe 1, usw.
Damit möchte man die Zufälligkeit der Zufallszahl vermeiden, die eben gerade deswegen bei kleinen Stichproben ungleiche Besetzungen der Gruppen liefern kann.

Diese Idee klingt zunächst einmal plausibel, hat aber auch Tücken.

Denn wie geht man vor?
Bei jedem TN wird am Anfang geschaut, wieviele bereits die Umfrage beantwortet haben, und mittels der "modulo"-Funktion wird die Gruppe berechnet.
Nehmen wir also an, die Umfrage wird gestartet, der erste TN beginnt und wird der Gruppe 1 zugeordnet.
Nun beginnt auch der zweite TN - in welche Gruppe muss er?
Wenn TN 1 seinen Fragebogen abschließt, muss TN 2 in Gruppe 2. Aber wen TN 1 die Beantwortung abbricht?
Dann müsste TN 2 in Gruppe 1. 

Dies bedeutet, solange nicht der erste TN seine Umfrage abgeschlossen hat, werden alle folgenden ebenfalls in Gruppe 1 landen.
Dies ist besonders unangenehm, wenn TN sofort nach Erhalt der Einladung mit der Beantwortung loslegen. (Findet man häufig bei Panelmitgliedern; "Sofort antworten, sonst ist die Quote vielleicht schon voll, und ich verdiene kein Geld"). 
Hier muss man auch auf die Dauer der Beantwortung schauen.
Bei kurzen (5min) Umfragen ist es weniger dramatisch.
Und natürlich sendet man Einladungen langsam in Teilen aus.

Nun könnte man sich denken "Gut, rechne ich nicht nur die vollständigen Befragungen, sondern alle".
Das geht auch - sogar noch leichter als alleinige Berücksichtigung der "Completes" - aber hier könnte, wie der Zufall so spielt, eine große Anzahl derer, die der Gruppe 2 zugeordnet werden, die Befragung nicht beenden.
Und damit haben wir keinen Vorteil gegenüber der Benutzung einer Zufallszahl.

Trotzdem will ich einmal beide Verfahren vorstellen.

1. Berücksichtigung "aller" Teilnehmer
Da dies das weniger aufwendige Verfahren ist, kommt es zuerst.
In der Antworttabelle wird eine laufende Nummer erzeugt, die sogenannte SAVEDID.
Diese kann man mittels dieser Formel benutzen
{SAVEDID-x*floor(SAVEDID/x)}  wobei x die Zahl der gewünschten Gruppen ist.

2. Berücksichtigung "vollständiger" Teilnehmer
LimeSurvey-User, die keine plugins installieren können, können dies überspringen..
Also es gibt das plugin "getStatInSurvey", mit welchem man einige kumulierte Daten der Gesamtumfrage anzeigen kann, z.B. Häufigkeit, Prozentzahl, Mittelwerte von Antworten.
gitlab.com/SondagesPro/ExportAndStats/getStatInSurvey
Dies ist zunächst einmal gedacht, um diese Werte anzuzeigen.
Um die Werte auch in einer Gleichung benutzen zu können, muss man einen kleinen Umweg gehen.

Man erzeugt eine Frage vom Typ "kurzer Text" mit folgendem javascript im Fragetext (Quellcode-Modus)
<script type="text/javascript" charset="utf-8">
$(document).on('ready pjax:scriptcomplete',function(){
  var total=Math.floor({' [Q0.nb]'});
  $('#question{QID} input[type="text"]').val(total);
  $('#question{QID}').hide();
});
</script>

Hierbei soll Q0 der Code genau dieser Textfrage sein.

Dann kann man eine Frage vom Typ Gleichung anschließen (diese darf nicht auf derselben Bildschirmseite dargestellt werden)
mit folgendem Inhalt:
{1+Q0-x*floor(Q0/x)}   ebenfals wieder x= Anzahl der Gruppen
Und das führende "1+" dient nur dazu, den Zyklus bei "1" starten zu lassen (1,2,3,4,1,2,...  statt 0,1,2,3,0,1,...)

Es gibt also Alternativen zur Verwendung der Zufallszahl. Ob diese "besser" sind, muss man für sich selbst entscheiden.

Dazu möchte ich auf meine häufige Erwähnung des "Feintunings" von Zurodnungen mittels Zufallszahlen hinweisen.
Man erzeugt nicht eine Zufallszahl von 1-2, sondern von 1-100
mit Startzuordnung
Gruppe 1: zufall<51
Gruppe 2: zufall>50

Wenn dann auffällt, dass die Verteilung schief wird, Gruppe 1 schon recht überbesetzt,
ändert man in so etwas wie
Gruppe 1: zufall<30
Gruppe 2: zufall>29
Dies geht auch in einer aktivierten Umfrage.

Joffm


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

Please Log in to join the conversation.

More
1 year 3 months ago #211424 by holch
Wow, danke für die Mühen. Das wäre eigentlich einen Eintrag in das Wiki wert.

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
5 months 3 weeks ago - 5 months 3 weeks ago #222760 by koegllar
Danke für diese Erklärung!

Ich habe dazu eine Nachfrage. Ich möchte mit LimeSurvey eine Umfrage kodieren, in der es eine Experimental und eine Kontrollgruppe geben soll. In beiden Gruppen sollen gleich viele Teilnehmer sein. Nur die Experimentalgruppe soll ein Treatment erhalten. Beide sollen die selben Fragen erhalten.

Meine erste Frage habe ich als "Zuteilung"  kodiert (equation type) und im Fragetext {if(is_empty(Zuteilung), rand(1, 2), Zuteilung)} geschrieben.
Bei dem Treatment ist die Bedingung: Zuteilung==1

Wie kann ich aber nun das Antwortverhalten je nach Gruppe 1 oder 2 nachvollziehen? Kann ich so bei der Auswertung sehen, wer das Treatment erhalten hat? Oder muss ich Gruppen anlegen?

 

Danke vorab!
Attachments:
Last edit: 5 months 3 weeks ago by koegllar.

Please Log in to join the conversation.

More
5 months 3 weeks ago #222764 by holch
Naja, je nachdem ob in der Frage "Zuteilung" 1 oder 2 ausgewürfelt wurde, erhält der Teilnehmer halt ein "Treatment" oder nicht. Da wir nicht wissen, was das "Treatment" ist, können wir da nicht viel dazu sagen, wie man dieses Treatment dann anzeigt. Da müsstest du dann erklären, was das Treatment sein soll.

Wer das Treatment erhalten hat, kannst du dann ja auch in den Daten in der Frage "Zuteilung" sehen, da du da ja entweder 1 oder 2 stehen hast.

In beiden Gruppen sollen gleich viele Teilnehmer sein.


Das wird dir aber deine zufällige Zuteilung nicht 100% garantieren. Denn, wie der Name schon sagt, ist die Zuteilung zufällig. Theoretisch, könnten wirklich ALLE Teilnehmer nur einer der beiden Gruppen zugeteilt werden. Denn der Zufall ist ja unabhängig. Für jeden neuen Teilnehmer ist die Chance 50% einer bestimmten Gruppe zugeteilt zu werden. Je grösser deine Fallzahl, desto höher die Chance, dass die beiden Gruppen relativ gleichmässig gefüllt sind (Gesetz der grossen Zahlen). Aber wenn du z.B. 100 Teilnehmer hast, dann ist z.B. eine Verteilung von 57 zu 43 durchaus nichts ungewöhnliches. da müsstest du dann halt am Ende der Umfrage manuell eingreifen, sprich, wenn eine Gruppe die gewünschte Anzahl erreicht hat, einfach die Formel anpassen, dass nur noch die andere Gruppe zugewiesen wird.

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
5 months 2 weeks ago - 5 months 2 weeks ago #222797 by koegllar
Vielen Dank für die schnelle Antwort.

Die Teilnehmer der Experimentalgruppe sollen mit einem Statement eines Politikers geprimed werden. Dazu habe ich nach der Zuteilung (versteckte Frage) und der Situationsbeschreibung (Fragetyp Textanzeige) eine weitere Frage eingefügt (ebenfallls Fragetyp Textanzeige) mit der Bedingung Zuteilung==1. Muss ich die Experimental und Fragegruppe noch gesondert anlegen, wenn die angezeigten Fragen dieselben sind? Oder reicht das so?



Und zu der Zuordnung:
Muss ich um eine 50/50 Zuteilung zu erreichen, meine aktuelle Formel {if(is_empty(Zuteilung), rand(1, 2), Zuteilung)} einfach durch {SAVEDID-2*floor(SAVEDID/2)} ersetzen? Oder muss ich hierzu noch etwas beachten? 

Gibt es vielleicht eine Beispielumfrage, wo jemand schon mal genau so etwas gebaut hat?

Danke vorab.
Attachments:
Last edit: 5 months 2 weeks ago by koegllar.

Please Log in to join the conversation.

More
5 months 2 weeks ago #222802 by Joffm
Hallo,
Du hättest besser einen neuen Thread zu Deiner Frage aufgemacht, statt Dich an diesen alten anzuhängen mit einer Frage, die eigentlich nichts damit zu tun hat.

Wo liegt denn Dein Problem.
Alle Teilnehmer bekommen dieselben Fragen.
Und durch Deine Relevanzgleichung "Zuteilung==1" bei Frage "Treatment" sehen eben nur diejenigen diesen Text, bei denen die Variable "Zuteilung" eine "1" enthält.

Wie kann ich aber nun das Antwortverhalten je nach Gruppe 1 oder 2 nachvollziehen? Kann ich so bei der Auswertung sehen, wer das Treatment erhalten hat? Oder muss ich Gruppen anlegen?

Dies sind immer Fragen, bei denen ich zurückfragen möchte "Hast Du es ausprobiert?" (Umfrage aktiviert, Daten eingegeben, Antworten angeschaut)
Aber JA:
Du hast doch eine Frage "Zuteilung". Hier wird durch Deine Gleichung eine "1" oder eine "2" erzeugt.
Das ist ganz analog zu einer Einfachnennungsfrage mit den Antwortoptionen "1" und "2".
Also weißt Du, wer was gesehen hat. Und kannst diese als Trennvariable für alle Deine t-Tests oder was auch immer benutzen.

Jetzt aber zu Deiner letzten Frage:

Und zu der Zuordnung:
Muss ich um eine 50/50 Zuteilung zu erreichen, meine aktuelle Formel {if(is_empty(Zuteilung), rand(1, 2), Zuteilung)} einfach durch {SAVEDID-2*floor(SAVEDID/2)} ersetzen? Oder muss ich hierzu noch etwas beachten? 

In meinem Artikel steht ja am Anfang ausdrücklich, welche Probleme es auch bei der Benutzung der {SAVEDID} geben kann. Sie ist nicht wirklich besser.

Wie @holch schon schrieb:

da müsstest du dann halt am Ende der Umfrage manuell eingreifen, sprich, wenn eine Gruppe die gewünschte Anzahl erreicht hat, einfach die Formel anpassen, dass nur noch die andere Gruppe zugewiesen wird.

Das ist doch das Leichteste: Wenn die Treat-Gruppe voll ist, änderst Du die Formel in "Zuteilung" in:
  • {if(is_empty(Zuteilung), rand(2, 2), Zuteilung)}   (lange Version)
  • {2}  (kurze Version
Joffm

P.S.
Ich hoffe einmal, Du zeigst Die Umfrage "Frage für Frage"

 


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

Please Log in to join the conversation.

More
5 months 2 weeks ago #222805 by koegllar
Vielen Dank für diese Antwort.

Thematisch hat das doch etwas mit diesem Thread zu tun - vielleicht hilft es ja jemand anderem der eben auch mit zwei gleich großen Gruppen arbeiten möchte.
Und nein ich habe es noch nicht ausprobiert da ich ja derzeit noch an der Umfrage bastle und danach keine Antworten und Fragen mehr hinzugefügt werden können etc. 
Da ich das erste Mal mit LimeSurvey arbeite, fehlt mir einfach die Vorstellung, wie die Datenauswertung danach aussieht. Gut zu wissen, dass ich die Zuteilung dann als Trennvariable verwenden kann!

Wenn ich es richtig verstehe, habe ich soweit alles richtig kodiert und es müsste funktionieren? Ich denke ich werde dann wohl manuell eingreifen wie beschrieben.

p.s. ja, die Umfrage wird Frage für Frage angezeigt. 


Danke nochmal!

Please Log in to join the conversation.

More
5 months 2 weeks ago #222807 by paul.borsdorf
Kleiner Tipp zum Testen von Umfragen: Du kannst Deine Umfrage jederzeit aktivieren, testweise Daten eingeben, die Daten exportieren und die Umfrage dann wieder deaktivieren (Beim "Deaktivieren" werden auch alle testweise eingegebenen Daten wieder gelöscht). Danach kannst Du die Umfrage wieder bearbeiten. In diesem Video zeige ich es Schritt für Schritt: www.youtube.com/watch?v=q8hUFwGwHNI

Please Log in to join the conversation.

More
5 months 2 weeks ago #222808 by Joffm

und danach keine Antworten und Fragen mehr hinzugefügt werden können etc. 

Das ist natürlich nicht ganz richtig.
Nachdem Du so etwas getestet hast, deaktivierst Du natürlich wieder.
Mache ich immer, einfach um zu sehen, wie manche Variablen abgespeichert werden, somit wie sie in Gleichungen angesprochen werden müssen, wenn ich mir bei selten benutzten Dingen nicht sicher bin.

Ich hatte mir eben gewünscht, dass dieser Text als reine Information so stehen bleibt (er wird übrigens in meinem nächsten Tutorial über "Zufall und andere Fälle" noch einmal verwurstet.)
Und es sollte ja klar zeigen, dass diese anderen Ideen zwar anfänglich gut aussehen, aber keine Verbesserung bringen.

Und das Szenario "Experimental- vs. Kontrollgruppe ist hier wirklich zu Genüge durchgekaut.

Noch ein von uns hier auch oft gegebener Vorschlag:
Wenn Du die Teilnehmer nicht bezahlst, lass es laufen, bis Du in jeder Gruppe eine Überquote von 10% hast.
Du hast immer ein paar Hansel dabei, die die Sache nicht ganz ernst nehmen (Speeder, HappyClicker, Justifier bei Skalen, "Orig-Antworten", "Alternatives Bla-bla" bei offenen Nennungen), die Du dann herausschmeißen musst.
Wenn dann immer noch zu viele da sind, lass Deine Oma entscheiden, wer gelöscht wird.  

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