Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

0 votes

Hallo,
ich will eine Urne benutzten um einen zufälligen Datenbankeintrag zu wählen.
Soweit kein Problem, wird in er Anleitung gut erklärt und im Debugging scheint das zu funktionieren. Das Problem ist, dass, wenn ich es richtig verstehe die Urne zwischen allen Befragungsteilnehmern geteilt wird. Das hieße, dass keine zwei Teilnehmer den selben Eintrag zeihen können.
Das ist aber nicht, was ich will. Ist es möglich, die Urne zurückzusetzen, wenn ein Teilnehmer die Befragung beendet? Dann können zwar immer noch keine zwei Teilnehmer gleichzeitig den selben Eintrag ziehen, aber immerhin hintereinander wäre es möglich.
Verwandtes Thema: kann ich sicherstellen, dass der Schlüssel des Datenbank-Eintrags zusammen mit der Antwort in der Auswertung steht?
Idealerweise hätte ich seperate Auswertungstabellen für die verschiedenen Rubriken: Eine Für die Teilnehmer-Info und eine für den Rest.

in SoSci Survey (dt.) by s186862 (155 points)
edited by s186862

1 Answer

0 votes

Das hieße, dass keine zwei Teilnehmer den selben Eintrag zeihen können.

Das ist die Idee hinter der Urne bzw. dem Zufallsgenerator, korrekt. Zumindest in einer Runde. Wenn die Urne oder der Zufallsgenerator leer ist (und Sie es nicht per PHP-Code verhindern), dann geht es wieder von vorne los.

Was ist denn Ihr Ziel? Für gewöhnlich möchte man unterschiedliche Stimuli ja schon halbwegs gleichmäßig auf die Befragten verteilen.

Ist es möglich, die Urne zurückzusetzen, wenn ein Teilnehmer die Befragung beendet?

Sie können das Weglegen der gezogenen Zettel (also dass diese nicht mehr für anderen verfügbar sind) einfach deaktivieren, indem Sie beim urnDraw() den Parameter manergänzen. Beim Zufallsgenerator wäre das die uneingeschränkte Zufallsauswahl, die Sie im Zufallsgenerator einstellen müssten.

Aber wie gesagt: Für die meisten Anwendungsfälle ist das eher kontraproduktiv.

by SoSci Survey (223k points)
Die Umfrage soll wie folgt aussehen:
1. Seite: Der Teilnehmer gibt relevante info an (z.b. englisch-Kentnisse)
2. Seite: Der Teilnehmer bewertet beliebig viele Einträge der DB. Wenn fertig Sprung zu Seite 3
3. Seite: Selbsteinschätzung und Ende.
Ich glaube, wenn ich ohne Weglegen mache, bestände eine (~1:9000) Chance, dass der Teilnehmer 2 mal den selben Eintrag zieht.
Alternativ könnte ich auch die normale rand()-funktion verwenden, aber dann müsste ich mir über das verlassen der Seite hinweg merken, welche Nummern bereits gezogen wurden, und ich weiß nicht wie das geht (wenn ich Arrays verwende werden die zurückgesetzt, wenn ich die Seite refreshe oder wechsle. Ich gehe davon aus, dass man das verhindern kann, aber ich weiß nicht wie).
Der Sinn ist, dass die Umfrage eine Kontrollgruppe für Machine-Learning im Bereich Sarkasmus-Erkennung bildet.
Wenn die Urne bleibt wie sie ist wäre also in der Tat keine Katastrophe. Ich gehe davon aus, dass wenn ich es nicht verhindere, die Urne sich automatisch zurücksetzt, wenn sie leer ist.

Sollt ich für das Auswertungsproblem eine seperate Frage machen, wenn es soweit ist?
Wenn ich Ihr Design korrekt verstehe, dann haben Sie auch mit Urne/Zuallsgenerator ein gewisses Risiko: Wenn viele Personen gleichzeitig den Fragebogen ausfüllen, dann könnten alle anderen Optionen gezogen werden und anschließend geht es doch wieder von vorne los.

Wie viele Einträge haben Sie denn in der Datenbank? Wie viele Personen möchten Sie befragen? Arbeiten Sie mit einer Multi-Level-Struktur, also mit multilLevelDown()?

> Alternativ könnte ich auch die normale rand()-funktion verwenden, aber dann müsste ich mir über das verlassen der Seite hinweg merken, welche Nummern bereits gezogen wurden

