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 möchte eine Bilddatenbank kategoriesieren. Es geht um 30.000 Bilder, für jedes einzelne Bild sollen ein bis sieben Items beantwortet werden (Filterfragen). Dabei sollen jedem Teilnehmer nur 100 Bilder zur Bewertung angezeigt werden, jedes Bild muss nur einem Teilnehmer angezeigt werden. Der 300. Teilnehmer sollte also dann die letzten 100 Bilder gezeigt bekommen. Randomisierung ist nicht notwendig.

Mein Ansatz ist nach tagelangem Herumprobieren in etwa Folgender:
1. Ich lege eine "Datenbank für Inhalte" mit 300 Zeilen und je 100 Links zu den Bildern an (die ich dann mit image auf den Item-Seiten anzeigen möchte).
2. Mit einem Zufallsgenerator "ZG01" soll jedem Teilnehmer eine Zeile aus dieser Datenbank zugeordnet werden. Dabei soll jede Zeile nur einmal vergeben werden. (evtl. hilft hier randomUse()?)
3. Für die jeweils 100 zufällig zugeteilten Bilder (an die ich mich dbGet() irgendwie kommen sollte) soll dann jeder Teilnehmer in einem untergeordneten Fragebogen(?), der mit LoopToPage 100x wiederholt wird, die je nach Bildinhalt ein bis sieben Filterfragen-Items beantworten.

Mache ich hier soweit schon einen groben Denkfehler?
Meine Probleme sind vielfältig... aber die brennende Frage, an der ich gerade verzweifle ist folgende: Wie sorge ich dafür, dass ein Array (dbGet("ZG01")) der Reihe nach durch meine Items im untergeordneten Fragebogen geloopt wird?

Ich wäre höchst dankbar, wenn mir hier jemand weiterhelfen kann.

Viele Grüße

in SoSci Survey (dt.) by s138840 (110 points)

1 Answer

0 votes

100 Bilder pro Teilnehmer/in? Sie sind sehr optimistisch...

Ich lege eine "Datenbank für Inhalte" mit 300 Zeilen und je 100 Links zu den Bildern an

Das wäre eine Option. Aber Sie könnten auch darüber nachdenken, direkt 30.000 Bilder im Zufallsgenerator zu hinterlegen. Ich weiß aber ehrlich gesagt nicht, ob der diese Menge packt. Das müssten Sie testen.

evtl. hilft hier randomUse()

Das wird nicht notwendig sein. Lassen Sie stattdessen die Standardeinstellung "Gleichverteilung bei der Ziehung" und geben Sie durch Abbrecher verlorenen Sets einfach gegen Ende der Erhebung eine 0 bei der Zahl der Ziehungen.

der mit LoopToPage 100x wiederholt wird, die je nach Bildinhalt ein bis sieben Filterfragen-Items beantworten.

Das größte Risiko sehe ich darin, dass viele Teilnehmer/innen nach 20 Bildern abbrechen und Sie am Ende Ihre Listen nochmal neu machen müssen. Aber technisch kann man das so machen.

Wenn Sie die Variante mit 30.000 Bildern im Zufallsgenerator versuchen möchte: Dabei könnte man nach jedem Bild mit dem randomUse() abhaken, dass es beurteilt wurde. Wenn jemand abbricht, bekommt automatisch jemand anders die restlichen Bilder. Allerdings bin ich nicht 100%ig sicher, ob die doppelte Bewertung von Bildern bbei paraller Teilnahmer mehrerer Personen ausgeschlossen ist.

by SoSci Survey (238k points)
Danke für die schnelle Antwort!
Ich habe nun auf Seite 5 (die erste Seite im Loop) folgendes versucht:

question('ZG01');      // Zufallsgenerator hat pro Zeile einen Link zum Bild

$img = value('ZG01', 'label');
html('
  <div style="margin: 3em; text-align: center">
    <img src="'.$img.'" alt="" />
  </div>
');

Allerdings kommt nun die Fehlermeldung
"Fehler im Fragebogen (Seite 5)
Die Variable ZG01 gibt es in diesem Projekt nicht (siehe Variablen-Übersicht). Daher kann kein Antwort-Wert dafür ermittelt werden."


Es ist aber doch ganz offensichtlich ein ZG01 vorhanden! Direkt auf derselben Seite... Wo könnte das Problem liegen?
> ZG01 gibt es in diesem Projekt nicht

Das stimmt auch - sehen Sie mal in der Variablen-Übersicht nach :)

