data = FileAttachment("data/clean.csv").csv()For over a decade, Malaysian women have out-enrolled men in higher education. Public universities have run roughly 60/40 in women’s favour since at least the early 2010s. Female labour force participation, meanwhile, has climbed steadily for years and now sits at 56.6% — a figure Malaysia’s Department of Statistics (DOSM) has cited in recent press releases.
It would be easy to frame these two facts as a single “just happened” moment. They didn’t. Both are long-running trends, and treating them as breaking news obscures the more interesting question underneath: given that women have out-enrolled men in higher education for years, why hasn’t the labour market fully caught up — and how good is the data we’d need to actually answer that?
parsed = data.map(d => ({
date: new Date(d.date),
metric: d.metric,
sex: d.sex,
institution_type: d.institution_type,
value: d.value === "" ? NaN : +d.value
}))The enrolment side
Public universities aren’t the whole story, and treating them as such flattens a more textured picture. In 2020 — the last year covered by the available dataset — the female share of enrolment varied sharply by institution type:
- Teacher Education Institutes: 71.2% female
- Public Universities: 61.1% female
- Private Higher Education Institutions: 52.9% female
- Polytechnics: 45.6% female — the only category where men remain the majority
Polytechnics in Malaysia lean technical and vocational — engineering, applied trades — fields that have stayed male-dominated even as the university-track female majority has held. The “women out-enrol men” framing is true in aggregate and true for the most visible institution type (public universities), but it isn’t uniform across the system.
enrolment = parsed.filter(d => d.metric === "enrolment")Each institution type is charted on its own scale below — Public Universities and Private HEIs enrol hundreds of thousands of students, Polytechnics and Teacher Education Institutes enrol tens of thousands. A single shared axis across all four would flatten the smaller two into near-invisibility, which would have buried the one finding (Polytechnics’ male majority) that complicates the headline.
institutionTypes = ["Public Universities", "Private Higher Education Institution", "Teacher Education Institute", "Polytechnics"]function institutionChart(type, showLegend = false) {
const subset = enrolment.filter(d => d.institution_type === type);
return Plot.plot({
title: type,
width: 330,
height: 260,
marginLeft: 55,
x: {type: "utc", label: null, ticks: 4},
y: {label: "Students", grid: true},
color: {legend: showLegend, domain: ["female", "male"], range: ["#C1401C", "#14264A"]},
marks: [
Plot.lineY(subset, {x: "date", y: "value", stroke: "sex", curve: "linear"}),
Plot.ruleY([0])
]
});
}html`<div style="display:grid; grid-template-columns: repeat(2, 1fr); gap: 1.5rem;">
${institutionChart("Public Universities", true)}
${institutionChart("Private Higher Education Institution")}
${institutionChart("Teacher Education Institute")}
${institutionChart("Polytechnics")}
</div>`Note the break across all four charts in 2014, and the shorter break in Private HEI enrolment around 2000–2001 and 2012 — both are genuine gaps in the source data, not a rendering artifact. More on why in the methodology section below. Because each chart now has its own y-axis, compare trajectories (which line is rising, which sex leads) across panels, not the raw pixel height of the lines — the axis scales differ by institution type.
This dataset ends in 2020. It is, as far as we could establish, the most recent structured, sex-disaggregated enrolment time series published as open data for Malaysian higher education. More recent figures exist only in PDF form, in the Ministry of Higher Education’s annual statistics compendium.
The labour market side
DOSM’s own headline claim — a record 56.6% female labour force participation rate — is not something we could reproduce from open data. Every sex-disaggregated labour force table in the OpenDOSM catalogue caps at 2023, three years behind the current monthly aggregate DOSM publishes. The 56.6% figure exists in press releases and PDF reports; it does not exist as a downloadable dataset. That gap is structural, not a one-off oversight — we checked two separate tables (lfs_year_sex, annual, and lfs_state_sex, by state) and both stop at exactly the same year.
lfpr = parsed.filter(d => d.metric === "lfpr" && d.date >= new Date("2000-01-01"))Plot.plot({
title: "Labour force participation rate by sex, 2000–2023",
subtitle: "Annual. 2023 is the most recent year DOSM has published sex-disaggregated LFPR as open data.",
width: 700,
height: 400,
marginLeft: 50,
x: {type: "utc", label: null},
y: {label: "% participation", grid: true, domain: [30, 90]},
color: {legend: true, domain: ["female", "male"], range: ["#C1401C", "#14264A"]},
marks: [
Plot.lineY(lfpr, {x: "date", y: "value", stroke: "sex", curve: "linear"}),
Plot.ruleY([0])
]
})The chart above shows the real, current-as-of-2023 trend: participation rising steadily, not spiking. The 56.6% figure for 2025 is real and DOSM-sourced, but it’s a citation, not a chartable data point — plotting it as an extension of this line would misleadingly suggest the underlying series reaches that far. It doesn’t; the series simply stops three years short of it.
Does the credential pay off?
Participation alone can’t answer the question this piece opened with. A woman can be counted as “in the labour force” while working well below her qualification level. The sharper instrument is skills-related underemployment: the share of tertiary-educated workers stuck in semi-skilled or low-skilled jobs.
sru = parsed.filter(d => d.metric === "sru_rate")Plot.plot({
title: "Skills-related underemployment by sex, 2017–2025",
subtitle: "Share of employed tertiary-educated workers in semi-skilled or low-skilled jobs, quarterly",
width: 700,
height: 400,
marginLeft: 50,
x: {type: "utc", label: null},
y: {label: "% of tertiary-educated workers", grid: true},
color: {legend: true, domain: ["female", "male"], range: ["#C1401C", "#14264A"]},
marks: [
Plot.lineY(sru, {x: "date", y: "value", stroke: "sex", curve: "linear"}),
Plot.ruleY([0])
]
})This is the one series in this piece that’s genuinely current — quarterly, through mid-2025, published directly by DOSM as open data. Unlike the enrolment and participation figures, there’s no staleness caveat needed here.
How this data was assembled
Enrolment (2000–2020). Sourced from archive.data.gov.my, originally published by the Department of Statistics Malaysia using Ministry of Higher Education figures. The portal hosted three versions of this dataset:
- One (53 downloads) silently replaced DOSM’s standard
..missing-data placeholder with0— for Private HEI enrolment in 2000, 2001, and 2012 (both sexes), and for all four institution types, both sexes, in 2014. Fourteen cells in total. Charted naively, that version would show a system-wide enrolment collapse to zero in 2014 and a full recovery in 2015 — a fabricated data point, not a real one. - A second (7 downloads) preserved
..correctly. This is the version used here, with..converted to a true missing value rather than dropped or zeroed. - A third (10 downloads) was missing 2020 entirely and otherwise identical — a superseded upload, discarded.
Skills-related underemployment and labour force participation. Both sourced directly from OpenDOSM (lfs_qtr_sru_sex.parquet, lfs_year_sex.parquet), CC BY 4.0. No data-quality issues found in either.
The 56.6% figure. Cited from DOSM’s own 2025 press communications, corroborated independently by UNDP Malaysia. Not reproducible from any OpenDOSM catalogue dataset as of this writing — see the labour market section above.