0 votes
in SoSci Survey (dt.) by s110744 (190 points)
edited by s110744

Liebes SoSci Survey Team,

ich möchte im Rahmen meiner Umfrage Personen aus drei verschiedenen Regionen befragen.
Ich habe für jede dieser Regionen Postleitzahlen (insgesamt 1600 Postleitzahlen). In jeder dieser Regionen habe ich Quoten auf Alter, Geschlecht und Bildungsabschluss mit dem Marktforschungsinstitut vereinbart. Leider habe ich beim Testen meines Fragebogens festgestellt, dass der Quotenstopp nicht richtig funktioniert. Wenn ich zwei exakt gleiche Probanden simuliere (männlich, 18 Jahre alt, aus Postleitzahl 20144, mit Bachelorabschluss), müsste meines Wissens der zweite Proband wegen Full Quota ausgescreent werden (laut meiner Quota von 1), oder? Darüber hinaus stellt sich mir die Frage was passiert, wenn ich eine Probandin simuliere, die in Alter, Abschluss und Postleitzahl ansonsten übereinstimmt. Wird diese laut meinem Code ausgescreent (sofern der Code richtig laufen würde) oder würde sie durch den Filter durchgehen?

Zudem musste ich soeben feststellen, dass auch Postleitzahlen, die nicht im Array vorhanden sind, nicht ausgescreent werden.

Können Sie mir dabei helfen?

Code:

$quota = [
  '1-1' => 1, '1-2' => 1,  // Personen pro Geschlecht für die Regionengruppe 1
  '1-3' => 1, '1-4' => 1,  // Personen pro Bildungsabschluss für die Regionengruppe 1
  '1-5' => 1, '1-6' => 1,  // Personen pro Altersgruppe für die Regionengruppe 1
  '1-7' => 1, '1-8' => 1,  // Personen pro Altersgruppe für die Regionengruppe 1

  '2-1' => 1, '2-2' => 1,  // Personen pro Geschlecht für die Regionengruppe 2
  '2-3' => 1, '2-4' => 1,  // Personen pro Bildungsabschluss für die Regionengruppe 2
  '2-5' => 1, '2-6' => 1,  // Personen pro Altersgruppe für die Regionengruppe 2
  '2-7' => 1, '2-8' => 1,  // Personen pro Altersgruppe für die Regionengruppe 2

  '3-1' => 1, '3-2' => 1,  // Personen pro Geschlecht für die Regionengruppe 3
  '3-3' => 1, '3-4' => 1,  // Personen pro Bildungsabschluss für die Regionengruppe 3
  '3-5' => 1, '3-6' => 1,  // Personen pro Altersgruppe für die Regionengruppe 3
  '3-7' => 1, '3-8' => 1,  // Personen pro Altersgruppe für die Regionengruppe 3
];

//Geschlecht wird direkt ausgelesen
$gender = value('QU03');

//Bildung wird umkodiert
$education = value('QU01');
if ($education = 'QU01_1' || 
    $education = 'QU01_2' || 
    $education = 'QU01_3' || 
    $education = 'QU01_4' || 
    $education = 'QU01_8') {
  $educationGroup = 3;
} else {
  $educationGroup = 4;
}

//Alter wird kodiert
$age = value('QU02');
if ($age = 'QU02_1' || 
    $age = 'QU02_2' || 
    $age = 'QU02_3' ||  
    $age = 'QU02_4' ||
    $age = 'QU02_5' ||
    $age = 'QU02_6' ||
    $age = 'QU02_7' ||
    $age = 'QU02_8') {
  $ageGroup = 5;
} elseif ($age = 'QU02_9' || 
    $age = 'QU02_10' || 
    $age = 'QU02_11' ||
    $age = 'QU02_12' ||  
    $age = 'QU02_13'){
  $ageGroup = 6;
} elseif ($age = 'QU02_14' || 
    $age = 'QU02_15' || 
    $age = 'QU02_16' ||
    $age = 'QU02_17' ||
    $age = 'QU02_18' ||
    $age = 'QU02_19' ||
    $age = 'QU02_20' ||
    $age = 'QU02_21' ||
    $age = 'QU02_22' ||
    $age = 'QU02_23' ||
    $age = 'QU02_24' ||
    $age = 'QU02_25' ||
    $age = 'QU02_26' ||
    $age = 'QU02_27' ||
    $age = 'QU02_28' ||
    $age = 'QU02_29' ||
    $age = 'QU02_30' ||
    $age = 'QU02_31' ||
    $age = 'QU02_32' ||  
    $age = 'QU02_33'){
  $ageGroup = 7;
} elseif ($age = 'QU02_34' || 
    $age = 'QU02_35' || 
    $age = 'QU02_36' ||
    $age = 'QU02_37' ||
    $age = 'QU02_38' ||
    $age = 'QU02_39' ||
    $age = 'QU02_40' ||
    $age = 'QU02_41' ||
    $age = 'QU02_42' ||
    $age = 'QU02_43' ||
    $age = 'QU02_44' ||
    $age = 'QU02_45' ||
    $age = 'QU02_46' ||
    $age = 'QU02_47' || 
    $age = 'QU02_48'){
  $ageGroup = 8;
}

