0 votes
in SoSci Survey (dt.) by s085346 (300 points)
edited by s085346

Guten Tag,

im SoSciSurvey Manual ist die Randomisierung von Blöcken etc. wunderbar beschrieben, allerdings finde ich auch nach mehrmaligem Ausprobieren keine Lösung für mein Problem:
Ich habe 6 Blöcke, die ich randomisieren möchte und deren Reihenfolge speichern (funktioniert tadellos):

    // Erst einmal die Seitenkennungen als Array speichern
$parts = array(
 'R1' => 'ID1start-ID1end',
 'R2' => 'ID2start-ID2end',
 'R3' => 'ID3start-ID3end',
 'R4' => 'ID4start-ID4end',
 'R5' => 'ID5start-ID5end',
 'R6' => 'ID6start-ID6end'
);
// Jetzt noch die Reihenfolge der Blöcke zufällig mischen
$keys = array_keys($parts);
shuffle($keys);

// Für jeden Schlüssel die Position im gemischten Array abspeichern
put('IV01_01', array_search('R1', $keys) + 1);
put('IV01_02', array_search('R2', $keys) + 1);
put('IV01_03', array_search('R3', $keys) + 1);
put('IV01_04', array_search('R4', $keys) + 1);
put('IV01_05', array_search('R5', $keys) + 1);
put('IV01_06', array_search('R6', $keys) + 1);

// Jetzt das Ergebnis noch als Seitenabfolge festlegen
// Weiter soll es anschließend mit Seite 'FFMQ' gehen
setPageOrder(
	$parts[$keys[0]],
	$parts[$keys[1]],
	$parts[$keys[2]],
	$parts[$keys[3]],
	$parts[$keys[4]],
	$parts[$keys[5]],
	'FFMQ'
);

Nun möchte ich in jedem dieser Blöcke Trials, also eine Abfolge von X Seiten, randomisieren und deren Reihenfolge auch speichern. Wenn ich das Prinzip wie oben anwende, scheinen aber die 6 "setPageOrder" Befehle mit der setPageOrder der großen "Blockrandomisierung" zu kollidieren, was dazu führt, dass mal nur 2, mal 4 etc. von 6 Blöcken präsentiert werden.
Hier ein Beispiel, wie eine Randomisierung auf der Startseite einer der 6 Blöcke aussieht:

// Erst einmal die Seitenkennungen als Array speichern
$trials1= array(
 '1' => array('ID10CtT1Dec-ID10CtT1IT2'),
 '2' => array('ID10CtT2Dec-ID10CtT2IT2'),
 '3' => array('ID10CtT3Dec-ID10CtT3IT2'),
 '4' => array('ID11CtT1Dec-ID11CtT1IT2'),
 '5' => array('ID11CtT2Dec-ID11CtT2IT2'),
 '6' => array('ID11CtT3Dec-ID11CtT3IT2'),
 '7' => array('ID12CtT1Dec-ID12CtT1IT2'),
 '8' => array('ID12CtT2Dec-ID12CtT2IT2'),
 '9' => array('ID12CtT3Dec-ID12CtT3IT2'),
 '10' => array('ID13CtT1Dec-ID13CtT1IT2'),
 '11' => array('ID13CtT2Dec-ID13CtT2IT2'),
 '12' => array('ID13CtT3Dec-ID13CtT3IT2'),
 '13' => array('ID14CtT1Dec-ID14CtT1IT2'),
 '14' => array('ID14CtT2Dec-ID14CtT2IT2'),
 '15' => array('ID14CtT3Dec-ID14CtT3IT2'),
 '16' => array('ID15CtT1Dec-ID15CtT1IT2'),
 '17' => array('ID15CtT2Dec-ID15CtT2IT2'),
 '18' => array('ID15CtT3Dec-ID15CtT3IT2'));
// Jetzt noch die Reihenfolge der Blöcke zufällig mischen
$key1 = array_keys($trials1);
shuffle($key1);

