Documentation

US Nested Genpop

You can insert this screener into your survey using

Code
s.standard_screener("US", "NestedGenPop")

You can also pass the optional id parameter to set a stable identifier prefix for the generated screener questions; if it is not set, the question text is used.

Or if you want to edit it, just copy and paste the code below:

Code
age = s.numeric_question( question="How old are you?", min_max=(18, 99), recodes={ "18-24": "18-24", "25-34": "25-34", "35-44": "35-44", "45-54": "45-54", "55-64": "55-64", "65+": "65+", }, ) gender = s.select_question("What is your gender?", ["Male", "Female", "Non-Binary", "Prefer not to say"]) ethnicity = s.select_question( "What is your ethnicity?", [ "White", "Black", "Other", ], ) hispanic = s.select_question("Would you describe yourself as Hispanic?", ["Yes", "No"]) income = s.numeric_question( "What is your annual income?", min_max=(0, 500000), recodes={ "0-24999": "Less than $25,000", "25000-49999": "$25,000 to $49,999", "50000-99999": "$50,000 to $99,999", "100000-149999": "$100,000 to $149,999", "150000-500000": "$150,000 or more", }, ) s.select_question( "What is your highest level of education?", [ "Less than high school degree", "High school graduate", "Some college", "Bachelor's degree", "Master's degree", "Post-graduate degree", ], ) region = s.select_question( "Which region of the country do you come from?", options=["Northeast", "Midwest", "South", "West"] ) # Age quotas s.set_quota( name="Age", quotas=[ s.quota("18-24", criteria=(18 <= age <= 24), quota=0.12), s.quota("25-34", criteria=(25 <= age <= 34), quota=0.18), s.quota("35-44", criteria=(35 <= age <= 44), quota=0.17), s.quota("45-54", criteria=(45 <= age <= 54), quota=0.16), s.quota("55-64", criteria=(55 <= age <= 64), quota=0.17), s.quota("65-99", criteria=(65 <= age <= 99), quota=0.2), ], ) # Ethnicity x Hispanic quotas s.set_quota( name="Ethnicity_Hispanic", quotas=[ s.quota("White_Hispanic_Yes", criteria=(ethnicity == "White") & (hispanic == "Yes"), quota=0.18), s.quota("White_Hispanic_No", criteria=(ethnicity == "White") & (hispanic == "No"), quota=0.58), s.quota("Black_Hispanic_Yes", criteria=(ethnicity == "Black") & (hispanic == "Yes"), quota=0.01), s.quota("Black_Hispanic_No", criteria=(ethnicity == "Black") & (hispanic == "No"), quota=0.13), s.quota("Other_Hispanic_No", criteria=(ethnicity == "Other") & (hispanic == "No"), quota=0.10), ], ) # Hispanic quotas (flat) s.set_quota( name="Hispanic", quotas=[ s.quota("Yes", criteria=(hispanic == "Yes"), quota=0.19), s.quota("No", criteria=(hispanic == "No"), quota=0.81), ], ) # Gender x Age quotas s.set_quota( name="Age and Gender", quotas=[ s.quota( f"{gender_val}_{min_age}-{max_age}", criteria=(gender == gender_val) & (age >= min_age) & (age <= max_age), quota=quota_val, ) for gender_val, age_quotas in { "Male": { (18, 24): 0.06, (25, 34): 0.09, (35, 44): 0.085, (45, 54): 0.08, (55, 64): 0.085, (65, 99): 0.09, }, "Female": { (18, 24): 0.06, (25, 34): 0.09, (35, 44): 0.085, (45, 54): 0.08, (55, 64): 0.085, (65, 99): 0.11, }, }.items() for (min_age, max_age), quota_val in age_quotas.items() ], ) # Income x Gender quotas s.set_quota( name="Income_Gender", quotas=[ s.quota( f"{income_range}_{gender_val}", criteria=gender_quotas["criteria"] & (gender == gender_val), quota=gender_quotas[gender_val], ) for gender_val in ["Male", "Female"] for income_range, gender_quotas in { "0-24999": {"Male": 0.08, "Female": 0.09, "criteria": (income < 25000)}, "25000-49999": {"Male": 0.09, "Female": 0.10, "criteria": (income >= 25000) & (income < 50000)}, "50000-99999": {"Male": 0.14, "Female": 0.14, "criteria": (income >= 50000) & (income < 100000)}, "100000-149999": {"Male": 0.08, "Female": 0.08, "criteria": (income >= 100000) & (income < 150000)}, "150000-500000": {"Male": 0.10, "Female": 0.10, "criteria": (income >= 150000)}, }.items() ], ) # Region quotas s.set_quota( name="Region", quotas=[ s.quota("Northeast", criteria=(region == "Northeast"), quota=0.18), s.quota("Midwest", criteria=(region == "Midwest"), quota=0.23), s.quota("South", criteria=(region == "South"), quota=0.37), s.quota("West", criteria=(region == "West"), quota=0.22), ], )