0 votes
in SoSci Survey (dt.) by s099769 (130 points)

Guten Tag,

Ich habe 2 x 25 Bilder (jeweils 25 Bilder von jungen Menschen und ihrem älteren Pendant).
Jetzt würde ich gerne erst 12 Bilder randomisiert zeigen, dann eine kurze Unterbrechung machen und im nächsten Schritt die nächsten 13 Bilder zeigen.

Mein Problem dabei ist, dass ich nicht möchte, dass ein Proband das junge und alte Bild einer Person sieht.
Dementsprechend darf immer nur eins der beiden Bilder gezeigt werden (egal ob jung oder alt). Wie genau löse ich dieses Problem ?

Vielen Dank schon einmal im Voraus für die Hilfestellung

by SoSci Survey (304k points)
Wenn ich sie korrekt verstehe, möchten sie alle 25 Personen zeigen, aber zufällig entweder die jüngere oder die ältere Variante. Möchten sie dabei sicherstellen, dass gleich viele junge und alte Bilder angezeigt werden? Müssen Sie sicherstellen, dass von jeder Person gleich häufig das junge und alte Bild angezeigt wird?
by s099769 (130 points)
Genau, ich möchte entweder das alte oder das junge Bild einer Person zeigen.
Ich muss nicht (könnte aber, falls es einfacher wäre) sicherstellen, dass innerhalb  einer Befragung gleich viele junge und alte Bilder gezeigt werden.
Allerdings würde ich gerne sicherstellen, dass alle Bilder insgesamt gleich oft gezeigt werden

1 Answer

+1 vote
by SoSci Survey (304k points)
edited by SoSci Survey

Allerdings würde ich gerne sicherstellen, dass alle Bilder insgesamt gleich oft gezeigt werden

Dann müssen wir ein wenig anspruchsvoller werden. Erstmal kurz das Prinzip:

Wir werden eine Liste aus 1-en und 2-en erstellen, die 25 Element lang ist, eine pro Person. 1 steht für "jung" und 2 für "älter". Also z.B. 2121221211122122221221112. Damit ist dann für jede Person festgelegt, welches Bild in diesem Interview gezeigt wird.

Wenn nun jedes Bild gleich häufig gezeigt werden soll, muss auf jeder Stelle gleich häufig 1 und 2 stehen. Dafür haben wir nun 2 Möglichkeiten:

a) Sie legen 25 Zufallsgeneratoren mit jeweils 2 Zetteln (1 und 2) an oder

b) Sie legen einen Zufallsgenerator mit vielen unterschiedlichen 25-er Ketten an.

Für Variante (b) müssen Sie sich ein wenig mit Kombinatorik beschäftigen. Und Sie dürfen nicht wesentlich mehr Reihen in den Zufallsgenerator legen als Sie Teilnehmer erwarten.

Wenn Sie dann die Liste (Array) haben, dann würden sie die Liste einfach abarbeiten - und das wohl in zufälliger Reihenfolge. Was möchten Sie denn zu den einzelnen Bildern zeigen/fragen? Die Bilder auf einzelnen Seiten vermute ich?

$images = array(
  1 => array('frau01jung.jpg', 'frau01alt.jpg'),
  2 => array('frau02jung.jpg', 'frau02alt.jpg'),
  3 => array('frau03jung.jpg', 'frau03alt.jpg'),
  // ...
  25 => array('mann12jung.jpg', 'mann12alt.jpg'),
);
if (!isset($order)) {
  $order = array_keys($images);
  shuffle($order);
  registerVariable($order);
}

