SNAP#
The Supplemental Nutrition Assistance Program (SNAP) is a program that provides food assistance to low-income families. Eligibility depends on household size, state, and income, before and after a series of deductions involving earnings and various costs such as shelter and childcare.
Examples#
California currently provides emergency allotments for the Covid-19 pandemic. This tops up every eligible household to the maximum allotment for their household size, or $95 per month, whichever is larger.
These examples show SNAP allotments for a sample household, depending on their characteristics, both with (Full
) and without (Normal
) the emergency allotment.
How earnings affect a one-person household’s SNAP allotments#
Consider a single person household in California with $1,000 monthly earned income and $600 monthly rent. They would be eligible for $145 per month in SNAP allotments, or a top-up to the full $250 with the emergency allotment. Since the top-up is $105, less than the $95 emergency allotment minimum, they would not receive more than the maximum allotment.
from policyengine_us import IndividualSim
import pandas as pd
import plotly.express as px
sim_emp = IndividualSim(year=2022)
sim_emp.add_person(name="person", employment_income=1000 * 12)
sim_emp.add_spm_unit(
name="spm_unit", members=["person"], housing_cost=600 * 12
)
print(
"SNAP normal allotment: ",
round(sim_emp.calc("snap_normal_allotment")[0] / 12),
)
print(
"SNAP emergency allotment: ",
round(sim_emp.calc("snap_emergency_allotment")[0] / 12),
)
print("Total SNAP: ", round(sim_emp.calc("snap")[0] / 12))
SNAP normal allotment: 159
SNAP emergency allotment: 99
Total SNAP: 258
What if their earnings change? They receive the maximum allotment of $250 per month until they reach $720 in monthly earnings, plus the $95 emergency allotment, coming to $345. When their income hits $980 per month, their normal allotment falls to $155, at which point their total allotment stabilizes at $250. The normal allotment then continues to fall until their earnings reach $1,350, at which point their continue to receive the $20 minimum monthly allotment until they reach $2,150 per month, 200% of the poverty line. At 200% of the poverty line, both their normal and full allotment fall to $0.
sim_emp.vary("employment_income", max=2500 * 12, step=120)
import plotly.express as px
LABELS = dict(
employment_income="Monthly employment income",
dividend_income="Monthly dividend income",
income="Monthly income",
income_source="Income source",
housing_cost="Monthly housing cost",
snap="Monthly SNAP allotment",
mtr="Marginal tax rate from SNAP",
housing_subsidy_rate="Housing subsidy rate from SNAP",
allotment="SNAP allotment",
)
emp_df_full = pd.DataFrame(
dict(
employment_income=sim_emp.calc("employment_income")[0],
allotment="Full",
snap=sim_emp.calc("snap")[0],
mtr=-sim_emp.deriv("snap", "employment_income"),
)
)
emp_df_normal = pd.DataFrame(
dict(
employment_income=sim_emp.calc("employment_income")[0],
allotment="Normal",
snap=sim_emp.calc("snap_normal_allotment")[0],
mtr=-sim_emp.deriv("snap_normal_allotment", "employment_income"),
)
)
emp_df = pd.concat([emp_df_full, emp_df_normal])
emp_df[["employment_income", "snap"]] = (
emp_df[["employment_income", "snap"]] / 12
).round()
fig = px.line(
emp_df,
"employment_income",
"snap",
color="allotment",
labels=LABELS,
title="SNAP allotment for a one-person household in California with $600 monthly housing costs",
)
fig.update_layout(xaxis_tickformat="$,", yaxis_tickformat="$,")
fig.show()