Dafür gibt es eine bessere Lösung: Erstellen Sie zu Beginn ein Array mit allen Optionen (z.B. via dbKeys()), mischen Sie dieses Array mittels shuffle() und arbeiten Sie es dann von vorne weg ab. Das ist im Prinzip genau das was Sie suchen: Keine Wiederholungen innerhalb einer Person, ansonsten rein zufällig.

Aber seien Sie gewarnt: Bei einer uneingeschränkten Zufallsauswahl werden manche Ihrer Datenbank-Optionen überhaupt gar nie nicht gezogen. Andere mehrfach.

>  Ich gehe davon aus, dass wenn ich es nicht verhindere, die Urne sich automatisch zurücksetzt, wenn sie leer ist.

Genau ... und dann haben Sie eben auch nicht den Ärger der ungleichen Verteilung. Wenn nicht allzu viele Personen zeitgleich ausfüllen (gemessen an der Anzahl Optionen), sollte auch das o.g. Problem nicht auftreten.

Aber damit das funktioniert, werden Sie über eine Multi-Level-Struktur gehen müssen. Sonst gehen Ihnen schnell die Variablen aus.

> Sollt ich für das Auswertungsproblem eine seperate Frage machen, wenn es soweit ist?

Unbedingt :)

> eine Kontrollgruppe für Machine-Learning im Bereich Sarkasmus-Erkennung bildet.

Wow, da bin ich auf die Ergebnisse gespannt! Sarkasmus zu erkennen ist ja schon für Menschen oftmals schwer. Schicken Sie mir doch bitte eine kurze Notzi an die info@soscisurvey.de, wenn Sie Ergebnisse haben. Das interessiert mich!
Danke. Heißt das, die Urne setzt sich nicht innerhalb der Sitzung zurück?
Zum Verständnis, jeder Teilnehmer sieht "pro Frage" immer nur einen DB-Eintrag. Wenn der Bewertet wurde geht es aus Perspektive der Teilnehmer zur nächsten Frage (wie das im Back-end aussieht, kann dem ja egal sein).
Eine "geringe Auswahl" (die DB hat über 9000 Einträge), wäre also nur ein Problem, wenn ein Teilnehmer überhaupt keinen Eintrag ziehen würde.
Kann ich für zukünftige Fragen mein Projekt verlinken? Ich glaube meine Fehler werden leichter zu verstehen sein, wenn man sie sich ansehen kann?
> Danke. Heißt das, die Urne setzt sich nicht innerhalb der Sitzung zurück?

Das kann auch passieren - und zwar dann, wenn parallel in anderen Interviews zufällig gerade die letzten verfügbaren Zettel aus der Urnge gezogen wurden und Sie dann eine erneute Ziehung aus derselben Urne vornehmen.

> Kann ich für zukünftige Fragen mein Projekt verlinken? Ich glaube meine Fehler werden leichter zu verstehen sein, wenn man sie sich ansehen kann?

Ich befürchte, bis wieder mal jemand so etwas basteln möchte, ist Ihr Projekt schon lange offline gegangen.
Ich meinte so, dass wer auch immer mir hilft, nachlesen kann, was ich falsch mache, nicht als Referenz für Probleme die andere Leute haben könnten, wenn ich fertig bin.
Daraus schließe ich, dass Sie noch keine Lösung gefunden haben, mit der Sie zufrieden sein? Ihr Kommentar oben las sich so als ob Sie Ihre Wünsche für den Moment umgesetzt hätten?! Wenn nicht, dann legen Sie hier im Online-Support gerne eine neue Frage an (z.B. "related question" oben), wo Sie den Stand der Dinge nochmal kurz beschreiben und skizzieren, was noch nicht wunschgemäß funktioniert.
Ich gehe davon aus, dass die Chance, dass mehrere Personen gleichzeitig die Urne leer ziehen, und deshalb einer nur einen Error bekommt gering genug ist, damit ich sie in Kauf nehmen kann.
Die Chance, dass ich z.B.: die Multi-Level Struktur nicht ohne Hilfe hinbekomme ist hingegen bei fast 1. Da werde ich dann eine weitere Frage machen und in Ausreichendem Detail zu beschreiben, was ich falsch mache, könnte schwer werden -> Link auf mein Projekt (es hieß schließlich explizit in den AGB, dass das SoSci Team da rein schauen kann, auch wenn noch nichts öffentlich ist).
...