$i = loopPage(count($order));
$imageID = $order[$i];
// Hier kommen die 1er und 2er - am Beispiel von 25 Zufallsgeneratoren RG01 bis RG25
$variant = value(id('rg', $imageID));
if ($variant == 1) {
  html('<div><img src="'.$images[$imageID][0].'"></div>');
} elseif ($variant == 2) {
  html('<div><img src="'.$images[$imageID][1].'"></div>');
}
question(id('AB', $imageID));  // Würde jetzt passend zu den Bilder noch AB01 bis AB25 anzeigen
by s099769 (130 points)
Vielen Dank schon einmal für die sehr ausführliche Erklärung!
Ich probiere das direkt mal aus.
Ich wollte insgesamt 9 Fragen (5er-likert) stellen, welche allerdings immer gleich bleiben.
Genau, die Bilder sollen jeweils alleine auf einer Seite sein. Also insgesamt 25 Seiten.
by s099769 (130 points)
Ich habe jetzt versucht den Code anzuwenden, allerdings wird mir gesagt, in der letzten Zeile ein Fehler ist.
Dementsprechend wird auch kein Bild angezeigt.
Der Fehler wird leider nicht näher definiert.

Hier der code:

$images = array(
  1 => array("pro://1.jpg", "pro://2018-07-12_09-07-44.jpg"),
  2 => array("pro://2.jpg", "pro://alt_2.jpg"),
  3 => array("pro://3.jpg", "pro://alt_3.jpg"),
  4 => array("pro://4.jpg", "pro://alt_4.jpg"),
  5 => array("pro://5.jpg", "pro://alt_5.jpg"),
  6 => array("pro://6.jpg", "pro://alt_6.jpg"),
  7 => array("pro://7.jpg", "pro://alt_7.jpg"),
  8 => array("pro://8.jpg", "pro://alt_8.jpg"),
  9 => array("pro://9.jpg", "pro://alt_9.jpg"),
  10 => array("pro://10.jpg", "pro://alt_10.jpg"),
  11 => array("pro://11.jpg", "pro://alt_11.jpg"),
  12 => array("pro://12.jpg", "pro://alt_12.jpg"),
  13 => array("pro://13.jpg", "pro://alt_13.jpg"),
  14 => array("pro://14.jpg", "pro://alt_14.jpg"),
  15 => array("pro://15.jpg", "pro://alt_15.jpg"),
  16 => array("pro://16.jpg", "pro://alt_16.jpg"),
  17 => array("pro://17.jpg", "pro://alt_17.jpg"),
  18 => array("pro://18.jpg", "pro://alt_18.jpg"),
  19 => array("pro://19.jpg", "pro://alt_19.jpg"),
  20 => array("pro://20.jpg", "pro://alt_20.jpg"),
  21 => array("pro://21.jpg", "pro://alt_21.jpg"),
  22 => array("pro://22.jpg", "pro://alt_22.jpg"),
  23 => array("pro://23.jpg", "pro://alt_23.jpg"),
  24 => array("pro://24.jpg", "pro://alt_24.jpg"),
  25 => array("pro://25.jpg", "pro://alt_25.jpg"),
);
if (!isset($order)) {
  $order = array_keys($images);
  shuffle($order);
}

$i = loopPage(count($order));
$imageID = $order[$i];
// Hier kommen die 1er und 2er
$variant = value(id('RA', $imageID));
html('<div><img src="'.$images[$imageID].'"></div>'); //hier wird ein Fehler angezeigt
by SoSci Survey (304k points)
Es wäre hilfreich, den genauen Wortlaut der Fehlermeldung zu kennen.

Außerdem wäre es hilfreich, wenn vor der betroffenen Zeile noch folgendes im Code ergänzt würde: debug($imageID); - das gibt im Debug-Modus (gelber Pfeil) weitere Informationen.
by SoSci Survey (304k points)
Oh, und ich sehe, da fehlte noch folgende Zeile im Code:

      registerVariable($order);

Ich habe sie oben ergänzt, sie gehört unter das shuffle()
by s099769 (130 points)
Dies wird vom DEbug Modus angezeigt:

Debug-Information für $imageID:
$imageID = 17 (integer)

und dies ist der Wortlaut des Fehlers:

Fehler im Fragebogen (Seite 4)
Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Array to string conversion
Zeile: 39

PHP-Code

036
037 $variant = value(id('RA', $imageID));
038 debug($imageID);
039 html('<div><img src="'.$images[$imageID].'"></div>'); //hier ist der Fehler
040 return 'ok';
by SoSci Survey (304k points)
Oh ja, da muss ja noch hinein, welches der beiden BIlder gezeigt werden soll:

