Appendix B — Part II Data Appendix: Harmonized Survey Data

This appendix documents the data underlying Part II’s quantitative analysis: the primary survey sources, the methodological decisions made while harmonizing them into a single analytic series, the resulting codebook, an external validation exercise, extended per-figure notes, and the steps required to reproduce the pipeline. It is self-contained so that it can travel with Part II if that chapter is developed into a standalone article (see Section A.1’s index).

B.1 Data Sources

The quantitative analyses in Part II rely on the following primary data sources:

PNAD — Pesquisa Nacional por Amostra de Domicílios (Annual, 1992–2011). Collected by IBGE, this is a household survey providing annual microdata on income, education, and labor market outcomes. The rural North was excluded in 2004–2015 (Decision D03) for comparability with the PNAD Contínua’s initial geographic coverage.

PNAD Contínua — PNADC (2012–2025). The redesigned continuous household survey that replaced PNAD Anual. Uses a more complex sample design (rotating panels, stratified PSU sampling) requiring exact complex survey estimation via survey::svydesign().

Censos Demográficos (1960, 1970, 1980, 1991, 2000, 2010). Decennial censuses accessed via the censobr R package (v0.5.0), which provides harmonized Arrow parquet files. Microdata are cached locally after first download.

Salário mínimo — IPEADATA. Monthly minimum wage series used to deflate income brackets in historical censuses.

B.2 Methodological Decisions

Methodological decisions made during data harmonization are recorded in a numbered decision log maintained at docs/harmonization_decisions.md. The table below provides a summary of the most consequential decisions.

Table B.1: Summary of key methodological decisions in the data harmonization pipeline.
Decision Description
D01 Deflate all monetary values to January 2024 prices using the IPCA (via deflateBR), applied at each survey’s reference date
D02 Exclude observations with zero per capita household income (renda_dom_pcta == 0)
D03 Exclude rural North (UFs 11–16) from PNAD Anual 2004–2015 for comparability with PNADC
D11 Exclude 2020–2021 from the harmonized series (COVID-19 data methodology)
D19 Tertiary enrollment indicator (ens_sup_a) = currently enrolled (not ever attended)
D20 Treat the PNAD 1992–1999 non-declared-income sentinel code (V4722 == 999999999999) as missing at import, so that non-declared income is excluded alongside zero income (as D02 already stated) rather than silently ranked at the top of the income distribution
D21 Retain the survey-specific unit of income aggregation across the splice — family in PNAD Anual, household in PNADC — rather than rebuilding the series on a single unit; sensitivity reported below
D21-B Historical census education proxy: 1960 uses V213 (combined proxy); 1970 uses V038 (graduates only — not correctable; documented as limitation)
D27 Decile assignment for variables with ≤ 9 distinct values: CDF-lower-bound method (decil = ceiling(cdf_lo × 10), clamped to [1, 10]). Applied to 1960 (8 midpoints). Full rationale in docs/audits/censo_historico_1960_1980.md.

B.3 Harmonized Analytic Datasets

The harmonization pipeline produces two analysis-ready parquet files, generated by R/01_pipeline/035_Splice_Microdados.R from intermediate PNAD Anual and PNAD Contínua (PNADC) extracts:

  • output/Microdados_Jovens_18_24_1992_2025.parquet (≈1.42 million rows) — the 18–24 age subset used for the main access-to-tertiary-education series.
  • output/Microdados_Todas_Idades_1992_2025.parquet (≈12.0 million rows) — the full population with valid income, used for income-decile construction and robustness checks across age groups.

Universe and sample. Both files are restricted to individuals in households reporting strictly positive per-capita household income (Decision D02); PNADC is restricted to first-interview respondents only, to avoid the panel’s repeated-measurement structure inflating effective sample size. Excluding zero or non-declared income removes a modest share of the population, and the two categories are conceptually distinct: zero income is a declared value, whereas non-declared income (recorded in the 1992–1999 PNAD under a sentinel code; Decision D20) is unknown, so that assigning those individuals to any position in the income distribution would be an unfounded imputation. In 2001–2024 the combined exclusion ranges from 1.0 to 3.0 percent per year (peaking at 3.0 percent in 2011); in 1992–1999 it ranges from 4.9 to 6.5 percent per year, roughly half declared-zero and half non-declared income. Sensitivity to this exclusion is tested in R/02_validation/098_Sensitivity_Renda_Zero.R. The series covers 1992–1999, 2001–2009, 2011–2019, and 2022–2024: the years 2000 and 2010 are absent because no PNAD was fielded in census years, and 2020–2021 are excluded for documented data-quality reasons related to the pandemic-era PNADC redesign (Decision D11). The rural North (IBGE states 11–16) is excluded from PNAD Anual 2004–2015 for comparability with the PNADC’s initial geographic coverage (Decision D03), but is retained in PNADC, which raises PNADC access rates by approximately 0.4 percentage points relative to a fully matched geography.

Variables.

Table B.2: Variable dictionary for the harmonized analytic datasets.
Column Type Domain Definition
ano integer 1992–2025 (with gaps) Survey year
idade integer 0–130 (18–24 in the youth subset) Age in years (PNAD V8005; PNADC V2009)
peso double >0 Person-level sampling weight (PNAD V4729; PNADC V1028, first visit)
renda_dom_pcta double >0 Nominal per-capita income of the respondent’s co-resident income unit, in the currency of the survey year (Cr$ 1992, CR$ 1993, R$ 1995+). The unit is the family in PNAD Anual (V4722/V4724) and the household in PNADC (VD5008); the two coincide exactly except where two or more families share a dwelling (Decision D21)
renda_real double >0 renda_dom_pcta converted to R$ and deflated by the IPCA to January 2024 prices (Decision D01)
ing_medio binary 0/1 Ever enrolled in secondary education. PNAD: current secondary/EJA-secondary/pré-vestibular enrollment, or prior course at or above colegial level, or years of schooling ≥ 9, or tertiary enrollment; PNADC: VD3004 ≥ 4
medio_completo binary 0/1 Completed secondary education. PNAD: years of schooling ≥ 11, or tertiary enrollment; PNADC: VD3004 ≥ 5
ens_sup binary 0/1 Ever enrolled in tertiary education — currently enrolled, graduated, or withdrawn; includes graduate study. This is the dissertation’s master access variable, validated against an external reference series to within ±0.3 percentage points nationally (Section B.4). It combines current-enrollment items with prior-enrollment items so that individuals who completed and exited tertiary education before the survey date are correctly counted as having accessed the system
ens_sup_a binary 0/1 Currently enrolled in tertiary education (a subset of ens_sup)
sup_completo binary 0/1 Completed tertiary education. PNAD: years of schooling ≥ 15 (standard proxy); PNADC: VD3004 = 7
decil integer 1–10 Income decile of renda_real, computed over the full population (not only youth), weighted, separately within each year × source (Decisions D08, D18). D1 = poorest 10 percent
vintil integer 1–20 As decil, in twenty groups
fonte character “PNAD Anual” / “PNAD Contínua” Source survey. 2012–2015 exist in both sources (an intentional overlap retained to validate the splice); any analysis spanning these years must filter to a single source to avoid double-counting