// Für jeden Schlüssel die Position im gemischten Array abspeichern
put('IV02_01', array_search('1',  $key1) + 1);
put('IV02_02', array_search('2',  $key1) + 1);
put('IV02_03', array_search('3',  $key1) + 1);
put('IV02_04', array_search('4',  $key1) + 1);
put('IV02_05', array_search('5',  $key1) + 1);
put('IV02_06', array_search('6',  $key1) + 1);
put('IV02_07', array_search('7',  $key1) + 1);
put('IV02_08', array_search('8',  $key1) + 1);
put('IV02_09', array_search('9',  $key1) + 1);
put('IV02_10', array_search('10', $key1) + 1);
put('IV02_11', array_search('11', $key1) + 1);
put('IV02_12', array_search('12', $key1) + 1);
put('IV02_13', array_search('13', $key1) + 1);
put('IV02_14', array_search('14', $key1) + 1);
put('IV02_15', array_search('15', $key1) + 1);
put('IV02_16', array_search('16', $key1) + 1);
put('IV02_17', array_search('17', $key1) + 1);
put('IV02_18', array_search('18', $key1) + 1);

// Jetzt das Ergebnis noch als Seitenabfolge festlegen
// Weiter soll es anschließend mit Seite 'ID1end' gehen
setPageOrder(
	$trials1[$key1[0]],
	$trials1[$key1[1]],
	$trials1[$key1[2]],
	$trials1[$key1[3]],
	$trials1[$key1[4]],
	$trials1[$key1[5]],
	$trials1[$key1[6]],
	$trials1[$key1[7]],
	$trials1[$key1[8]],
	$trials1[$key1[9]],
	$trials1[$key1[10]],
	$trials1[$key1[11]],
	$trials1[$key1[12]],
	$trials1[$key1[13]],
	$trials1[$key1[14]],
	$trials1[$key1[15]],
	$trials1[$key1[16]],
	$trials1[$key1[17]],
	'ID1end'
);

Über die Dauer und Menge der Trials bin ich mir bewusst, sie sind aber sehr kurz ;)

Vielleicht wissen Sie eine Lösung, wie ich sowohl für die Blöcke als auch die Trials innerhalb der Blöcke eine Randomisierung + Speicherung der Reihenfolgen erzielen könnte.

Vielen Dank im Voraus!