Tatsächlich heißt Ihre Variable - wenn Sie im Zufallsgenerator mehrere Werte ziehen - ZG01x1, ZG01x2 u.s.w. Das können sie mit id() automatisieren:

$img = value(id('ZG01', 1), 'label');

Die 1 können Sie dann ggf. durch eine Loop-Variable ersetzen:

$i = loopPage(10);
$img = value(id('ZG01', $i + 1), 'label');
Danke! Das hilft schonmal weiter. Es wird nun zumindest ein zufälliges Bild angezeigt. Allerdings habe ich direkt zwei neue Probleme.
1. Mit loopPage() wird immer die vorherige Antwort blau unterlegt (Ich nutze Auswahlfragen mit der Darstellung "Kärtchen"). Die Frage soll aber mit jedem Bild neu angezeigt werden...
2. Eigentlich muss ich loopToPage arbeiten, da für jedes Bild auf (maximal) 8 Seiten mit Filterfragen verschiedene Items abgefragt werden.
Mein Versuch sieht momentan auf allen 8 Seiten so aus:
$i = loopToPage('loopEnd', 15);
$img = value(id('ZG01', $i + 1), 'label');
[zusätzlich steht auf Seite 1 noch question('ZG01'); darüber]

Die erste Loop-Runde funktioniert wie gewünscht, aber dann wird immer wieder dasselbe Bild wiederholt und auch die zuvor ausgewählte Antwortoption wird jedes Mal schon blau unterlegt...

Wie bekomme ich das hin, dass der Loop tatsächlich in jeder Runde auf ein neues Bild zugreift?
Die Sache mit dem Loop habe ich mit $i = loopIndex() gelöst!

Allerdings bleibt noch die Frage, wie ich ab dem zweiten Loop-Durchlauf die Fragen wieder "auf Null" setzen kann, sodass nicht die vorherige Antwort vorab schon eingeloggt ist.
> Mit loopPage() wird immer die vorherige Antwort blau unterlegt

Das haben Sie ein größeres Problem als Sie denken: Tatsächlich zeigen Sie dieselbe Frage erneut und und überschreiben (!) die vorige Antwort.

Sie müssen bitte dafür sorgen, dass jedesmal eine andere Frage angezeigt wird. Wenn Sie in der Rubrik AU z.B. 10 Kopien der Auswahlfrage anlegen, könnte der Aufruf aussehen wie folgt:

question(id('AU', $i+1));
Vielen Dank! Das war wohl ein grundlegender Fehler, den ich nun beheben konnte. Es sieht schon ziemlich gut aus. Ein Problem habe ich nun aber noch:

Angenommen ich durchlaufe den Loop 3 Mal (also für drei verschiedene Bilder), dann hätte ich gern, dass die Antworten auf meine 5 Filterfragen in eine neue Zeile im Output geschrieben werden. Aktuell sehen meine Daten folgendermaßen aus (eine Zeile pro Person, nicht pro Bild):

Zufallsbild1 // Zufallsbild2 // Zufallsbild3 // Frage1_1 (für Z1) // Frage1_2 (für Z2) // Frage 1_3 (für Z3) // Frage2_1 (für Z1) // Frage2_2 (für Z2) // Frage2_3 (fürZ3) // usw...

Das ist natürlich super umständlich, wenn am Ende jede Person 100 Bilder bewertet und ich ewig lange Zeilen habe, anstatt Zeilen pro Bild... Lässt sich das irgendwie lösen, dass mit jedem Neubeginn des Loops in eine neue Zeile geschrieben wird?
>  dann hätte ich gern, dass die Antworten auf meine 5 Filterfragen in eine neue Zeile im Output geschrieben werden.

Kein Problem - dann müssen Sie aber mit multiLevelDown() arbeiten - und dann brauchen Sie die Farge auch nur einmal: https://www.soscisurvey.de/help/doku.php/de:create:multilevel
...