Logical hierarchy. By construction, and verified at build time: ens_sup_a ⊆ ens_sup ⊆ ing_medio, and sup_completo ⊆ medio_completo ⊆ ing_medio.

Known limitations. Income deciles and vintiles are computed within year and within source; they are comparable as relative positions across years, not as fixed income bands. Years of schooling in 1992–1995 carry 21–22 percent missing values in the underlying PNAD item, which slightly understates medio_completo and sup_completo in that window (missing values are coded 0 unless ens_sup independently indicates otherwise). The ing_medio variable shows a residual 5-percentage-point gap between PNAD and PNADC in the overlap years, reflecting genuinely distinct measurement instruments (a course-based questionnaire in PNAD versus the derived VD3004 indicator in PNADC); all other variables splice with a gap of 1.1 percentage points or less. For cohorts educated under the pre-1971 schooling structure, segundo ciclo (colegial/científico/clássico) counts as secondary completion while primeiro ciclo (ginásio) does not.

B.4 Validation Against an External Reference Series

The harmonized ens_sup series was benchmarked against the independent tertiary-access series of Salata et al. (2025), which covers an overlapping period using a different processing pipeline (DataZoom/Stata). The comparison script (R/099_Compare_vs_Salata.R) computes, for every year and income decile common to both series, the difference between the harmonized estimate and the reference estimate; the full year-by-year and decile-by-decile output is preserved in 4-DA-Code/2026-06_Harmonizing-BR-Data/docs/audits/AUDIT_REPORT_vs_Salata.md, with the underlying figure and table at 6-images-tables/graphs/2026-06-09_099A_Compare_Salata_vs_Harm.png and ..._099B_Diff_Salata_vs_Harm.csv.

An initial round of this comparison surfaced a coding error in the tertiary-enrollment variable for the PNAD Anual years (1992–2015): the original construction captured only currently-enrolled students, omitting respondents who had already completed or withdrawn from tertiary education, with the gap concentrated in the top income decile and growing over time (reaching −12.5 percentage points at D10 before correction). This was corrected by incorporating the PNAD items for prior school attendance and highest level previously attended (V0606/V0607, renamed V6007 from 2007 onward) into the ens_sup construction, matching the definition used by Salata et al. and now used in the published dictionary above.

After this correction, the harmonized series and the reference series agree closely across the full 1992–2024 window:

Table B.3: National-level validation against Salata et al. (2025), final state.
Period Source National difference (harmonized − Salata) Assessment
1992–1999 PNAD histórica −0.08 to +0.09 pp Aligned
2001–2006 PNAD Anual +1.47 to +1.66 pp Documented excess — rural North exclusion (D03)
2007–2011 PNAD Anual +0.22 to +0.33 pp Aligned
2012–2015 PNAD Anual +0.09 to +0.19 pp Aligned
2016–2019 PNADC −0.01 to −0.08 pp Aligned
2022 PNADC −0.71 pp Acceptable — rural North retained in PNADC

Two aspects of the comparison are worth recording explicitly. First, the 2001–2006 excess of roughly 1.5 to 1.7 percentage points is the documented effect of excluding the rural North from PNAD Anual (Decision D03): because the rural North has access rates well below the national average, its exclusion mechanically raises the rate for every decile in those years, with the largest effect in the bottom deciles. Second, the benchmarking exercise itself surfaced a data error in an earlier version of the pipeline: the top decile (D10) for 1992–1999 initially sat 3 to 5 percentage points below the reference series, while D9 sat a comparable margin above it. Tracing that residual revealed that the historical PNAD records non-declared family income under a sentinel code (999999999999) which the import step was converting to a numeric value, silently ranking roughly 2.5 percent of individuals with unknown income at the top of each year’s income distribution (Decision D20). After excluding those cases — the treatment D02 had always specified for non-declared income, and the same adopted by Salata et al. — the 1992–1999 top-decile series agrees with the reference to within 1.3 percentage points (within 0.5 points in five of the seven years), and the D9 excess disappears. No artificial break was detected at the PNAD/PNADC splice point (2012–2015), where the two sources independently track the reference series within 0.4 percentage points of each other.

Averaged across the 26 years common to both series, the harmonized series is within 2 percentage points of the reference at every decile except the documented 2001–2006 rural-North window, and within 0.1 percentage points nationally outside that window and 2022 — a level of agreement adequate to support the descriptive and counterfactual analyses in Part II.

One further asymmetry deserves recording, because it concerns the ranking variable on which every decile and every concentration index in Part II depends. The IBGE distinguishes the household (all co-residents) from the family (the subset related by kinship), and a household may contain more than one family: a young adult who has partnered and had children while continuing to live with their parents constitutes a second family under the same roof. The annual PNAD supplies income aggregated at the family level (V4722, divided by family size V4724), whereas the PNADC’s derived variable VD5008 aggregates at the household level. Both exclude the same categories of resident — lodgers, domestic workers, and their relatives — so the two measures coincide exactly in single-family households and diverge only where families are co-resident, a configuration whose incidence falls from roughly 11 percent of the population in the late 1990s to 7 percent by 2015. The series retains each survey’s native unit rather than rebuilding both on a common one (Decision D21), and the cost of that choice is bounded by direct measurement: reconstructing the household-level measure from the raw microdata for seven years spanning the series (V4721 divided by the count of residents outside the excluded categories) shifts the Wagstaff index by between +0.0008 and +0.0063, always in the same direction and without temporal drift, against a series that falls from 0.77 in 1995 to 0.53 in 2015. Between 8 and 15 percent of 18-to-24-year-olds change decile under the alternative measure, but almost always by a single decile and in both directions, so the shift very largely cancels in aggregation (the rank correlation between the two measures never falls below 0.978, and no decile’s access rate moves by as much as one percentage point). The bias is thus a level effect an order of magnitude smaller than the confidence intervals drawn in the figures, and it leaves the trajectory — the quantity the chapter actually reads — unaffected. Replication code: 4-DA-Code/2026-06_Harmonizing-BR-Data/R/02_validation/101_Sensitivity_Renda_Familiar_vs_Domiciliar.R.