Nachdem ich Ihren Rat befolgen wollte, stoße ich auf folgendes Problem: Da ich 108 Trials randomisiere komme ich mit einer IV nicht hin, sondern bräuchte ja 2 (1-99, 100-108). Nun übersteigt es meine Kenntnisse das in einer foor loop zu bewerkstelligen. Vielleicht könnten Sie mir für den zweiten Teil nochmal helfen.

     // Liste der Seiten definieren
 $blocks = array(
 // Block 1
array('1' => array('ID10CtT1Dec-ID10CtT1IT2'), '2' => array('ID10CtT2Dec-ID10CtT2IT2'),'3' => array('ID10CtT3Dec-ID10CtT3IT2'), '4' => array('ID11CtT1Dec-ID11CtT1IT2'), '5' => array('ID11CtT2Dec-ID11CtT2IT2'), '6' => array('ID11CtT3Dec-ID11CtT3IT2'),	'7' => array('ID12CtT1Dec-ID12CtT1IT2'),'8' => array('ID12CtT2Dec-ID12CtT2IT2'),'9' => array('ID12CtT3Dec-ID12CtT3IT2'),'10' => array('ID13CtT1Dec-ID13CtT1IT2'),'11' => array('ID13CtT2Dec-ID13CtT2IT2'),'12' => array('ID13CtT3Dec-ID13CtT3IT2'),	'13' => array('ID14CtT1Dec-ID14CtT1IT2'),'14' => array('ID14CtT2Dec-ID14CtT2IT2'),'15' => array('ID14CtT3Dec-ID14CtT3IT2'),'16' => array('ID15CtT1Dec-ID15CtT1IT2'),'17' => array('ID15CtT2Dec-ID15CtT2IT2'), '18' => array('ID15CtT3Dec-ID15CtT3IT2')),

// Block 2
array('19' => array('ID20CtT1Dec-ID20CtT1IT2'), '20' => array('ID20CtT2Dec-ID20CtT2IT2'),'21' => array('ID20CtT3Dec-ID20CtT3IT2'), '22' => array('ID21CtT1Dec-ID21CtT1IT2'), '23' => array('ID21CtT2Dec-ID21CtT2IT2'), '24' => array('ID21CtT3Dec-ID21CtT3IT2'),	'25' => array('ID22CtT1Dec-ID22CtT1IT2'),'26' => array('ID22CtT2Dec-ID22CtT2IT2'),'27' => array('ID22CtT3Dec-ID22CtT3IT2'),'28' => array('ID23CtT1Dec-ID23CtT1IT2'),'29' => array('ID23CtT2Dec-ID23CtT2IT2'),'30' => array('ID23CtT3Dec-ID23CtT3IT2'),	'31' => array('ID24CtT1Dec-ID24CtT1IT2'),'32' => array('ID24CtT2Dec-ID24CtT2IT2'),'33' => array('ID24CtT3Dec-ID24CtT3IT2'),'34' => array('ID25CtT1Dec-ID25CtT1IT2'),'35' => array('ID25CtT2Dec-ID25CtT2IT2'), '36' => array('ID25CtT3Dec-ID25CtT3IT2')),

// Block 3
array('37' => array('ID30CtT1Dec-ID30CtT1IT2'), '38' => array('ID30CtT2Dec-ID30CtT2IT2'),'39' => array('ID30CtT3Dec-ID30CtT3IT2'), '40' => array('ID31CtT1Dec-ID31CtT1IT2'), '41' => array('ID31CtT2Dec-ID31CtT2IT2'), '42' => array('ID31CtT3Dec-ID31CtT3IT2'), '43' => array('ID32CtT1Dec-ID32CtT1IT2'),'44' => array('ID32CtT2Dec-ID32CtT2IT2'),'45' => array('ID32CtT3Dec-ID32CtT3IT2'),'46' => array('ID33CtT1Dec-ID33CtT1IT2'),'47' => array('ID33CtT2Dec-ID33CtT2IT2'),'48' => array('ID33CtT3Dec-ID33CtT3IT2'),	'49' => array('ID34CtT1Dec-ID34CtT1IT2'),'50' => array('ID34CtT2Dec-ID34CtT2IT2'),'51' => array('ID34CtT3Dec-ID34CtT3IT2'),'52' => array('ID35CtT1Dec-ID35CtT1IT2'),'53' => array('ID35CtT2Dec-ID35CtT2IT2'), '54' => array('ID35CtT3Dec-ID35CtT3IT2')),

// Block 4
array('55' => array('ID40CtT1Dec-ID40CtT1IT2'), '56' => array('ID40CtT2Dec-ID40CtT2IT2'),'57' => array('ID40CtT3Dec-ID40CtT3IT2'), '58' => array('ID41CtT1Dec-ID41CtT1IT2'), '59' => array('ID41CtT2Dec-ID41CtT2IT2'), '60' => array('ID41CtT3Dec-ID41CtT3IT2'),	'61' => array('ID42CtT1Dec-ID42CtT1IT2'),'62' => array('ID42CtT2Dec-ID42CtT2IT2'),'63' => array('ID42CtT3Dec-ID42CtT3IT2'),'64' => array('ID43CtT1Dec-ID43CtT1IT2'),'65' => array('ID43CtT2Dec-ID43CtT2IT2'),'66' => array('ID43CtT3Dec-ID43CtT3IT2'),	'67' => array('ID44CtT1Dec-ID44CtT1IT2'),'68' => array('ID44CtT2Dec-ID44CtT2IT2'),'69' => array('ID44CtT3Dec-ID44CtT3IT2'),'70' => array('ID45CtT1Dec-ID45CtT1IT2'),'71' => array('ID45CtT2Dec-ID45CtT2IT2'), '72' => array('ID45CtT3Dec-ID45CtT3IT2')),

// Block 5
array('73' => array('ID50CtT1Dec-ID50CtT1IT2'), '74' => array('ID50CtT2Dec-ID50CtT2IT2'),'75' => array('ID50CtT3Dec-ID50CtT3IT2'), '76' => array('ID51CtT1Dec-ID51CtT1IT2'), '77' => array('ID51CtT2Dec-ID51CtT2IT2'), '78' => array('ID51CtT3Dec-ID51CtT3IT2'),	'79' => array('ID52CtT1Dec-ID52CtT1IT2'),'80' => array('ID52CtT2Dec-ID52CtT2IT2'),'81' => array('ID52CtT3Dec-ID52CtT3IT2'),'82' => array('ID53CtT1Dec-ID53CtT1IT2'),'83' => array('ID53CtT2Dec-ID53CtT2IT2'),'84' => array('ID53CtT3Dec-ID53CtT3IT2'),	'85' => array('ID54CtT1Dec-ID54CtT1IT2'),'86' => array('ID54CtT2Dec-ID54CtT2IT2'),'87' => array('ID54CtT3Dec-ID54CtT3IT2'),'88' => array('ID55CtT1Dec-ID55CtT1IT2'),'89' => array('ID55CtT2Dec-ID55CtT2IT2'), '90' => array('ID55CtT3Dec-ID55CtT3IT2')),

// Block 6
array('91' => array('ID60CtT1Dec-ID60CtT1IT2'), '92' => array('ID60CtT2Dec-ID60CtT2IT2'),'93' => array('ID60CtT3Dec-ID60CtT3IT2'), '94' => array('ID61CtT1Dec-ID61CtT1IT2'), '95' => array('ID61CtT2Dec-ID61CtT2IT2'), '96' => array('ID61CtT3Dec-ID61CtT3IT2'),	'97' => array('ID62CtT1Dec-ID62CtT1IT2'),'98' => array('ID62CtT2Dec-ID62CtT2IT2'),'99' => array('ID62CtT3Dec-ID62CtT3IT2'),'100' => array('ID63CtT1Dec-ID63CtT1IT2'),'101' => array('ID63CtT2Dec-ID63CtT2IT2'),'102' => array('ID63CtT3Dec-ID63CtT3IT2'),	'103' => array('ID64CtT1Dec-ID64CtT1IT2'),'104' => array('ID64CtT2Dec-ID64CtT2IT2'),'105' => array('ID64CtT3Dec-ID64CtT3IT2'),'106' => array('ID65CtT1Dec-ID65CtT1IT2'),'107' => array('ID65CtT2Dec-ID65CtT2IT2'), '108' => array('ID65CtT3Dec-ID65CtT3IT2'))
);

