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

Schönen Abend!

Ich würde die Ziehung meines Zufallsgenerators gerne im Nachhinein ändern, um die Gefahr zu umgehen, bei meiner Studie zu viele TeilnehmerInnen zu verlieren.

Meine ProfessorInnen haben mir dazu geraten und meinten, dass ich diese Grenzfälle zum Schluss auch immer noch von der Datenauswertung ausschließen könnte, sollte ich ohne sie schon genug Personen zusammenbekommen. Aber wenn nicht, wollten sie eben, dass ich möglichst viele Daten auch verwerten kann.

Ich würde daher gerne diejenigen Personen in die jeweils andere Experimentalgruppe einteilen, die weniger als 3 Antworten angekreuzt / nicht angekreuzt haben. Am Ende sollte jeder 3 Videos sehen, entweder die, die nicht zu seinen Angaben passen oder eben schon.

Ich dachte mir, dass man das vielleicht so umsetzen könnte, aber das funktioniert leider nicht wie erhofft:

if (value('ZU01') ==1) && $videos = getItems('IN01', 'is', 2 < 3) {
  $videos = getItems('IN01', 'is', 1); 
}

bzw.

if (value('ZU01') ==2) && $videos = getItems('IN01', 'is', 1 < 3) {
  $videos = getItems('IN01', 'is', 2); 
}

Ist die Herangehensweise komplett falsch oder fehlt vielleicht nur irgendwo was?

Danke und LG!

1 Answer

0 votes
by SoSci Survey (328k points)

Syntaktisch nicht ganz korrekt. Die Bedingung, ob weniger als 3 Items angeklickt wurden, sieht so aus:

(count(getItems('IN01', 'is', 2)) < 3)

Die Setzung der Klammern ist hier entscheidend. Und Sie brauchen ein count(), um auf die Anzahl zu kommen.

Sie haben hier außerdem m.E. Code vergessen, nämlich den ELSE-Teil. Ich würde es der Übersichtlichkeit halber verschachteln:

if (value('ZU01') ==1)) {
  $videos = getItems('IN01', 'is', 2); 
  // Ausweichen, wenn es zu wenige sind
  if (count($videos) < 3) {
    $videos = getItems('IN01', 'is', 1); 
  }
}

Und eben andersherum.

Und ich würde Ihnen unbedingt (!) noch empfehlen, dass Sie im Datensatz speichern, was da ausgewählt wurde. Dafür brauchen Sie eine interne Variable und put().

if (value('ZU01') ==1)) {
  $videos = getItems('IN01', 'is', 2); 
  put('IV01_01', 2);
  // Ausweichen, wenn es zu wenige sind
  if (count($videos) < 3) {
    $videos = getItems('IN01', 'is', 1); 
    put('IV01_01', 1);
  }
}

Sonst haben Sie in der Auswertung mehr Spaß als Sie es gerne möchten. Methodisch untergräbt die Selbstselektion natürlich die experimentelle Zuordnung, aber ich kann die Argumentation durchaus nachvollziehen.

by s213653 (130 points)
Ah super, danke! Noch eine kurze Nachfrage zu dem put():

Und zwar dachte ich mir gerade, dass ich dann gleich alles mit put() abspeichere, weil auf der Fragebogenseite sowieso immer diese Warnung aufscheint...

"Bitte beachten Sie, dass die von random() oder shuffle() erzeugten Zufallswerte nicht automatisch im Datensatz gespeichert werden. Zum Speichern können Sie ggf. die Funktion put() verwenden."

Dann wurde mir aber der Fehler angezeigt, dass put() nur einzelne Daten speichern kann und kein Array. D.h. ich kann $shop oder shuffle $videos gar nicht speichern und somit auch nicht, welche 3 Videos die Personen tatsächlich gesehen haben?

Ich wollte nämlich grade auch unter $shop das put() benutzen.
Also so:

$shop = array_slice($videos, 0, 3);
put('IV01_02', $shop);
by SoSci Survey (328k points)
Das sollten Sie zusätzlich machen - aber dafür verwenden Sie putList() ... und drei Variablen, weil Sie das sonst in der Auswertung wieder auseinander-frickeln müssen: https://www.soscisurvey.de/help/doku.php/de:create:functions:putlist
by s213653 (130 points)
Ich glaube jetzt ist mein Code komplett! Ich bin mir nur noch unsicher, ob ich den Wert des Zufallsgenerators auch speichern muss oder ob dieser automatisch im Datensatz erscheint? aktuell habe ich put() bzw. putList() bei diesem, bei den (nicht) angrekreuzten Items, bei shuffle und bei $shop hinterlegt. Aber ist das bei shuffle $videos überhaupt sinnvoll / reicht da nicht das putList() bei $shop? Vielleicht könnten Sie kurz nochmal einen Blick darüber werfen, ob es so auch wirklich passt?

So würde der Code eben jetzt im ganzen aussehen:

if (value('ZU01') ==1) { // Zufallsgenerator 1 = high targeting
  put('IV01_02', 1); // im Datensatz speichern
  $videos = getItems('IN01', 'is', 2); // angekreuzte Themen
  put('IV01_01', 2);
  // ausweichen in andere Experimentalgruppe, wenn es zu wenig Themen sind
  if (count($videos) < 3) {
    $videos = getItems('IN01', 'is', 1);
    put('IV01_01', 1);
  }
}

if (value('ZU01') ==2) { // Zufallsgenerator 2 = low targeting
  put('IV01_02', 2);
  $videos = getItems('IN01', 'is', 1); // nicht angekreuzte Themen
  put('IV01_01', 1);
  // ausweichen in andere Experimentalgruppe, wenn es zu wenig Themen sind
  if (count($videos) < 3) {
    $videos = getItems('IN01', 'is', 2);
    put('IV01_01', 2);
  }
}

debug(value('ZU01'));
debug($videos);
shuffle($videos); // Items mischen
putList('IV03', $videos);
debug($videos);
$shop = array_slice($videos, 0, 3); // die ersten drei davon hernehmen
putList('IV02', $shop);
debug($shop);

$seiten = [
  1 => 'V ET',
  2 => 'V M',
  3 => 'V G',
  4 => 'V AF',
  5 => 'V HT',
  6 => 'V SS',
  7 => 'V B',
  8 => 'V FG',
  9 => 'V HG',
  10 => 'V R',
];

$anzeigen = [];
foreach ($shop as $video) {
  $anzeigen[] = $seiten[$video]; // Videos anzeigen
}

setPageOrder($anzeigen, 'Ende'); // danach weiter zu folgender Seite
by SoSci Survey (328k points)
Sieht gut aus. Und ob alle Daten da sind, können Sie unter "Erhobene Daten" -> "Daten ansehen" ja direkt validieren.

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

...