if ($variant == 1) {
  html('<div><img src="'.$images[$imageID][0].'"></div>');
} else {
  html('<div><img src="'.$images[$imageID][1].'"></div>');
}
by s099769 (130 points)
Vielen Dank!
Wenn ich es am Stück laufen lasse, funktioniert es jetzt perfekt.
Allerdings habe ich nachträglich noch die Aufgabe bekommen es in zwei Gruppen aufzuteilen.
Das bedeutet ich randomisiere erst 13 Personen (so wie bisher auch), mache dann eine Zwischenaufgabe um die Aufmerksamkeit zu steigern und im Anschluss das gleiche nochmal mit den restlichen 12 Personen.
Habe es auch fast selber hinbekommen, allerdings werden mir jetzt komischerweise nur noch die Jungen Bilder angezeigt.
Ich habe einfach zwei Rubriken angelegt (RA für die ersten 12 & RB für die nächsten 13).

Hier nochmal der Code:
$images = array(
  1 => array("pro://1.jpg", "pro://2018-07-12_09-07-44.jpg"),
  2 => array("pro://2.jpg", "pro://alt_2.jpg"),
  3 => array("pro://3.jpg", "pro://alt_3.jpg"),
  4 => array("pro://4.jpg", "pro://alt_4.jpg"),
  5 => array("pro://5.jpg", "pro://alt_5.jpg"),
  6 => array("pro://6.jpg", "pro://alt_6.jpg"),
  7 => array("pro://7.jpg", "pro://alt_7.jpg"),
  8 => array("pro://8.jpg", "pro://alt_8.jpg"),
  9 => array("pro://9.jpg", "pro://alt_9.jpg"),
  10 => array("pro://10.jpg", "pro://alt_10.jpg"),
  11 => array("pro://11.jpg", "pro://alt_11.jpg"),
  12 => array("pro://12.jpg", "pro://alt_12.jpg"),
  13 => array("pro://13.jpg", "pro://alt_13.jpg"),
); //die Liste sieht im zweiten Teil genauso aus (auch von 1 bis 12 nur mit den anderen Dateinamen)

if (!isset($order)) {
  $order = array_keys($images);
  shuffle($order);
  registerVariable($order);
}

$i = loopPage(count($order));
$imageID = $order[$i];

$variant = value(id('RA', $imageID)); // hier habe ich natürlich im 2. Teil dann 'RB' stehen, sonst ist alles gleich
if ($variant == 1) {
  html('<div style="margin: 3em; text-align: center">
  <img src="'.$images[$imageID][0].'" style="width: 300px"></div>');
} elseif ($variant == 2) {
 html('<div style="margin: 3em; text-align: center">
  <img src="'.$images[$imageID][0].'" style="width: 300px"></div>');
}
by SoSci Survey (304k points)
> $variant = value(id('RA', $imageID)); // hier habe ich natürlich im 2. Teil dann 'RB' stehen, sonst ist alles gleich

Da müssten Sie bei RA bleiben. Die Zuordnung jung/alt ist ja vom Teil unabhängig. Wo Sie hingegen etwas ändern:

$i = loopPage(count($order));

Im ersten Teil schreiben Sie hier:

$i = loopPage(13);

Und im zweiten Teil schreiben Sie (alles andere gleich):

$k = loopPage(12);
$i = $k + 12;
by s099769 (130 points)
Vielen vielen Dank! Im Großen und Ganzen klappt jetzt alles.
Es gibt lediglich noch ein kleines Problemchen.
Das letzte Bild (Bild 13.) kommt immer nach der Zwischenübung als erstes Bild im zweiten Teil dran.
Sonst funktioniert alles perfekt, ich kann mich gar nicht genug bei Ihnen bedanken!
Edit: Habe ich gerade gelöst! anstatt +12 muss ein +13 hin und dann geht alles.

Vielen Dank nochmal :)

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

...