0 votes
in SoSci Survey (dt.) by s132943 (120 points)
edited by SoSci Survey

Hallo zusammen,

ich bin PHP-Laie und benötige einen Code, für die Umfrage meiner Masterarbeit. Die Problematik ist wie folgt:

Schritt 1: Zufällige Zuordnung zu einer Gruppe (Experte (EX) vs. Nicht-Experte (NE)) per Zufallsgenerator

Schritt 2: Je Gruppe (EX oder NE) soll die Versuchsperson 16 Fragen beantworten, welche sich aus 8 Fragepaaren zusammensetzen, aus der jeweils nur eine Frage gefragt werden darf. Dabei sollen insgesamt 8 Fragen mit Info A (EX A oder NE A) angezeigt werden und 8 Fragen mit Info B (EX B oder NE B).

Beispiel: Das Auto kostet 5.000€ vs. das Auto kostet 50.000€ - diese beiden Fragen dürfen NICHT zusammen auftreten, sondern nur eine aus diesem Paar.

Ist das überhaupt programmierbar?

Ich hatte mir sonst überlegt, dass ich jeweils x vorgefertigte Listen anlege mit verschiedenen Variationen der 8 + 8 Fragen und diese dann fest programmiert ablaufen, also nicht zufällig zugeordnet werden. Ist wissenschaftlich nicht so schön, aber auch möglich.

Ich würde mich total über Hilfe freuen, da ich keine Ahnung von PHP habe und nach tagelangem Herumprobieren doch etwas verzweifle..

1000 Dank vorab und beste Grüße,

1 Answer

0 votes
by SoSci Survey (304k points)

Ist das überhaupt programmierbar?

Ja - und es ist nicht mal schlimm. Aber zugegeben, man braucht ein wenig Programmier-Erfahrung, um es elegant zu lösen.

Der Trick besteht darin, dass Sie eine Liste (Array) mit 16 Elementen erstellen. 8 Einser und 8 Zweier:

 $mix = [1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2];

Das ginge mit array_pad() auch noch einen Tick eleganter, aber es soll ja auch verständlich bleiben.

Diese Liste mischen Sie:

shuffle($mix);

Und mittels isset() und registerVariable() sorgen Sie noch dafür, dass das im Interview nur einmal gemischt wird. Außerdem speichern Sie die Zuordnung noch mit put() in 16 interne Variablen.

if (!isset($mix)) {
  $mix = [1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2];
  shuffle($mix);
  registerVariable($mix);
  foreach ($mix as $i => $n) {
    put(id('IN01', $i+1), $n);
  }
}

So. Nun haben Sie bei jeder Ihrer 16 Fragen eine Variable (im Beispiel hier IN01_01 bis IN01_16), anhand welcher Sie entscheiden können, ob Sie Variante A oder B zeigen. Und Sie haben noch Ihre Zufallszahl für die beiden Gruppen.

if (value('RG01') == 1) {
  // Zufallsgruppe EX
  if (value('IN01_01') == 1) {
    // Variante EX-1-A
  } else {
    // Variante EX-1-B
  }
} else {
  // Zufallsgruppe NE
  if (value('IN01_01') == 1) {
    // Variante NE-1-A
  } else {
    // Variante NE-1-B
  }
}
by s132943 (120 points)
Danke So Sci Survey für die schnelle Rückmeldung!
Leider fällt mir die Übersetzung etwas schwer :D. Daher noch folgende Fragen:

1) Muss ich den bereits eingefügten Zufallsgenerator löschen, oder stelle ich diesen einfach vorne an?

2) Wie binde ich meine angelegten Fragen ein?

Ich verstehe das bisher so, dass bei $mix festgelegt wird, dass insgesamt 8 und 8 Fragen gestellt werden. An irgendeiner Stelle muss ich ja sicherlich noch definieren, was zu 1 und was zu 2 gehört, und dann ja jeweils für meine EX und NE-Gruppe.

Könnte ich auch 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2 festlegen, damit die Fragen der zwei Bedingungen abwechselnd auftreten, oder wird das durch den Shuffle sowieso passieren?

