Methodology for HUD Income Levels?

Hi,

I am trying to replicate the HUD AMI Household income distribution using the 2017-2021 ACS PUMS data for Colorado (see https://www.huduser.gov/portal/datasets/cp.html) .  Does anyone have a source for the algorithm used by the Census Bureua to calculate the counts HUD uses?

Specifically, I'd like information estimating the number of households at  30% AMI used by HUD CHAS data

This working paper presents analysis of custom tabulations of the 2006-2010 American Community Survey (ACS), known as the "CHAS data." The CHAS data combine ACS microdata with HUD adjusted median family incomes (HAMFI) to create estimates of the number of households that would qualify for HUD assistance. Using these data, I estimate the number of rental units and ownership units that would be available to prototypical households at specified income levels.

https://www.huduser.gov/portal/publications/workpapr.html?search=program%20evaluation%20division

TIA

AB

Parents
  • Hi, Adam -- several years ago, I got an explanation from Census Bureau staff for how they do this in the CHAS data. Douglas's methods document pretty much captures it, and I've put a more data-focused step-by-step description of how it works below.

    First, though, it's really important to note that this method does NOT reflect HUD's official income limits, so the estimates coming out of the CHAS calculations will not necessarily show the number of households that were actually eligible for various forms of housing assistance in the year of the PUMS data. Looking at my metro (the Twin Cities) in the 2023 PUMS against the official income limits, the CHAS method underestimates the number of households at or below 60% of AMI by about 8,000 households (2.2%) while overestimating the number of households in the 61%-80% of AMI band by about 17,500 households (3.5%). If you want a more refined estimate of the number of households that are actually eligible for housing assistance, use HUD's official income limits (also outlined below).



    Using the CHAS method

    Here's how you'd work with the PUMS using the CHAS method:

    1. Assign each household record to an "AMI area" (following HUD's county-based definitions), then calculate the median family income for each of those AMI areas. "AMI areas" often means MSAs or non-metropolitan counties, but there are some exceptions. It can be difficult to replicate those using PUMA geographies, but Douglas's methods document shows a way to approximate them. At this point, each household has the median family income for its AMI area.
    2. Adjust those median family incomes for household size. To do this, subtract 10% for each person under four, and add 8% for each household over four. For example: for three-person households, multiply the overall median family income by 0.9; for six-person households, multiply it by 1.16. At this point, each household has the median family income in its AMI area, adjusted for its household size. (Note: this is not necessarily the actual median family income for each household size; this is only an adjustment that's part of the calculations.)
    3. Calculate the ratio of each household's income (not family income!) to the size-adjusted median family income in the AMI area. That ratio provides the categories in the CHAS data. If the ratio is 0.29, it shows up in the CHAS as "less than or equal to 30% of HAMFI." If the ratio is 0.31, it shows up in the CHAS as "greater than 30% but less than or equal to 50% of HAMFI." At this point, each household is assigned to one and only one AMI category.

    Step 1 is the most complicated; everything else follows from that. To make it more concrete, here's some SAS code that shows the necessary calculations:

    /* Step 1: assign each household the median family income for their AMI area */
    MFI_AMIAREA = $$$$$$$; /* this varies by AMI area */

    /* Step 2: adjust those median family incomes based on each household's size */
    if NP < 4 then MFI_AMIAREA_ADJ = MFI_AMIAREA * (1 - ((4 - NP) * 0.1));
    else if NP > 4 then MFI_AMIAREA_ADJ = MFI_AMIAREA * (1 + ((NP - 4) * 0.08));
    else MFI_AMIAREA_ADJ = MFI_AMIAREA;

    /* Step 3 (change categories to whatever you want) */
    /* note that this is based on household income, not family income */
    INCRATIO = (HINCP * ADJINC) / MFI_AMIAREA_ADJ;
    if INCRATIO <= 0.3 then AMICAT = "1: At or below 30%";
    else if INCRATIO <= 0.5 then AMICAT = "2: 31%-50%";
    else if INCRATIO <= 0.6 then AMICAT = "3: 51%-60%";
    else if INCRATIO <= 0.8 then AMICAT = "4: 61%-80%";
    else AMICAT = "5: Above 80%";


    Using the official income limits

    If you want to use the official income limits instead, HUD provides them in Excel format (the link to the 2024 limits is at https://www.huduser.gov/portal/datasets/il.html#data_2024). Using 2024 as the example:

    1. Identify the AMI area for each household in the PUMS, like Step 1 of the CHAS method but without the additional calculation of median family income for each AMI area.
    2. Join the official 2024 income limits to the PUMS household records on AMI area and household size.
    3. Adjust each household's income to 2024 dollars. You could do what HUD does and use the CPI projections developed by the Congressional Budget Office, or you could develop a different factor that represents change in incomes instead of prices (the CPI). Incomes may not have changed at the same rate as prices, and it's income that determines program eligibility.
    4. Compare each household's adjusted income to the official limits to put them into AMI categories.

    HHINC_ADJ = HINCP * ADJINC * {some factor representing how much you think incomes have changed since the PUMS year};
    if HHINC_ADJ <= inclimit30 then AMICAT = "1: At or below 30%";
    else if HHINC_ADJ <= inclimit50 then AMICAT = "2: 31%-50%";
    else if HHINC_ADJ <= (inclimit50 * 1.2) then AMICAT = "3: 51%-60%" /* for limits not provided by HUD, use multiples of the 50% income limit */
    else if HHINC_ADJ <= inclimit80 then AMICAT = "4:61%-80%";
    else AMICAT = "5: Above 80%";


    Into the weeds on CHAS calculations vs official income limits

    Looking only at methods, there are two primary reasons why CHAS calculations yield different results from official income limits.

    First, HUD does lots of things in its calculations, so the 30%/50%/80% income limits might not actually be 30%/50%/80% of the AMI area's median family income. Examples include raising (or lowering) the income limits where housing costs are particularly high (or low), capping each AMI area's 80% of AMI income limit at the national median, adopting the HHS poverty guidelines as the 30% of AMI income limit if the former is greater than the latter, limiting year-to-year change, etc.

    Second, the median family incomes used in HUD's official income limits aren't calculated directly from the PUMS data you're analyzing, as they are in the CHAS method. When HUD is calculating income limits for a given year (usually released sometime in April of that year), they obviously don't have access to income data for that year. So they start with median family incomes from the ACS a couple years prior, then adjust them for (forecasted) inflation. Those official median family incomes reflect the median income that year IF median incomes change right along with inflation -- which may not be the case. Looking at my metro (Minneapolis-Saint Paul-Bloomington), HUD's official median family income in their 2021 income limits (2018 ACS data adjusted upward by 4.5% forecasted inflation) was $104,900; the 2021 ACS later showed an actual median family income of ~$110,800 (median income increased more than the CPI, probably due partly to COVID stimulus funds). Conversely, HUD's official median family income in the 2023 income limits was $124,900 (2021 ACS data increased by 12% forecasted inflation); the 2023 ACS later showed ~$121,900 (median income increased less than prices).

  • Thanks and

    I will review your comments and paper against what I came up with and post my results.  I appreciate hearing from you both.

    Cheers--

    Adam

Reply Children
No Data