Skip to content
Silicon Wok Hawker Heritage
Menu
Contents

G.3Distributions

The middle figure hides the stall that is struggling, and so does a typical case. Here are the 5,000 simulated stalls of each type behind D.4, What the Hawker Earns per Hour, generated again from the same starting number (the seed), so the results match, and shown in tenths, quarters and averages. Put together, with each type counted by its real number of stalls, the middle stall makes $2,720 a month; one stall in four makes less than $1,568; and 29% make less than $1,760. ($1,760 is MOM's 2021 figure of $1,470 for hawkers who employ no one, in 2026 prices.)

The redraw is checked against results.json as it runs: each type's median, and the pooled median and share under the line, must match D.4 exactly. Every value below is Derived; the draws themselves rest on the Assumption ranges in the first table.

G.3.1The inputs and what they draw

Each input as the model draws it for a simulated stall, and the 10th, 50th and 90th percentiles (the level a given share of results stays below) it gives for the tendered stall, with the medians for two coffeeshop types. The download has all six types. g3-inputs.csv

G.3 Distributions: table 1
InputDraw, as the code writes itP10P50P90HDB P50Private P50
plates_per_days.plates_per_day * math.exp(0.15 * z1)128157190160195
tickets.ticket * math.exp(0.06 * rng.standard_normal())4.164.504.865.205.50
k_ingtri(0.4, s.k_ing, 0.49)0.4200.4450.4700.4450.445
manpowers.manpower * tri(0.85, 1.0, 1.15)2,6762,9233,1602,9263,600
utilitiess.utilities * tri(0.85, 1.0, 1.15)9161,0011,0831,0001,199
hours_per_daytri(11, s.hours_per_day, 15)11.9213.0014.1213.0013.01
days_opentri(24, 26, 28)24.8725.9927.0925.9926.02
delivery_sharetri(0.0, s.delivery_share, 0.16)0.0360.0800.1240.0790.081
delivery_commissiontri(0.25, s.delivery_commission, 0.35)0.2710.2990.3280.3000.300
closure_days_yeartri(4, 10, 16)6.6610.0113.3710.0610.00
elasticitytri(-1.0, -0.5, -0.3)-0.815-0.591-0.426-0.585-0.576
pass_renttri(0.12, 0.35, 0.45)0.2040.3140.3920.3140.314
pass_ingtri(1.05, 1.25, 1.45)1.141.251.361.251.25
capturemin(max(s.capture + rng.uniform(-0.1, 0.1), 0.0), 1.0)0.0000.0510.1290.3480.850
rents.rent * math.exp(rent_sd * rz)1,0711,2521,4633,4055,994
feess.fees * math.exp(0.25 * rng.standard_normal())7207207209971,208
turnover_renttri(0.2, 0.25, 0.3)0.0000.0000.0000.0000.000

G.3.2Net income

Quartiles (a quarter of a ranked list) and the mean, with the share under the $1,760 line and the share earning less an hour than the assistant's benchmark of $11.64. g3-net.csv

G.3 Distributions: table 2
StallP10P25P50P75P90MeanUnder $1,760Under $/h benchmark
NEA, subsidised$1,658$2,391$3,301$4,373$5,406$3,46112%63%
NEA, tendered$1,328$2,106$3,179$4,282$5,384$3,27917%66%
Operator-run−$148$601$1,520$2,552$3,553$1,63656%92%
HDB coffeeshop$414$1,265$2,381$3,595$4,849$2,52736%79%
Private coffeeshop−$1,132$287$1,839$3,395$4,997$1,88649%80%
Food court$1,157$1,833$2,737$3,711$4,648$2,83923%77%
All stalls, weighted by count$495$1,568$2,720$3,933$5,140$2,75929%73%
G.3 Distributions: table 3
Net income, decilesP10P20P30P40P50P60P70P80P90
NEA, subsidised$1,658$2,188$2,595$2,966$3,301$3,695$4,136$4,667$5,406
NEA, tendered$1,328$1,903$2,318$2,745$3,179$3,559$4,012$4,583$5,384
Operator-run−$148$399$791$1,174$1,520$1,886$2,301$2,828$3,553
HDB coffeeshop$414$1,022$1,476$1,923$2,381$2,839$3,349$3,900$4,849
Private coffeeshop−$1,132−$126$613$1,264$1,839$2,393$3,028$3,836$4,997
Food court$1,157$1,654$2,029$2,377$2,737$3,096$3,499$3,935$4,648
All stalls, weighted by count$495$1,281$1,822$2,269$2,720$3,179$3,657$4,247$5,140
Net income a month, 5,000 simulated stalls of each typeSAME DRAWS AS D.4 · 2026 SGD, BEFORE MEDISAVE AND TAXNEA centre, subsidised−$2K$1K$4K$7K$10KNEA centre, tendered−$2K$1K$4K$7K$10KOperator-run centre−$2K$1K$4K$7K$10KHDB-rented coffeeshop−$2K$1K$4K$7K$10KPrivate coffeeshop−$2K$1K$4K$7K$10KMall food court−$2K$1K$4K$7K$10KMedianOfficial $1,470 of 2021, in 2026 prices ($1,760)BARS: SHARE OF 5,000 STALLS · ENDS HOLD THE TAILS
FIGURE G.1 · NET INCOME A MONTH, 5,000 SIMULATED STALLS OF EACH TYPE · DARK LINE: MEDIAN · RED DASH: $1,760, MOM'S 2021 FIGURE IN 2026 PRICES · VALUES BEYOND THE AXIS ARE HELD IN THE END BARS

G.3.3Hours and rent

Hours a day are the least measured number in the trade; the model draws them between 11 and 15 around the 13 that one interview study found. Rent is drawn around each type's base and rises with custom. g3-hours.csv g3-rent.csv

G.3 Distributions: table 4
StallP10P25P50P75P90Mean
NEA, subsidised11.912.413.013.614.113.0
NEA, tendered11.912.413.013.614.113.0
Operator-run11.912.413.013.614.113.0
HDB coffeeshop11.912.413.013.614.113.0
Private coffeeshop11.912.413.013.614.113.0
Food court11.912.413.013.614.113.0
All stalls, weighted by count11.912.413.013.614.113.0
G.3 Distributions: table 5
StallP10P25P50P75P90Mean
NEA, subsidised$290$290$290$290$290$290
NEA, tendered$1,071$1,153$1,252$1,360$1,463$1,261
Operator-run$1,504$1,590$1,697$1,815$1,930$1,707
HDB coffeeshop$2,630$2,963$3,405$3,885$4,391$3,471
Private coffeeshop$4,179$4,918$5,994$7,348$8,852$6,294
Food court$0$0$0$0$0$0
All stalls, weighted by count$0$290$1,393$3,856$6,157$2,501
Hours a dayTRIANGULAR 11–15 AROUND THE 13-HOUR MEDIAN (HACK.GOV 2025) · THE SAME DRAWSNEA centre, subsidised11h12h13h14h15hNEA centre, tendered11h12h13h14h15hOperator-run centre11h12h13h14h15hHDB-rented coffeeshop11h12h13h14h15hPrivate coffeeshop11h12h13h14h15hMall food court11h12h13h14h15hMedianBARS: SHARE OF 5,000 STALLS · ENDS HOLD THE TAILS
FIGURE G.2 · HOURS A DAY, THE SAME DRAWS · DARK LINE: MEDIAN
Rent a month, with the food court's turnover rentLOGNORMAL AROUND EACH TYPE'S BASE RENT, CORRELATED 0.5 WITH PLATES A DAY · THE SAME DRAWSNEA centre, subsidised$0K$3K$6K$9K$12KNEA centre, tendered$0K$3K$6K$9K$12KOperator-run centre$0K$3K$6K$9K$12KHDB-rented coffeeshop$0K$3K$6K$9K$12KPrivate coffeeshop$0K$3K$6K$9K$12KMall food court$0K$3K$6K$9K$12KMedianBARS: SHARE OF 5,000 STALLS · ENDS HOLD THE TAILS
FIGURE G.3 · RENT A MONTH, THE SAME DRAWS · THE FOOD COURT PAYS A SHARE OF SALES · SUBSIDISED NEA RENTS DO NOT VARY

This is a working paper for public discussion. Every number in it is an invitation to improve it. Corrections and better data are welcome.