1 Answer

0 votes
by SoSci Survey (327k points)
selected by s085346
 
Best answer

Wenn ich das Prinzip wie oben anwende, scheinen aber die 6 "setPageOrder" Befehle mit der setPageOrder der großen "Blockrandomisierung" zu kollidiere

Ganz genau - es kann nur eine Seitenabfolge aktiv sein, wenn Sie setPageOrder() erneut aufrufen, wird die vorherige Seitenabfolge deaktiviert.

Die Lösung ist, dass Sie gleich von vornherein die komplette Rotation definieren. Also gleiche eine Liste aller Seiten erstellen, die gezeigt werden sollen.

Um das mit den 2 Ebenen zu realisieren, gehen Sie grob gesprochen vor wie hier beschrieben: Rotation und Mischen von Blöcken. Nur müssen Sie das Shuffle natürlich wieder durch ein Mischen der array_keys() ersetzen, damit Sie die Reihenfolge speichern können.

Und ich hätte eine Bitte: Ersetzen Sie die dutzenden Aufrufe von put() durch eine FOR-Schleife. Sonst ist das Risiko für Fehler irgendwann einfach zu groß.

by s085346 (300 points)
Vielen Dank für den Hinweis. Leider stoße ich auf ein neues Problem, das sicher lösbar ist, allerdings übersteigt es meine Kenntnisse. Ich habe es oben nach der alten Frage ergänzt.
by SoSci Survey (327k points)
> Da ich 108 Trials randomisiere komme ich mit einer IV nicht hin, sondern bräuchte ja 2

Ich würde tatsächlich empfehlen, dass Sie für jeden Block eine eigene interne Variablen-Frage anlegen. Das ist in der Auswertung deutlich (!) handlicher. Und in einer weiteren solchen Frage speichern Sie dann (wie bisher schon) die Reihenfolge der Blöcke.

Stellen Sie sich einfach vor, Sie würden erst einmal nur die Reihenfolge innerhalb der Blöcke rotieren. Nur, dass Sie dafür kkeine eigene Variable definieren, sondern mit einem Eintrag (=ein Block) aus dem "kompletten" Array aller Seiten arbeiten.

Legen Sie ein Array mit allen Block-Nummern (Sie haben diese als 1, 19, 37, ... bezeichnet) an und als Werte die Kennungen der IV-Fragen, wo die Rotation hingespeichert werden soll. Dann können Sie in einer kleinen FOREACH-Schleife gemütlich alle Blöcke rotieren und die Abfolge abspeichern. Details gerne in einer neuen Frage hier im Online-Support :)

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

...