B.5 Reproduction Guide

The full pipeline is documented in 4-DA-Code/2026-06_Harmonizing-BR-Data/README.md (bilingual, with dependency list and execution order); this section summarizes the essentials. Scripts are run from the thesis repository root, not from a sub-project, so that relative paths to 5-data/ resolve correctly.

The core extract-transform-load sequence runs three scripts in R/01_pipeline/: one importing PNAD Anual 1992–1999 from raw SAS-format microdata, one importing PNAD Anual 2001–2015, and 035_Splice_Microdados.R, which combines both PNAD extracts with the cached PNADC 2012–2025 first-interview extract (built separately in the 2026-05_PNADcIBGE project) into the two final parquet files described in Section B.3. Decennial census validation points (1991, 2000, 2010), used only as cross-checks and not as part of the analytic series, are built separately via the censobr package.

Raw and intermediate microdata are not stored in the Git repository: they are downloaded or cached on first run into 5-data/ (maintained outside version control in the parent MancanoSync/ directory) because of file size. A fresh checkout therefore requires re-running the download steps before the harmonization scripts; cached files are reused on subsequent runs. Robustness checks (sensitivity to the zero-income exclusion, the rural North filter, and others) live in R/02_validation/; the figures used in the dissertation are produced by the scripts in R/03_analysis_plots/.

B.6 Alternative Specification: Access vs. Active Enrollment

The main analysis in Part II (Figure 2.4) measures change in active tertiary enrollment (ens_sup_a) — whether an 18–24-year-old is currently enrolled at the time of the survey. This criterion undercounts cumulative engagement with the system: a student who already graduated, or who withdrew after enrolling, no longer counts as “currently enrolled” even though they did access tertiary education. Readers who consider active enrollment too narrow a criterion for assessing distributive change can instead consult the figure below, which reproduces the identical decile-by-government design using ens_sup — whether an 18–24-year-old has ever accessed tertiary education (currently enrolled, graduated, or withdrawn; Section B.3, the dissertation’s master access variable).

Figure B.1: Total change in tertiary education access rate (ages 18–24, ever enrolled) by income decile and presidential term, Brazil 1992–2023.

The access-based series tracks the same qualitative pattern as the active-enrollment figure in Figure 2.4 — the same governments show gains or losses for the same deciles — but with larger absolute magnitudes throughout, since the access measure accumulates rather than resets: it does not lose cohorts who completed or withdrew. The full 1992–2023 period reaches +40.5 percentage points at D10 under the access criterion, against +29.1 under active enrollment. Replication code: 4-DA-Code/2026-06_Harmonizing-BR-Data/R/02_validation/042C_Tese_Dotplot_Acesso.R.

B.7 Extended Figure Notes

Since 2026-07-06, the in-chapter fignote under each figure is deliberately short (≤ ~5 printed lines; WRITING-STYLE.md §13.7): it states what the figure shows, the variable and cut, the confidence-interval method, and a link back here. This section is the second layer: one anchored subsection per figure, carrying the full methodological detail — harmonization decision codes, raw survey variable identifiers, source-splicing and estimation minutiae — that used to be repeated inside every fignote. Each entry cross-references Section B.2, Section B.3, or Section B.4 for whatever is common to several figures, rather than restating it.

B.7.1 Tertiary Access by Income Decile, 1992–2025 (@fig-decil-acesso-serie-historica)

Each series shows the share of 18–24-year-olds who had ever enrolled in tertiary education (ens_sup, cumulative access; Section B.2, Decision D19), by decile of per-capita household income and for the population as a whole. Deciles are computed within each survey year and source over the full population with strictly positive income (Section B.2, Decisions D02, D08, D18). The harmonized series uses PNAD Anual through 2015 and PNAD Contínua from 2016 onward, so that each year draws on a single source (Section B.3); the rural North is absent from PNAD Anual 2004–2015 (Decision D03). Lines are interrupted in years without a survey: 2000 and 2010 (census years, in which no PNAD was fielded) and 2020–2021 (excluded for pandemic-related data-quality reasons; Decision D11). Confidence intervals are 95% intervals: Wilson score intervals with the Kish effective sample size under a design effect of 2.0 for PNAD Anual (1992–2015), and design-based intervals from exact complex-survey estimation via survey::svydesign() (primary sampling units and strata) for PNAD Contínua (2016–2024). Diamonds mark independent validation points from the long-form samples of the 1991, 2000, and 2010 Demographic Censuses (via censobr); given the census sample sizes, their 95% confidence intervals span at most 0.6 percentage points and are narrower than the diamond markers themselves, so they are not drawn. The 1991 census reports income in fourteen ordinal ranges, from which deciles are approximated; the bracket boundaries leave no observations assigned to the third decile in that year (Section B.2, Decisions D26, D27). Government labels indicate the president, abbreviated for short terms (D. = Dilma II; L. = Lula III).

B.7.2 Relative Access Inequality, Wagstaff Index (@fig-wagstaff-acesso-matricula)

The Wagstaff concentration index (W) is a Gini-like scalar bounded for binary outcomes: W approaching zero indicates access has become de-commodified — independent of household income — while a high, positive W indicates access remains a commodity, allocated chiefly by ability to pay. W is computed via weighted survey GLM regression, a convenient parameterization of the concentration curve, under a Kish design-effect approximation (DEFF = 2.0) for PNAD Anual and exact complex-survey estimation for PNAD Contínua (Section B.3 for the source splice). Grey bands are 95% confidence intervals. Solid lines/circles denote ever accessed tertiary education (ens_sup); dashed lines/triangles denote currently enrolled (ens_sup_a; Section B.2, Decision D19 for both). The labels along the top mark each presidential administration’s term, with a thin underline spanning its exact period — the reference implementation for the government-term band used across the dissertation’s time-series figures (WRITING-STYLE.md §13.8).

