Housing assistance#

Housing assistance is a payment that varies with income, household size, rental expenses, local economic conditions, and other factors.

How earnings affect a one-person household’s housing assistance#

Consider a single person household in San Francisco, California with $2,000 monthly earned income and $1,000 monthly rent. They would be eligible for $400 per month in housing assistance.

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=2000 * 12)
sim_emp.add_spm_unit(
    name="spm_unit",
    members=["person"],
    hud_gross_rent=1_000 * 12,
    # 2022 AMI.
    # https://sfmohcd.org/sites/default/files/Documents/MOH/BMR%20Ownership/2022%20AMI-IncomeLimits.pdf
    ami=138550,
    # 2019 1BR payment standard.
    # https://sfmohcd.org/sites/default/files/Documents/MOH/Asset%20Management/2019%20AMI_RentLimits-HMFA.pdf
    pha_payment_standard=2748 * 12,
)

print(
    "Housing assistance: ",
    round(sim_emp.calc("housing_assistance")[0] / 12),
)
Housing assistance:  400

What if their earnings change? They receive their full rent of $1,000 if they have zero earnings, and the benefit phases out at 30 cents per dollar of earnings, until it fully phases out at $3,333 monthly earnings.

sim_emp.vary("employment_income", max=4_000 * 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",
    housing_assistance="Monthly housing assistance",
    hap_mtr="Marginal tax rate from HAP",
    housing_assistance_mtr="Marginal tax rate from housing assistance",
    hap="Housing assistance payment (if eligible)",
)

emp_df_full = pd.DataFrame(
    dict(
        employment_income=sim_emp.calc("employment_income")[0] / 12,
        hap=sim_emp.calc("hud_hap")[0] / 12,
        housing_assistance=sim_emp.calc("housing_assistance")[0] / 12,
        hap_mtr=-sim_emp.deriv("hud_hap", "employment_income"),
        housing_assistance_mtr=-sim_emp.deriv(
            "housing_assistance", "employment_income"
        ),
    )
)

fig = px.line(
    emp_df_full,
    "employment_income",
    "housing_assistance",
    labels=LABELS,
    title="Housing assistance for a one-person household in California with $1,000 monthly housing costs",
)
fig.update_layout(xaxis_tickformat="$,", yaxis_tickformat="$,")
fig.show()