Wie binde ich nun meine Fragen ein?
Sobald ich bspw. versuche IN01_01 aus Ihrem Code mit meiner eigenen Frage EX01 zu ersetzen, sagt die Website mir, dass das PHP-Konstrukt nicht verwendet werden darf..

Ich habe meine Fragen als "Textfrage offen" und jeweils als separate Fragen mit Bedingung A und mit Bedingung B angelegt. Vielleicht liegt da auch schon der Fehler? Meine Fragen sehen konkret so aus:

EX01: Elvis Presley war 70 als er starb.
EX17: Elvis Presley war 38 als er starb.

Generell sind die Fragen wie folgt aufgebaut:
EX01 bis EX16 sind die Fragen EX-1-A (hoher Zahlenwert)
EX17 bis EX32 sind die Fragen EX-1-B (niedriger Zahlenwert)

Die zweite Gruppe folgt leider einer anderen Logik:

NE01 und alle ungeraden bis NE 31 sind NE1-A (hoher Zahlenwert)
NE02 und alle gerade bis NE32 sind NE-1-B (niedriger Zahlenwert)

Wo treffe ich nun die Zuordnung zu 1 und 2? Und wofür steht in Ihrem Beispiel RG01?


Vielen vielen Dank für Rückmeldung und beste Grüße,
by SoSci Survey (304k points)
> 1) Muss ich den bereits eingefügten Zufallsgenerator löschen, oder stelle ich diesen einfach vorne an?

Den Zufallsgenerator für die 2 Gruppen brauchen Sie weiterhin. Zumindest wenn ich Sie korrekt verstanden habe, dass es es 2 Gruppen gibt, die jeweils 16 Bilder (evtl. unterschiedliche) bekommen.

> 2) Wie binde ich meine angelegten Fragen ein?

  if (value('IN01_01') == 1) {
    // Variante EX-1-A
    question('EX01');
  } else {
    question('EX17');
  }

> Könnte ich auch 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2 festlegen, damit die Fragen der zwei Bedingungen abwechselnd auftreten, oder wird das durch den Shuffle sowieso passieren?

Das shuffle() mischt die Liste zufällig. Wenn Sie es lieber abwechseln haben wollten, dann würden Sie es in 1,2,1,2... schreiben und dafür nicht mehr mit shuffle() mischen.

> Sobald ich bspw. versuche IN01_01 aus Ihrem Code mit meiner eigenen Frage EX01 zu ersetzen, sagt die Website mir, dass das PHP-Konstrukt nicht verwendet werden darf..

Wenn Sie posten, welches Konstrukt genau moniert wird und wie Ihr PHP-Code genau aussieht, dann kann ich darauf gerne genauer eingehen.

Aber das IN01_01 müssen Sie durch die Kennung der internen Variable (s. Anleitung) ersetzen, welche sie für die Rotation neu angelegt haben. Nicht durch die Fragen, die Sie anzeigen möchten.

> Und wofür steht in Ihrem Beispiel RG01?

Für Ihren Zufallsgenerator, der die Gruppen 1 und 2 unterscheidet. Falls ich Sie falsch verstanden habe, wird der Code nochmal einfacher :)
by s132943 (120 points)
edited by SoSci Survey
Herzlichen Dank!

Ich starte jetzt so:

Zufallsgenerator EX35, dann

// Randomisierte Zuordnung zu Gruppe Experte ODER Nicht-Experte
if (value('EX35') == 1) {
  question('EX01');
} elseif (value('EX35') == 2) {
  question('NE01');
}

// Array erstellt mit 16 Elementen
if (!isset($mix)) {
  $mix = [1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2];
// Array-Elemente mischen
  shuffle($mix);
// Mittels isset() und registerVariable() wird im Interview nur einmal gemischt.
Mit put() speichern der Zuordnung in 16 interne Variablen.
// In eigener Rubrik sind 16 int. Variablen angelegt (Kennung IN01_01 bis IN16-01)
  registerVariable($mix);
  foreach ($mix as $i => $n) {
    put(id('IN01', $i+1), $n);
  }
}

//Bei jeder der 16 Fragen ist eine Variable hinterlegt. (DA BIN ICH UNSICHER)
Anhand dieser Var. kann entscheiden werden, ob Variante A oder B gezeigt werden soll.
nd Sie haben noch Ihre Zufallszahl für die beiden Gruppen.