B.7.3 Income Composition of Tertiary Students by Decile (@fig-composicao-decil-ens-sup-18-24)

Each bar shows the share of students aged 18–24 from each income decile. Variable: ens_sup = ever enrolled in tertiary education (Section B.2, Decision D19). Income deciles are computed within each survey year via Hmisc::wtd.quantile using sampling weights (Decision D02). Years 2000 and 2010 are excluded because no PNAD was conducted in Census years; 2020–2021 are excluded because of COVID-19 and the Auxílio Emergencial income transfer, which distorts the income distribution (Decision D11). For 2012–2015, only PNAD Anual observations are used to avoid double-counting the PNAD/PNADC overlap years (Section B.3). Percentage labels are shown for deciles with share ≥ 6%; decile labels only (no percentage) for shares ≥ 3%. Dashed horizontal lines indicate perfect equity (each decile = 10%). Government labels indicate the president, abbreviated for short periods (D. = Dilma II; L. = Lula III).

B.7.4 Change in Enrollment by Decile and Presidential Term (@fig-delta-matriculados-decil-governo)

Each point shows the total percentage-point change in the share of 18–24-year-olds actively enrolled in tertiary education (ens_sup_a), from the first year of each presidential term to the first year of the next; horizontal lines are 95% confidence intervals. Colour encodes significance rather than sign: a point is grey wherever its interval contains zero, so that a change of half a percentage point indistinguishable from none does not carry the same visual weight as one of fifteen, and blue and orange are reserved for gains and losses whose intervals lie entirely on one side of zero. The interval is that of the difference itself, with its standard error taken as the root of the sum of the two years’ squared standard errors, which treats the two surveys as independent; the test is therefore conservative twice over, since it also inherits the design-effect penalty on PNAD Anual and ignores the correlation between waves of the PNAD Contínua panel. Confidence intervals for the underlying rates are computed via Kish design-effect approximation (PNAD Anual) and exact complex-survey estimation via survey::svydesign() (PNAD Contínua). Because each point is a difference rather than a level, the two source surveys are spliced by presidential term rather than by year: every term panel draws on a single survey at both of its endpoints, PNAD Anual through 2015 and PNAD Contínua from 2015 onward, so that no difference shown here straddles the change of instrument and silently adds the discontinuity between the two questionnaires — and between the family and household bases of the per-capita income variable (Section B.2, Decision D21) — to the change it reports. The years 2012–2015 are carried by both surveys, which is what makes this possible; 2015 accordingly enters as PNAD Anual at the close of the Dilma I panel and as PNAD Contínua at the opening of the next, so the level at which one panel ends is not the level at which the following one begins. The full-period panel in the bottom-right corner is the single comparison no one survey spans, and is the only one that remains cross-survey. Panels are ordered chronologically left to right, top to bottom. Active enrollment is a conservative criterion that excludes cohorts who already graduated or withdrew; readers who consider this criterion too narrow can consult the alternative specification using ever-accessed status in Section B.6.

B.7.5 Mean Household Income by Percentile (@fig-renda-media-centil)

Each line shows the weighted mean real per-capita household income (deflated to January 2024 prices via the IPCA; Section B.2, Decision D01) within each income percentile group, for the selected years. Percentiles rank all individuals with strictly positive per-capita household income (Decision D02) by income, using sampling weights: each individual is assigned the centile given by the ceiling of the weighted cumulative population share multiplied by 100. Centiles 1 and 100 are excluded because of sampling instability at the extremes. For 2012, a year the harmonized series carries in both source surveys, only the PNAD Anual sample is used (Section B.3). The y-axis is truncated at R$8,000; only the top one or two centiles of each year exceed this limit, falling substantially above it. Open circles mark the percentile at which mean per-capita household income equals one (1 MW), one-and-a-half (1.5 MW), and three (3 MW) times the national minimum wage in force in January of that year, deflated to January 2024 prices via deflateBR. Minimum wage values (nominal, January): 2002 R$180; 2007 R$350; 2012 R$622; 2017 R$937; 2024 R$1,412.

B.7.6 Higher-Education Tuition vs. Consumer Prices and the Minimum Wage (@fig-ipca-mensalidade-curso-superior)

Both series track the higher-education tuition subitem of the IPCA, Brazil’s headline consumer price index, spliced from the four vintages of the subitem-level SIDRA series (tables 655, 2938, 1419, and 7060; the subitem is named Curso terceiro grau in 1999–2006 and Ensino superior thereafter) and expressed as a cumulative index with August 1999 = 100, the first month of the continuous post-stabilization series. The blue series deflates cumulative tuition readjustments by the headline IPCA (table 1737): values above 100 indicate that tuition rose faster than overall consumer prices after August 1999. The orange series divides the same tuition index by the nominal minimum wage (IPEADATA series MTE12_SALMIN12), measuring how the cost of the same tuition bill evolved relative to the wage floor — the more policy-relevant measure of affordability at the bottom of the income distribution. The step-like pattern reflects readjustments clustered at the start of each academic year (blue) and the annual minimum-wage adjustments (orange). The IPCA subitem is a price-change index computed over a fixed panel of institutions surveyed by the SNIPC in metropolitan areas, for households earning 1–40 minimum wages: it measures readjustment, not the price level or the average market ticket, and it does not capture compositional cheapening through the migration of enrollment toward distance learning and lower-priced institutions, so a falling market average ticket can coexist with this index rising. In real terms, tuition tracked or exceeded headline inflation until 2020 (peaking roughly 12% above the 1999 level) and fell below the 1999 benchmark only after the nominal tuition cuts of 2021 (annual readjustment of −1.0%); relative to the minimum wage, tuition fell by roughly 60%, with almost all of the decline concentrated in 2001–2012, the period of sustained real minimum-wage increases.

B.7.7 Higher-Education Tuition Burden by Income Decile (@fig-fardo-mensalidade-decil)

