Research methods · guest session · 19 slides · HCSREL, NTU
Building the evidence, not just the draft — a working method for using AI across seven research projects and their data analysis, from curriculum mapping and a national training-catalog scan to an RNA-seq pipeline, a satellite ecosystem-account platform, and a field survey.
Today’s mission
Fewer than one in ten answers came from an open-ended model call. Most of the work is a fixed taxonomy that AI applies and a human audits.
Apply a fixed taxonomy to thousands of documents and return who counts. Rule-based first; AI reads the edge cases.
Fixed rule · AI edge casesTurn screenshots, transcripts and share links into structured rows. Vision + parsing, human confirms.
Vision · Human confirmsWrite the next artefact from a real source file — minutes, briefs, slides. Facts corrected before anything is sent.
Source file · Facts checkedStand up the dashboard, Worker or pipeline that holds the result. Agent writes code; tests and browser checks decide.
Agent codes · Tests decideThe portfolio
Different domains, the same discipline: a fixed taxonomy, a structured row, a drafted artefact, and a check a reviewer can repeat.
| Project | What was built | Scale |
|---|---|---|
| NTU course map | Modules coded for sustainability + entrepreneurship | 1,780 modules |
| SkillsFuture scan | Courses matched against 122 official green skills | 25,813 courses |
| RNA-seq pipeline | Case-vs-control differential expression, up / down genes | 68 / 1 genes |
| SEA natural capital | Keyless satellite datasets turned into SEEA-EA accounts | 6 datasets |
| Faculty AI survey | Bilingual pre / post Google Forms | 2 rounds |
| EdeX FLC cases | Cases EL-01–07 written from transcripts | 7 cases |
| Changi partnership | Phases and a sponsored research proposal | 3 phases |
Framing
Not “AI wrote everything”. Four bounded jobs, each with a named human check.
Fewer than one in ten answers came from an open-ended model call. Most of the work is a fixed taxonomy that AI applies and a human audits.
Seven cases
Open any case for the numbers, the method and the check that kept the result honest.
Mapping a whole university catalog. 1,780 unique modules in the AY2025/26–AY2026/27 catalog. 85 pass the sustainability screen (27 focused / 58 inclusive); 34 pass the entrepreneurship screen (12 / 22).
Only 1 module lands in both sets — BF3122 Carbon Markets — and 0 make the strong GreenComp-Acting × EntreComp-Into-action join.
Phrase coverage inside the 85: GreenComp 28 · greening topics 62 · SDG 7 of 85. Empty fields are outline-language gaps, not proof a topic is untaught.
Method: screen → tag → crosswalk → audit. Whole-word matching, false-friend stripping and community-college prefix overrides. Domain words that decide inclusion stay on the screen and are never copied into the 12 competences — that would double-count the same phrase.
AASHE / EntreComp inclusion rule: title hit, or two distinct terms in title + outline. UNESCO ESD 8 derived from GreenComp via the Wiek 2021 crosswalk — not a second screen.
A national training catalog, checked against demand. 25,813 courses in the official directory; 2,137 match the green / ESG screen (8.3%); 122 official SWDA green skills; 2,789 course–skill links written.
Coverage of the 122 official skills: 29 with no matching course · 7 thin (1–2 courses) · 17 moderate (3–8) · 69 crowded (9+) · 0 validation against live pages.
Where supply is missing, by sector: Sea Transport 5 · Landscape 5 · Energy and Power 4 · Food Manufacturing 3 · Carbon Services 3 · Financial Services 2.
Next move: build sector-technical modules against the empty rows, and pair disclosure reporting with carbon and circular-operations courses so a report can be evidenced.
Demand is an official list. Supply is catalog text. A gap here is a catalog gap — enrolment and job outcomes are not in the open files.
An RNA-seq pipeline that runs on a laptop. Counts in → QC + CPM filter → DESeq2 → GO + GSEA → report.
Demo run: 68 genes up · 1 gene down · 1,998 genes after CPM filter · 31.2% variance on PC1. Worked example: 6 samples, 2,000 genes, padj < 0.05 and |log2FC| ≥ 1. Top gene RNU6-163P at log2FC 2.65, padj 6.1e-11.
PCA separates case from control before differential expression is trusted; Hallmark GSEA runs on the full ranking with no hard cutoff; summary.json + HTML report carry full sessionInfo. GO enrichment returned nothing significant at this demo size — reported as-is rather than dressed up.
Six keyless datasets become ecosystem accounts:
Output shape — SEEA-EA accounts: extent (hectares by class) · condition (NDVI, SAR, burned) · services (carbon stock, CO₂e, 2000–2025 series) · historical change — each with a provenance block and an uncertainty flag beside the number.
Method trap: uncapped counts every pixel (7.5 s per cell; Singapore 13.2M pixels; fails past ~44M px) and is correct for area. max_size decimates to 2,048 px (0.8 s per cell; Singapore 2.2M pixels) and holds shares but under-counts area by 6×. The rule written into the engine: uncapped for area, capped for shares — and every scaled number is flagged estimated.
Before and after, in the room’s own language. The pre-course form asks for a one-sentence problem statement, 1–10 familiarity with AI tools, 1–10 practice on own work, root-cause clarity / confidence / feasibility, and what has already started. The post-course form repeats the same 1–10 scales, requires a Yes/No on whether an AI tool was used today, and asks what changed in the proposal.
Bilingual English + Chinese throughout; anonymous; email not collected.
Instrument design: no direct motivation item (it ceilings at 8–10; infer motivation from actions already taken) · familiarity ≠ practice · anchor every item to the person’s proposal · drop items that cannot move in one class · ship every item, scale label and choice bilingually, not just the question stems.
Limit: a single class cannot show whether the two-week pitch improved. The class scales measure the class; a third round at the pitch is what would measure the outcome.
From a 77-minute recording to filed cases. Voice transcript (two recordings, ~77 and ~18 min) → AI draft (minutes + case write-ups from the transcript) → case records (EL-01 to EL-07, one per practice) → human correction (names, dates and titles fixed before filing).
The date came from the recording timestamps, not from anything said in the room — and the AI sub-cluster’s driver was left open for the presenters rather than invented.
A proposal where AI drafts but never invents the evidence.
Claims the draft was held to: no Miniwiz municipal carbon figure as a Changi result; no invented throughput, power or machine feedstock; FY2024/25 waste split not reassigned to FY2025/26.
AI in the workflow
Five recurring jobs — and the tool that actually did the work.
| Input | What AI does | Tool |
|---|---|---|
| Brokerage / wallet screenshots | Vision model reads holdings, cash and P&L from a photo | OpenRouter vision |
| Turn a real source file into a deck | One source markdown plus a prompt; only the source is uploaded | NotebookLM |
| Shared AI conversation link | Playwright captures the XHR payload the static page never sends | Playwright WebKit |
| Plain-language rule | Natural language becomes a validated split rule, with a local fallback | Gemini / local parse |
| Whole platform | Agent writes the Worker, pipeline and UI; type and browser checks decide | Coding agent |
Every row ends the same way: a human confirms before the value is written.
Guardrails
Machine throughput, cycle time, power and fee stay unstated until NTU and Miniwiz price their lines.
Named source or blankA supplier’s municipal saving is never presented as the client’s result; a percentage needs the client’s feedstock and factors.
Client boundaryThe same effort is not billed to a sponsor and to a translational grant. One scope, one payer.
One scope · one payerRegistering an institution as a participant would misread the result. Only the people who were in the room are counted.
People in the roomReproducibility
node --check and tsc --noEmit run before anything is deployed or trusted.summary.json carries full sessionInfo; sessions log the model calls and spend behind the build.The method in one line
Screen, extract, draft, build — one job at a time, with a named check.
The rule decides; the model reads the edge cases. Audit what it returns.
Pinned inputs, type gates, browser checks, session records, named sources.