//Gruppen werden kodiert
$region = value('RI09_01');
if ($region = '20038' ||
    $region = '20088' ||
    $region = '20095' ||
    $region = '20097' ||
    $region = '20099' ||
    $region = '20144' ||
    $region = '20146' ||
    $region = '20148' ||
    $region = '20149' ||
    $region = '20249' ||
    $region = '20251' ||
    $region = '20253' ||
    $region = '20255' ||
    $region = '20257' ||
    $region = '20259' ||
    $region = '20350' ||
    $region = '20354' ||
    $region = '20355' ||
    $region = '20357' ||
    $region = '20359' ||
    $region = '20457' ||
    $region = '20459' ||
    $region = '20535' ||
    $region = '20537' ||
    $region = '20539' ||
    $region = '21029' ||
    $region = '21031' ) {
  $regionGroup = 1;
} elseif ($region = '41812' ||
    $region = '41836' ||
    $region = '41844' ||
    $region = '41849' ||
    $region = '52062' ||
    $region = '52064' ||
    $region = '52066' ||
    $region = '52068' ||
    $region = '52070' ||
    $region = '52072' ||
    $region = '52074' ||
    $region = '52076' ||
    $region = '52078' ||
    $region = '52080' ||
    $region = '52134' ||
    $region = '52146' ||
    $region = '52152' ) {
  $regionGroup = 2;
} elseif ($region = '01945' ||
    $region = '01968' ||
    $region = '01979' ||
    $region = '01983' ||
    $region = '01987' ||
    $region = '01990' ||
    $region = '01993' ||
    $region = '01994' ||
    $region = '01996' ||
    $region = '01998' ||
    $region = '03042' ||
    $region = '03044' ||
    $region = '03046' ||
    $region = '03048' ) {
  $regionGroup = 3;
}

// Definition einer Variable mit Region und Geschlecht
$demRegionGender = $regionGroup.'-'.$gender;
$demRegionAge = $regionGroup.'-'.$ageGroup;
$demRegionEducation = $regionGroup.'-'.$educationGroup;

// Abruf der vorliegenden Fälle für diese Merkmalsausprägung
$cases1 = statistic('count', 'IV01_01', $demRegionGender);
$cases2 = statistic('count', 'IV01_02', $demRegionAge);
$cases3 = statistic('count', 'IV01_03', $demRegionEducation);

// Screenout
if (!array_key_exists($demRegionGender, $quota)) {
  redirect('https://www.panelanbieter.de/?xyz=screenoutGHIJKI&uid=%reference%');
}
if (!array_key_exists($demRegionAge, $quota)) {
  redirect('https://www.panelanbieter.de/?xyz=screenoutGHIJKI&uid=%reference%');
}
if (!array_key_exists($demRegionEducation, $quota)) {
  redirect('https://www.panelanbieter.de/?xyz=screenoutGHIJKI&uid=%reference%');
}
 
// Auslesen der Quote für die demografische Gruppe
$maxPerGroupGender = $quota[$demRegionGender];
$maxPerGroupAge = $quota[$demRegionAge];
$maxPerGroupEducation = $quota[$demRegionEducation];
 
// Quotenstopp
if ($cases1 >= $maxPerGroupGender) {
  redirect('https://www.panelanbieter.de/?xyz=quotaABCDEF&uid=%reference%');
}
if ($cases2 >= $maxPerGroupAge) {
  redirect('https://www.panelanbieter.de/?xyz=quotaABCDEF&uid=%reference%');
}
if ($cases3 >= $maxPerGroupEducation) {
  redirect('https://www.panelanbieter.de/?xyz=quotaABCDEF&uid=%reference%');
}

1 Answer

0 votes
by SoSci Survey (327k points)

Wenn ich zwei exakt gleiche Probanden simuliere (männlich, 18 Jahre alt, aus Postleitzahl 20144, mit Bachelorabschluss), müsste meines Wissens der zweite Proband wegen Full Quota ausgescreent werden (laut meiner Quota von 1), oder?

Ja. Für die Fehlersuche ist der Debug-Modus in aller Regel sehr hilfreich. Dort sehen Sie in der Debug-Information, was statistic() als Zahl ermittelt hat. Alternativ kann man es auch mit einem html('<p>Ergebnis 1: '.$cases1.'<p>'); anzeigen lassen.

Ein Fehler, den ich spontan in Ihrem Code sehe: Die IF-Filter verwenden ein einfches Gleichheitszeichen, kein doppeltes (==). Mit dem einfachen Gleichheitszeichen prüfen Sie aber nicht die Gleichheit, sondern ändern den Inhalt der Variable.

by s110744 (190 points)
Vielen Dank für die Antwort, jetzt funktioniert alles wie gewünscht.

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

...