The tuition-burden index divides the same real tuition-readjustment series used in Figure 2.8 (Section B.7.6) by the weighted mean real per-capita household income of each decile (Section B.2, Decisions D01, D02), both expressed as 2002 = 100 and both deflated by the same IPCA base, so the ratio of the two indices is invariant to the choice of deflator. Deciles are computed within each survey year and source; the harmonized series uses PNAD Anual through 2015 and PNAD Contínua from 2016 onward (Section B.3), with 2012–2015 restricted to the PNAD Anual observations to avoid double-counting the overlap years. Because the burden is a ratio of two indices anchored at the same base year, it says nothing about the absolute affordability of tuition in any single year — only about how a fixed nominal bill moved relative to each decile’s own income trajectory since 2002. As with Figure 2.8, the underlying tuition series is a fixed-panel readjustment index and does not register the additional compositional cheapening from the post-2015 migration toward distance learning, so the burden shown here is, if anything, an upper bound on how much lighter the bill became for the lower deciles.

B.7.8 Population Above Fixed Real Income Thresholds (@fig-populacao-limiares-sm)

For each survey year, the minimum wage nominal value of January of that year (IPEADATA series MTE12_SALMIN12) is deflated to January-2024 prices via deflateBR::deflate() (the same IPCA base as Decision D01), and the January-2002 real value (R$675 in Jan.-2024 prices) is held fixed as the threshold for every subsequent year — the “fixed” variant reported in the chapter. Sampling-weighted shares of 18–24-year-olds with real per-capita household income at or above 1, 1.5, and 3 times that fixed threshold are computed year by year from the harmonized series (PNAD Anual through 2015, PNAD Contínua from 2016; Section B.3). A complementary “current” variant, dividing by each year’s own real minimum wage rather than the 2002 value, is computed by the same script but not promoted to the chapter: because the real minimum wage itself rose substantially over the period, the current-year threshold is a moving target, and the resulting share (which falls, from 42.2% to 40.7% for the 1× threshold) measures compression of the income distribution toward the wage floor rather than the growth of the population able to afford a roughly constant tuition bill — the quantity the affordability-channel argument requires. Replication code: 4-DA-Code/2026-06_Harmonizing-BR-Data/R/02_validation/233_Tese_Pop_Acima_Limiares_SM.R.

B.7.9 Decommodified Seats in Higher Education (@fig-vagas-descomodificadas)

Built from the microdata of INEP’s Censo da Educação Superior (2009–2023), aggregated by 4-DA-Code/2026-02_CENSUP_Public/046_Tese_Vagas_Descomodificadas.R; none of the PNAD/PNADC decisions catalogued in Section B.2 apply, since the unit is the institutional enrollment record rather than the household. The series begins in 2009 because that is the first year of CENSUP microdata with enrollment-level flags for ProUni, FIES and reserved seats; earlier years exist only as published tables without the instrument breakdown.

The de-commodification gradient, and why FIES sits outside it. Three instruments are stacked in Panel A in order of how completely they remove the price: a seat in the free public network carries no price at any point; a ProUni scholarship waives the price, in whole or in part, without creating an obligation; a FIES contract defers the price at a subsidised interest rate. Only the first two are summed into the “no-debt frontier” that the argument tracks. This is a substantive choice, not a technical one, and it drives the figure’s central reading: merging FIES into the subsidised block would show de-commodification rising to 46.6% in 2015 and then collapsing, whereas the no-price share underneath the FIES bulge never left the 29–32% band until 2019. The two readings support opposite conclusions about what the 2010s accomplished, so the figure keeps them visually separate rather than resolving the question by aggregation.

Quotas are a different dimension, with a different denominator. Reserved seats redistribute who occupies a free public place; they do not change what a place costs, and they exist only in the network that is already free. Adding them to Panel A would double-count the same seats under two headings. Panel B therefore uses public-sector enrollment as its denominator and is explicitly non-additive with Panel A.

Sector attribution and its noise. ProUni and FIES are legally private-sector instruments and reserved seats a public-sector one, but the microdata records small counts against the wrong sector in most years: ProUni in public institutions (884 in 2009, 1,917 in 2011, single or double digits elsewhere), FIES in public institutions in every year from 2010 (peaking at 5,848 in 2017), and “cotista” enrollments in private institutions (2,149 to 12,043, peaking in 2013). These are treated as reporting error: ProUni and FIES are counted in the private network only and quota places in the public network only. The difference against the unrestricted totals is below 0.03 percentage points in every year, and the generating script prints the full noise table on each run.

Two limits on the shares. First, ProUni and FIES are treated as disjoint, but a student may hold a partial scholarship and finance the remainder, so the subsidised block is marginally overstated in the FIES peak years; the microdata do not permit separating the overlap. Second, every quantity is a share, so movements in the denominator matter: public enrollment was roughly flat near 2.05 million from 2019 onward while the total rose from 8.3 to 10.0 million, and the 2023 total alone jumped 5.6% over 2022, the largest single-year increase in the series. A substantial part of the post-2019 fall in every share is therefore denominator growth rather than contraction of the instruments, and should not be read as policy retreat alone. The 2020 dip in public enrollment (2,034,834 → 1,929,995 → 2,055,197) is a collection artifact of the pandemic year and is not a substantive inflection.

B.7.10 Enrolment by Sector, Access Route and Time of Day (@fig-matriculas-turno-via-acesso)

Built by 4-DA-Code/2026-08_SEDAP/050_Plot_Nicho_100pct_SEDAP.R from nicho_agregado_sedap_2010_2024.csv, which is extracted by 020_Extrair_Nicho_2020_2024.R from the student-level records of the Higher Education Census. Sector follows TP_CATEGORIA_ADMINISTRATIVA (1–3 public, 4–7 private). Access route is assigned by precedence within the private sector — ProUni first, then FIES among those without ProUni, then open admission — so the categories are disjoint by construction and a student holding a partial scholarship alongside a loan is counted once, as ProUni. Within the public sector the split is reserved seat versus open admission, where “reserved seat” means the reservation block of the record is filled at all, not merely that the public-school criterion is flagged; using the narrower flag would drop students admitted on income, race or disability criteria.