if (value('EX35') == 1) {
  // Zufallsgruppe EX
  if (value('IN01_01') == 1) {
    // Variante EX-1-A
  } else {
    // Variante EX-1-B
  }
} else {
  // Zufallsgruppe NE
  if (value('IN01_01') == 2) {
    // Variante NE-1-A
  } else {
    // Variante NE-1-B
  }
}

// Eigene Fragen einbinden
  if (value('IN01_01') == 1) {
    // Variante EX-1-A
    question('EX01', 'EX02', 'EX03', 'EX04', 'EX05', 'EX06', 'EX07', 'EX08', 'EX09',
            'EX10', 'EX11', 'EX12', 'EX13', 'EX14', 'EX15', 'EX16');
    // Variante EX-1-B
  } else {
    question('EX17', 'EX18', 'EX19', 'EX20', 'EX21', 'EX22', 'EX23', 'EX24', 'EX25', 'EX26', 'EX27', 'EX28', 'EX29', 'EX30', 'EX31', 'EX32');
 if (value('IN01_01') == 2) {
    // Variante NE-1-A
    question('NE01', 'NE03', 'NE05', 'NE07', 'NE09', 'NE11', 'NE13', 'NE15', NE17',
            'NE19', 'NE21', 'NE23', 'NE25', 'NE27', 'NE29', 'NE31');
// Variante NE-1-B
  } else {
    question('NE02', 'NE04', 'NE06', 'NE08', 'NE10', 'NE12', 'NE14', 'NE16', 'NE18', 'NE20', 'NE22', NE24', 'NE26', 'NE28', 'NE30', 'NE32');


Nun erscheinen die Fehlermeldungen:

1. Warnung: Das PHP Konstrukt Var darf im PHP-Code nicht verwendet werden.

2. Der PHP-Code enthält unzulässige Funktionsaufrufe oder Schlüsselwörter und wurde daher nicht ausgeführt

Ich glaube ich habe die Zuordnung von Internen Variablen (als Fragen) und den tatsächlichen Fragebogenfragen noch nicht richtig gelöst bzw. verstanden. Ich habe wie vorab beschrieben 64 Fragen angelegt als "Texteingabe offen" und nun habe ich zusätzlich in einer neuen Rubrik 16 Interne Variablen festgelegt, welche die Kennungen IN01_01 bis IN16_01 haben.

Sofern dieser Code irgendwann klappt, wäre es ideal, wenn jede Frage einzeln auf einer Seite angezeigt werden könnte.

Danke für Ihre Unterstützung und Grüße,
by SoSci Survey (304k points)
Dieser Code funktioniert nicht:

> question('EX01', 'EX02', 'EX03', 'EX04', 'EX05', 'EX06', 'EX07', 'EX08', 'EX09',
            'EX10', 'EX11', 'EX12', 'EX13', 'EX14', 'EX15', 'EX16');

Legen Sie bitte 16 Seiten im Fragebogen an. Und kopieren Sie den PHP-Code auf jede der 16 Seiten. Auf der ersten kommt dann..

if (value('EX35') == 1) {
  // Zufallsgruppe EX
  if (value('IN01_01') == 1) {
    // Variante EX-1-A
    question('EX01');
  } else {
    // Variante EX-1-B
    question('EX17');
  }
} else {
  // Zufallsgruppe NE
  if (value('IN01_01') == 2) {
    // Variante NE-1-A
    question('NE01');
  } else {
    // Variante NE-1-B
    question('NE02');
  }
}

Auf der zweiten Seite jeweils die nächsten Fragen:

if (value('EX35') == 1) {
  // Zufallsgruppe EX
  if (value('IN01_01') == 1) {
    // Variante EX-2-A
    question('EX02');
  } else {
    // Variante EX-2-B
    question('EX18');
  }
} else {
  // Zufallsgruppe NE
  if (value('IN01_01') == 2) {
    // Variante NE-2-A
    question('NE03');
  } else {
    // Variante NE-2-B
    question('NE04');
  }
}

Die Zeilen mit den Schägstrichen // sind übrigens nur Kommentare/Hinweise für Sie. Die können Sie auch weglassen.

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

...