0 votes
in SoSci Survey (dt.) by s196584 (110 points)
edited by SoSci Survey

Liebes Support Team,

ich komme an einer Stelle einfach nicht weiter.
Ich habe einen Datensatz hochgeladen in die Datenbank für Inhalte. Dieser besteht aus 96 Aussagen, die in 4 Kategorien eingeteilt sind (true_known, true_unknown, false_known, false_unknown). Die keys für Aussagen sind die Zahlen von 1 bis 96.

Ich möchte jetzt für jede Kategorie jeweils zufällig 18 Aussagen für das Experiment auswählen - also 72 insgesamt

Von diesen 72 Aussagen sollen zufällig 36 ausgewählt werden, die in einer Expositionsphase präsentiert werden. Das soll aber auch gleichverteilt über die Kategorien passieren (In einer Testphase sollen dann alle 72 ausgewählten Aussagen präsentiert werden)

Die 36 ausgewählten Aussagen sollen nacheinander gemischt/zufällig präsentiert werden.

Mit dem folgenden Code habe ich das Problem, dass zwar 36 statements präsentiert werden, diese sind aber nicht gleichverteilt auf die 4 Kategorien und es kommt auch zu Wiederholungen.

Wie könnte ich das Problem lösen?

Vielen lieben Dank!!!

$true_known = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24);
shuffle($true_known); 
$true_unknown = array(25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48);
shuffle($true_unknown); 
$false_known = array(49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72); 
shuffle($false_known); 
$false_unknown = array(73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96); 
shuffle($false_unknown); 


$true_known_selected = array_slice($true_known, 0, 18);
$true_unknown_selected = array_slice($true_unknown, 0, 18); 
$false_known_selected = array_slice($false_known, 0, 18); 
$false_unknown_selected = array_slice($false_unknown, 0, 18); 

$selected_statements = array_merge($true_known_selected, $true_unknown_selected, $false_known_selected, $false_unknown_selected);
shuffle($selected_statements);

$true_known_exposure = array_slice($true_known_selected, 0, 9); 
$true_unknown_exposure = array_slice($true_unknown_selected, 0, 9); 
$false_known_exposure = array_slice($false_known_selected, 0, 9); 
$false_unknown_exposure = array_slice($false_unknown_selected, 0, 9);


$exposure_statements = array_merge($true_known_exposure, $true_unknown_exposure, $false_known_exposure, $false_unknown_exposure); 

// Zufällige Reihenfolge für die Exposition 
shuffle($exposure_statements);

$i = loopPage(36);

foreach($exposure_statements as $statement_id) {
$statement_text = dbGet($statement_id); }


replace('%Story%', $statement_text[4]);

1 Answer

0 votes
by SoSci Survey (326k points)

Meine Empfehlung wäre: Lassen Sie die Finger von shuffle(). Verwenden Sie stattdessen einen Zufallsgenerator - oder in Ihrem Fall besser 4 davon.

Schreiben Sie in jeden Zufallsgenerator die Schlüssel der zugehörigen Codes.

Jeder Zufallsgenerator zieht dann 18 Codes pro Interview. Die ersten 9 nehmen Sie für die Expositionsphase, die anderen 9 (oder alle 18 zusammen) für was auch immer danach kommt :)

Das sieht dann relativ entspannt aus. Erstmal binden Sie die 4 Zufallsgeneratoren ein und dann:

$exposure_statements = array_merge(
  array_values(getItems('RG01', '1-9', 'label')),
  array_values(getItems('RG02', '1-9', 'label')),
  array_values(getItems('RG03', '1-9', 'label')),
  array_values(getItems('RG04', '1-9', 'label'))
);

Und ja, dieses Array mischen Sie dann nochmal mit shuffle().

diese sind aber nicht gleichverteilt auf die 4 Kategorien

Das liegt bei Ihrem Code daran, dass Sie bei jeder Wiederholung neu mischen. Alles vor dem loopPage() dürfen Sie nur einmal machen. Das würde auch für das o.g. shuffle() gelten. Dafür verwenden Sie am einfachsten isset() und registerVariable().

by s196584 (110 points)
Ich habe jetzt die vier Zufallsgeneratoren eingerichtet und angegeben dass sie jeweils 18 Zettel ziehen sollen. Ich habe die Zahlen von 1-24 in den ersten Zufallsgenerator untereinander eingetippt und in den zweiten 25-48 usw.  weil das die Keys für meine Aussagen in der Datenbank sind.

Dann habe ich die Zufallsgeneratoren an den Anfang der Seite gezogen vor den PHP Code.

Wenn ich jetzt aber den von Ihnen vorgeschlagenen Code eingebe angepasst auf die Namen meiner Zufallsgeneratoren, wird mir die folgende Fehlermeldung angezeigt: Für die Funktion getItems() wurde das unbekannte Auswahlkriterium angegeben.

$exposure_statements = array_merge(
  array_values(getItems('RD01', '1-9', 'label')),
  array_values(getItems('RD02', '1-9', 'label')),
  array_values(getItems('RD03', '1-9', 'label')),
  array_values(getItems('RD04', '1-9', 'label'))
);

shuffle ($exposure_statements);

Was könnte ich da falsch gemacht haben?

Außerdem verstehe ich nicht wie ich das mit isset() und registerVariable() und  loopPage() umsetzen soll. Muss das dann auf einer anderen Seite geschehen?
by SoSci Survey (326k points)
> Was könnte ich da falsch gemacht haben?

Sie nichts, ich habe dne falschen Befehl erwischt. Es ist nicht getItems(), sondern valueList().

Ich bin auch nicht 100%ig sicher, ob das '1-9' akzeptiert wird, oder ob es ein Array, also [1,2,3,4,5,6,7,8,9] sein muss.

> Außerdem verstehe ich nicht wie ich das mit isset() und registerVariable() und  loopPage() umsetzen soll. Muss das dann auf einer anderen Seite geschehen?

Ungefähr so:

if (!isset($selected_statements)) {
  // Alles, was nur einmal laufen soll
  // inkl. Definition von $selected_statements
  registerVariable($selected_statements);
}

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

...