Why the source is SEDAP+ rather than the published microdata. SEDAP+ (Sistema de Ensino para Disponibilização de Ambiente Protegido) is INEP’s protected-access platform for educational microdata, launched in 2026 and reached at https://plataformasedap.inep.gov.br/; access is granted per research project, and the queries reported here were run under a project approved on 2026-04-29. INEP stopped publishing the student-level file of the Higher Education Census after 2019; from 2020 the public packages contain only the institution and course files, and the course file records shift and financial aid as separate marginals that cannot be crossed with one another. The series is therefore drawn from SEDAP+, INEP’s protected-access platform, for every year — including those where a public file exists — so that no year is measured on a different basis from another. A parallel extraction from the public files was used to validate the result and is retained in the generating code.

What the protected-access platform does to the numbers. SEDAP+ answers only aggregate queries and applies differential privacy, which in practice means it suppresses cells containing few individuals rather than adding appreciable noise: repeating the same query with the privacy parameter set to 1, 10 and 100 moved the total by 78 enrollments in ten million (0.0008%). Suppression, by contrast, is consequential when the grouping is fine — a five-column grouping lost 7 of 116 cells, about 113,000 enrollments — so the extraction groups at exactly the granularity the figure displays, at which no cell is suppressed. Against the published microdata for 2010–2019 the SEDAP+ totals run 0.6% to 1.1% low, a systematic and small gap; the ratios that carry the argument agree far more closely, with aid coverage in distance study at 5.2% against 5.3% and in-person at 24.1% against 24.0% for 2019. Two schema details are worth recording for anyone re-running the extraction: TP_CATEGORIA_ADMINISTRATIVA is stored as text in the early years and as an integer in the recent ones, and the aggregate reservation flag IN_RESERVA_VAGAS is entirely null from 2024, so the subtype fields must be used instead. The year 2009 is excluded because its time-of-day variable returns a single value.

One classification trap, recorded because the variable name invites it. IN_FINANCIAMENTO_ESTUDANTIL marks any student financing whatsoever, including institutional discounts and scholarships granted by the institution itself, which distance providers award on a large scale. Inferring ProUni as the residual of that flag minus FIES yields roughly 2.85 million scholarship holders for 2024, six times the size of the programme. The nominal ProUni fields are the only reliable measure.

The colour scheme carries an argument. With fifteen combinations, hue is assigned to sector crossed with access route and lightness to time of day, so that a colour can be decoded positionally from the legend map rather than matched against a fifteen-item list. Distance learning departs from that rule deliberately: it receives a colour family of its own rather than the darkest shade of its base hue, because it belongs analytically with the affordability channel rather than with the access routes. It lowers the income barrier in the way a subsidy does, through price, without being a policy — and displaying it as a shade of the route would have implied it was one more route.

Two cautions on reading the columns. First, the quantity is enrollment stock, not entrants, so a route’s share reflects the accumulated cohorts studying under it rather than the flow admitted in that year; the FIES collapse after 2015 therefore appears gradually as financed cohorts graduate or drop out, and its true inflection in admissions is sharper than the figure suggests. Second, quota enrollment before 2013 is small but nonzero, reflecting institutional reservation policies that predate the 2012 federal law (notably UERJ from 2003), so the series does not begin at zero and should not be read as though the law created reserved seats from nothing.

B.7.11 The Reach of Student Aid by Mode of Delivery (@fig-descolamento-ead-politicas)

Drawn from the same extraction as Figure 2.12 (nicho_agregado_sedap_2010_2024.csv; see Section B.7.10 for the query design, the suppression measurements and the validation against published microdata) and plotted by 4-DA-Code/2026-08_SEDAP/040_Fig_Descolamento_EaD_Politicas.R. The quantity is a ratio within each mode of delivery: enrollment holding a ProUni scholarship or a FIES contract, over all private enrollment in that mode. Public-sector enrollment is excluded by construction, since a seat that carries no price cannot be described as covered or uncovered by aid.

Why coverage rather than counts. In absolute terms ProUni looks merely stable — roughly 120,000 distance enrollments from 2019 onward — and a reader could reasonably conclude that nothing happened to it. The ratio is what registers the change, because the denominator moved: the same 120,000 covered a shrinking fraction of a modality that more than doubled. The two readings are not in tension, but only the second answers the question the chapter asks, which is whether the instruments reached where the system grew.

What the ratio does not establish. That coverage is low in distance study says nothing on its own about why. Three mechanisms are consistent with the pattern and are not separated here: distance programmes may enrol students who do not meet the programmes’ eligibility criteria; distance providers may not seek or obtain accreditation to offer ProUni places at the same rate; and tuition low enough to be met without aid may simply reduce demand for it. The figure documents the gap between the growth of a modality and the reach of the instruments, which is what the argument requires, and stops there.

B.7.12 Household Income of Entrants by Mode of Delivery (@fig-perfil-renda-modalidade)

Built by 4-DA-Code/2026-08_SEDAP/060_Analise_ENEM_Renda/090_Fig_Perfil_Renda_Modalidade.R. Entrants recorded in the Higher Education Census for year t are matched to their ENEM record of the same year through the masked CPF that both files carry, inside SEDAP+ (see Section B.7.10 for the platform and its query constraints). The income variable is the socio-economic questionnaire’s Q006, a seventeen-category band of total household income in multiples of the minimum wage; the first three categories — no income, up to one wage, one to one and a half — form the group plotted. Restricting to the same year on both sides is deliberate: it isolates a coherent cohort, since entrants who sat the exam in an earlier year would never match.

The selection is severe, known, and one-directional. Only entrants who sat the exam that year appear, and the exam is required for admission to the public network through SISU while distance providers admit through their own processes. Measured for 2022 against the true composition of the system, the matched set over-represents public in-person study by 1.71 times and under-represents private distance study by a factor of 0.68. The figure is therefore a comparison between modes within each year, never an estimate of levels for the system; and because the distance share of the private sector grew sharply over the period, the composition of the matched set drifts, so the slope of any single line carries less weight than the persistent gap between them.

Two years are excluded, for a defect found in the data rather than assumed. Diagnosis is by the number of distinct Q006 categories and by the share falling in the first two, which in a sound year runs between 15% and 39%. In 2024 the item returns two categories, with 100% in the first two — it is not the income question but a binary variable occupying the same column name; carried through, it produces “100% of entrants below 1.5 minimum wages” for every group, which is what the raw extraction returned. In 2014 the public-sector records show four categories and 99.7% in the first two, while the private-sector records of the same year show all seventeen with a plausible distribution — the same table and the same year giving incompatible results by sector, an anomaly that has not been explained and that disqualifies the year until it is. The generating script carries a guard that halts if a year inside the window fails the category check.

What this does not settle. The measure is self-reported household income from a seventeen-year-old, in bands, at the moment of the exam rather than of enrollment; it is not the same construct as the household-survey income used elsewhere in this chapter, and the two should not be spliced. Nor does the comparison identify a mechanism: a poorer intake in distance study is consistent with price selection, with geographic reach into places without a campus, and with the age profile of distance students, and these sources are not separated here.

B.7.13 Income Distribution of Entrants Against the Examinee Pool (@fig-distribuicao-renda-setor)

Built by 4-DA-Code/2026-08_SEDAP/060_Analise_ENEM_Renda/095_Fig_Distribuicao_Renda_Setor.R from the same linked extraction as Figure 2.13 (see Section B.7.12 for the linkage, the income variable and the two excluded years), with one addition: the reference curve is a separate query returning the Q006 distribution of all 4,018,232 candidates who sat the 2023 examination, without joining to the enrollment records.

Why the reference curve carries the argument. The linkage observes only examinees, and the examination is required for admission to the public network through SISU while distance providers admit through their own processes — so any comparison of levels between destinations is confounded by who sits the exam. Comparing each destination against the full pool converts the question into a conditional one, for which the pool is the correct denominator: given the same candidates, whom does each destination recruit? A destination whose curve tracks the pool merely reflects the applicant population; one whose curve lies above and to the left recruits disproportionately from its poorer part. This does not eliminate selection — candidates are not a random sample of young Brazilians — but it removes the component that differs between destinations, which is the component that would otherwise drive the comparison.

Axis construction. Q006 is ordinal in seventeen bands, so the horizontal axis uses the upper bound of each band in multiples of the minimum wage (0, 1, 1.5, 2, 2.5, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 20), and the curves are step functions rather than smooth. The top band is open-ended above twenty minimum wages and cannot be given a bound, so it is excluded from the plotted steps while remaining in each group’s denominator; this is why no curve reaches 100%. The axis is truncated at ten minimum wages because all four curves exceed 95% beyond that point and cease to be visually separable.

One caution on interpretation. A poorer intake in distance study is consistent with several mechanisms this figure cannot separate: price selection, geographic reach into municipalities without a campus, and the older age profile of distance students, who are more likely to head their own households and therefore report different household incomes than a candidate living with parents. The figure establishes the gap and its direction against a common baseline; it does not attribute it.

B.7.14 Secondary Education Completion by Income Decile (@fig-em-conclusao-decil)

Each series shows the share of 18–24-year-olds who completed secondary education (medio_completo), by decile of per-capita household income and for the population as a whole. Same recipe as Figure 2.1: deciles computed within each survey year and source over the full population with strictly positive income (Section B.2, Decisions D02, D08, D18); the harmonized series uses PNAD Anual through 2015 and PNAD Contínua from 2016 onward (Section B.3); lines are interrupted in years without a survey (2000, 2010 census years; 2020–2021, Decision D11). Confidence intervals: 95% Wilson score intervals with the Kish effective sample size (design effect 2.0) for PNAD Anual, and design-based intervals from exact complex-survey estimation for PNAD Contínua. Unlike Figure 2.1, this figure has no independent census validation points: the census cross-check series maintained by this project (Censo_Pontos_Validacao_1991_2000_2010.parquet) was built only for the tertiary-access variable ens_sup and benchmarked against Salata et al. (2025) in Section B.4; building an equivalent census-based proxy for secondary completion (in the manner of the D21-B/D26/D27 decisions for the 1960–1991 censuses) was out of scope for this figure and is noted here as a limitation rather than silently omitted.

B.7.15 Income Inequality in Enrollment by Network Type, Wagstaff Index (@fig-wagstaff-rede-publica-privada-timeseries)

The Wagstaff index (W = CI / (1 − μ)) normalizes the Kakwani Concentration Index by prevalence (μ) — comparable across series with very different access rates (the public network has much lower prevalence than the private network among the 18–24 population: μ rises from 2.8% to 7.1% of that population over 2001–2025, more than doubling). Shaded bands are 95% bootstrap confidence intervals (B = 200 replicates, individual resampling within each year; this differs from the stratified cluster bootstrap used elsewhere in the pipeline because the current extraction does not preserve the design variables Estrato/UPA — adequate for national-level visualization). Population of reference for ranking and for μ: all 18–24-year-olds. Missing years: 2010 (a census year, IBGE’s regular practice of not fielding PNAD) and 2020–2021 (PNAD Contínua ran, but the standard annual first-interview file with household per-capita income, used throughout this pipeline, is unavailable for those years via PNADcIBGE — consistent with Decision D11, about the pandemic-era CATI/retroweighted data this project chose not to use, not about the network question being dropped from the questionnaire). Network variable: V6002 (PNAD Anual, 2001–2015, coded 2 = public / 4 = private) and V3002A (PNAD Contínua, 2016+, coded 1 = private / 2 = public — reversed coding between sources; see 042_Curva_Concentracao_Rede_Antes_Depois_Cotas.R for the full discovery log). Top banner displays presidential administration terms via banner_governos().

Consistency with Figure 2.2. This figure’s “Overall” series and the “18–24 Enrollment (currently enrolled)” series of Figure 2.2 both estimate the Wagstaff index for the same population and outcome (ens_sup_a, ages 18–24), so the two lines are expected to coincide. Comparing the two scripts’ cached results year by year, they agree almost exactly (differences of order \(10^{-7}\), pure floating-point noise) in every year drawn from PNAD Contínua alone (2016–2025), which rules out the difference in estimator — this figure’s direct concentration-index formula with individual bootstrap versus Figure 2.2’s weighted-GLM regression with Kish design-effect approximation — as a source of disagreement: the two formulas are algebraically equivalent and, empirically, numerically indistinguishable once applied to identical data.

A first round of this comparison (2026-07-06) also surfaced and fixed a genuine bug in Figure 2.2‘s own construction: its script computed each year’s index over every row present in the harmonized parquet for that year without restricting to a single source, and for 2012–2015 the parquet carries both PNAD Anual and PNAD Contínua respondents (the two surveys’ fieldwork overlaps in those years), so the reported value pooled roughly 330,000 PNAD Anual respondents with 450,000–460,000 PNAD Contínua respondents from two different sampling designs into a single calculation. Restricting Figure 2.2 to PNAD Anual through 2015 and PNAD Contínua from 2016 (the same splice convention used everywhere else in the project, and consistent with its corrected source line) reduced the 2012–2015 divergence from this figure substantially: from 0.021–0.035 down to 0.010–0.029, roughly halved in 2014–2015. The residual divergence in the PNAD Anual years (2001–2011, unaffected by the fix since those years were never part of the overlap) is unchanged, 0.009 to 0.034, largest in 2011. The most likely explanation for what remains is a data-construction difference rather than an estimation difference: this figure’s PNAD Anual extraction is a standalone re-parse of the raw microdata (needed because the network variable is not part of the project’s harmonized parquet) that does not apply the rural-North exclusion used in the harmonized pipeline behind Figure 2.2 (Decision D03, PNAD Anual 2004–2015), and may not treat the non-declared-income sentinel identically. This has not been confirmed by re-extracting the raw data with a region indicator added, so it is reported here as the leading hypothesis rather than a demonstrated cause; aligning the two series exactly, if desired, would require extending this figure’s PNAD Anual extraction to apply the same Decision D02/D03 exclusions as the harmonized pipeline, not adjusting the estimator formula.

B.7.16 Expansion and Composition of Undergraduate Enrolment (@fig-expansao-composicao-matriculas)

This is the only figure in the dissertation built from administrative enrolment counts rather than household survey microdata, so none of the PNAD/PNADC decisions catalogued in Section B.2 apply to it. Its source is the multi-source series data_tertiary_v6_clean.xlsx, assembled for the educabr2 package (4-DA-Code/2026-03_Dataset_Construction/), which reconciles INEP’s Censo da Educação Superior with secondary historical compilations. Where more than one source reports the same year and series, the value is taken from a fixed precedence order — CENSUP microdata first, then published CENSUP/Sinopse tables, then the Anuário Estatístico series, then Kang, Paese and Felix (2021), Maduro Júnior (2007), and Durham (2003) — so that no year mixes sources. For the years plotted here that resolves as follows: total enrolment 1980–1994 from the FGV/IBRE series, the public/private split for those same years from Maduro Júnior (2007), published CENSUP tables for 1995–1999, a derived presencial-plus-EAD total for 2000–2008 (CENSUP table 7.1 supplying the distance-learning component), and CENSUP microdata from 2009 onward.

Panel A stacks public and private enrolment; the two sum to the plotted total exactly in every year, which the script enforces with an assertion rather than trusting the source. Two gaps in the underlying data are closed explicitly. INEP published no distance-learning count for 2002, so the total for that year is the presencial count alone and is understated by roughly 25,000 students (about 0.7%), interpolating between the 5,359 EAD enrolments of 2001 and the 49,911 of 2003. For 2000–2007 the public/private split exists only on the presencial base, because CENSUP does not break distance learning down by administrative category before 2008; the presencial proportion is therefore applied to the all-modality total, which is the same derived_Presencial+EAD convention the source dataset itself uses for 2008. Because distance learning was more heavily private than presencial teaching in those years, this understates the private share slightly — by roughly one percentage point in 2007, less before that.

Panel B plots four shares, all with the same denominator (total enrolment, all modalities) so that the four lines are mutually comparable and nest: the private-sector line is the envelope, the non-philanthropic and for-profit series are parts of it, and distance learning cuts across both. The for-profit and distance-learning series begin in 2010 and 2000 respectively because those are the first years INEP recorded them, not because the phenomena began then; the late start is itself evidence about when the state began to see these categories.

The taxonomy break at 2009/2010 is the figure’s main interpretive hazard. The dashed series is INEP’s particular category, defined residually as private institutions not classified as community, confessional or philanthropic. From 2010, TP_CATEGORIA_ADMINISTRATIVA replaces that division with a strictly legal one, coding 4 = com fins lucrativos and 5 = sem fins lucrativos. These are not the same variable renamed. Particular was the broader category: it swept in a large number of institutions that were commercially run but legally constituted as non-profit associations. Spliced into one line, the two would produce a fall from 57% to 32% of total enrolment between 2009 and 2010 that records a change of classification and nothing about the world, which is why the figure leaves them unconnected and dashes the older one. Read as two separate rulers, the contrast is informative in its own right: measured as a share of private enrolment, the sector was already 64% particular in 2008 but only 43% legally for-profit in 2010, so roughly twenty percentage points of private enrolment sat in institutions that were commercial in operation and non-profit in statute. The for-profit conversion of the 2010s was therefore substantially a change of legal form over a base that was already commercial, rather than the arrival of commercial provision.

Three smaller cautions. The particular/philanthropic split is computed on the presencial base for 2000–2009 (numerator and denominator both), since CENSUP splits distance learning by administrative category only from 2008; 1999 uses the all-modality aggregate. The 2009 observation jumps from 48% to 57% of the total, and that single-year movement coincides with the switch from published tables to microdata, so part of it may be reclassification rather than real change. From 2012 CENSUP carries a residual Especial category (never above 1.6% of private enrolment) which is excluded, so the for-profit and non-profit shares are computed within their own pair.

Finally, a trap for anyone extending the series backwards: in 1995–1998 the Private_Particular_* fields of the source dataset sum exactly to total private enrolment. In those years “particular” is not the subcategory at all — it is the whole private sector disaggregated by type of organization (university, integrated faculty, isolated establishment). Treating those years as the same variable would fabricate a decade of spurious series. A companion long-run version of this figure (1908–2024, log scale) exists in the same script folder but is not promoted to the text; it also drops the pre-1970 sectoral benchmarks, which come from Durham (2003) and do not reconcile with the contemporaneous totals — in 1965 they sum to 325,082 against a reported total of 155,781, and the private figure repeats the previous year’s total exactly, which suggests a transcription error in the secondary source. Replication code: 4-DA-Code/2026-02_CENSUP_Public/222_Tese_Intro_Composicao_Setor_Privado.R.