← 部落格

卡路里追蹤背後的數學

每個熱量追蹤器都在替你做算術。大多數不會把公式展示給你。這裡一次列出,附上算例,依序往下,每一步都建立在前一步之上。

這篇文章涵蓋五層計算:如何估算你的基礎代謝、這個估算如何變成每日能量目標、App 如何從真實資料學會你的實際消耗、當你只吃部分份量時食物資料如何等比例縮放,以及熱量赤字如何轉換成脂肪與瘦體重流失。每個數字都能追溯到一個公式。每個公式都能追溯到一個引用來源。

五層方程式堆疊:BMR 先帶入公式 TDEE,再由真實資料校準為自適應 TDEE,接著轉換成熱量赤字,最後推算身體組成變化

第 1 層:BMR 估算

你的 Basal Metabolic Rate 是身體在完全休息時消耗的能量。也就是躺著不動、清醒、處在中性溫度房間裡。它大約占每日總消耗的 60-70%。

目前最廣泛驗證的公式是 Mifflin-St Jeor(1990):

BMR (male)   = 10 x weight(kg) + 6.25 x height(cm) - 5 x age + 5
BMR (female) = 10 x weight(kg) + 6.25 x height(cm) - 5 x age - 161

每一項都對應一個生理關係。體重越高,消耗的能量越多,體重項影響最大。身高更高,表面積更大,也有更多代謝活性組織。代謝會隨年齡下降。性別偏移項則反映平均身體組成的差異。

算例。 一位 30 歲男性,82 kg,178 cm:

10 x 82   = 820
6.25 x 178 = 1,112.5
5 x 30    = 150
sex offset = +5

BMR = 820 + 1,112.5 - 150 + 5 = 1,787.5 kcal

這是族群平均值。Mifflin-St Jeor 來自對 498 名受試者的間接熱量測量。對任何單一個體來說,標準誤差大約是 ±200 kcal,意思是兩個條件完全相同的人,BMR 可能差到 400 kcal。這個公式給你的是鐘形曲線的中心,不是你的個人實測值。

來源:Mifflin, M.D. et al. "A new predictive equation for resting energy expenditure in healthy individuals." American Journal of Clinical Nutrition, 1990.

第 2 層:從 BMR 到 TDEE

BMR 是底線。Total Daily Energy Expenditure (TDEE) 會把其他消耗都加進來:走路、工作、運動、消化食物、坐立不安。傳統做法是用活動係數乘上 BMR:

Activity LevelMultiplierWhat it actually means
Sedentary1.200久坐工作,走路很少
Lightly Active1.375每天約 8,000 步,或每週輕度運動 2 次
Moderately Active1.550每天約 10,000 步,加上每週阻力訓練 3 次
Active1.725體力工作,或每週訓練 5 次
Very Active1.900每天高強度訓練,加上活躍生活型態

以我們的算例(BMR = 1,788 kcal,輕度活動)來看:

TDEE = 1,788 x 1.375 = 2,458 kcal

問題一看就很明顯:不同等級之間的差距是 0.175,換算成 BMR 1,788 時,大約是 310 kcal。那差不多是一根香蕉加一湯匙花生醬。如果你選錯活動等級。大多數人都會。那麼在你記錄第一餐之前,TDEE 估算就已經差了幾百 kcal。

更糟的是,這些倍率無法捕捉 NEAT (Non-Exercise Activity Thermogenesis):坐立不安、姿勢變換、來回踱步、家務。光是 NEAT,在體型與運動習慣相同的人之間,每天就可能差 700+ kcal。

BMR / TDEE 計算機

性別

體重項--
身高項目--
年齡項--
性別差值--

BMR--

活動量--

TDEE--

第 3 層:自適應 TDEE

靜態公式估算的是像你這樣的人大概會消耗多少。自適應 TDEE 則是根據身體實際發生的變化,反推你 真正 消耗了多少。

核心洞察很簡單:如果你知道自己吃了多少熱量,也知道體重隨時間如何變化,就能解出消耗量。

演算法

給定一個 28 天的資料視窗:

步驟 1。 只計算有記錄的日期之平均熱量攝取。沒有食物紀錄的日子會完全排除,不會當成零。

步驟 2。 將每日體重讀數用 7 天 Exponential Moving Average 平滑化,濾掉水分、肝醣與鈉造成的雜訊。接著對平滑後的序列做最小平方法線性回歸。斜率就是你真實的體重趨勢,單位是 kg/day。

步驟 3。 把體重斜率轉換成熱量:

caloric impact = daily weight slope x 7,700 kcal/kg

7,700 kcal/kg 這個數字,是身體組織能量密度的標準近似值。它是脂肪約 7,700、瘦體重約 1,800 的加權混合。

步驟 4。 估算 TDEE:

TDEE = average daily intake - caloric impact

如果你在減重,熱量影響是負的,所以 TDEE 會高於攝取。如果你在增重,則會低於攝取。如果體重穩定,TDEE 就等於攝取。

步驟 5。 將每日調整幅度限制在前一次估算的 ±100 kcal 內。這可以避免雜訊資料造成劇烈波動。

算例

以下是一組真實的 28 天資料,對象大約每週減重 0.3 kg:

DayWeight (kg)EMA (kg)CaloriesTracked?
182.382.302,180Yes
482.582.352,210Yes
781.882.152,050Yes
1082.081.96--No
1481.781.722,100Yes
2180.981.122,180Yes
2481.080.932,120Yes
2880.780.722,050Yes

28-day adaptive TDEE example: raw weight dots bounce around while the EMA line reveals a clear downward trend, with a regression line showing -0.042 kg per day

計算如下:

Average intake (tracked days): 2,150 kcal/day
EMA weight slope (regression): -0.042 kg/day
Caloric impact: -0.042 x 7,700 = -323 kcal/day
Estimated TDEE: 2,150 - (-323) = 2,473 kcal

這個數字反映的是你的真實代謝:NEAT、適應、基因,全都算進去。不用猜你的活動等級。

為什麼是 28 天

每日體重會因為水分滯留、肝醣儲存、食物在體內移動的重量,以及鈉攝取而上下浮動 ±1 kg。若某人每週減 0.5 kg,預期 14 天的訊號大約是 1 kg,幾乎只是剛剛高過噪音底線。28 天視窗能在相同噪音下抓到約 2 kg 的訊號,訊噪比大約可翻倍。

想看更完整的視窗長度、EMA 平滑與收斂行為,請見 Why Your TDEE Calculator Is Probably Wrong

第 4 層:macro 縮放

當你記錄一筆食物時,幾乎不會剛好吃到資料庫裡的標準份量。Macro scaling 就是把所有數值按比例調整的算術:

scaling factor = consumed amount / serving size

每個 macro 都乘上同一個因子。這就是線性縮放。

算例。 資料庫中一筆燕麥資料:100g 份量,389 kcal,13.2g protein,66.3g carbs,6.9g fat。你吃了 45g。

factor = 45 / 100 = 0.45

calories: 389 x 0.45 = 175.1 kcal
protein:  13.2 x 0.45 = 5.9g
carbs:    66.3 x 0.45 = 29.8g
fat:      6.9 x 0.45 = 3.1g

這很直接,但有一個細節常讓人困惑:macro 總和不一定等於熱量。

Atwater factors(protein 4 kcal/g、carbs 4 kcal/g、fat 9 kcal/g)只是近似值。真實數值會隨食物而異。纖維大約貢獻 2 kcal/g,酒精貢獻 7 kcal/g,而且兩者都不是標準 macro。當食物資料庫同時列出總熱量與 macros 時,它們常來自獨立的實驗室測量。每個 macro 四捨五入到小數點後一位,再套用 Atwater factors 之後,總和與標示熱量每份差 5-15 kcal 很常見。累積到整天就會放大。

這不是 bug。這是 Atwater 系統天生的近似誤差。總熱量比用 macros 推回來的熱量總和更準,因為總熱量是直接用 bomb calorimetry 或 proximate analysis 測得。

第 5 層:赤字計算與身體組成

能量平衡方程式:

weight change = (intake - expenditure) / energy density of tissue

如果使用標準的 7,700 kcal/kg,500 kcal/day 的赤字應該帶來每週 0.45 kg 的體重下降。但這個數字假設你掉的全是脂肪。事實並非如此。

Forbes/Hall model 會根據你攜帶的脂肪量,預測減重中有多少是脂肪、多少是瘦體重:

P-ratio = fat mass / (fat mass + 10.4)

P-ratio 是體重變化中來自脂肪的比例。常數 10.4 是根據身體組成研究實證推導而來(Forbes 1987,Hall 2007 進一步修正)。

體脂越高,P-ratio 越高,也就是更多減掉的是脂肪。體脂越低,越多瘦體重會被犧牲。這就是為什麼在低體脂下採取激進赤字是反效果。數學本身就在跟你作對。

算例。 一位 80 kg、體脂 22% 的人,維持 500 kcal 赤字:

Fat mass:       80 x 0.22 = 17.6 kg
P-ratio:        17.6 / (17.6 + 10.4) = 0.629
Mixed density:  0.629 x 7,700 + 0.371 x 1,800 = 5,510 kcal/kg
Daily loss:     500 / 5,510 = 0.091 kg/day
Daily fat loss: 0.091 x 0.629 = 0.057 kg/day
Weekly total:   0.64 kg
  of which fat: 0.40 kg (63%)
  of which lean: 0.24 kg (37%)

P-ratio outcome: a 500 kcal deficit at 22% body fat produces 0.64 kg per week of total loss, split 63% fat and 37% lean, not 0.45 kg of pure fat

不是每週 0.45 kg 的純脂肪。真實數字取決於你從哪裡開始。

在 35% 體脂時,P-ratio 是 0.77。幾乎 80% 的流失來自脂肪。在 12% 體脂時,它會降到 0.54。幾乎一半流失的是瘦體重。同樣的赤字,不同的身體,不同的結果。

P-Ratio 計算器

%

脂肪量--
瘦體重--
P 比率--
混合密度--
每日總計--
每日脂肪--
每日精瘦--

每週總計--
其中脂肪--
其中瘦肉--

來源:Forbes, G.B. "Lean body mass-body fat interrelationships in humans." Nutrition Reviews, 1987. Hall, K.D. "Body fat and fat-free mass inter-relationships." British Journal of Nutrition, 2007.


你會在 App 裡看到什麼

這些就是在 Onyx Tenet 內運行的公式。實際呈現如下。

TDEE 卡片會同時顯示公式估算與自適應數值,並附上信心徽章與資料覆蓋率統計。TDEE Trajectory 圖表會描繪估算如何隨時間演進。在這個例子中,自適應 TDEE(2,163 kcal)與公式估算(2,172 kcal)非常接近,並由 26 次量測與 28 天記錄加以確認。

Onyx Tenet TDEE 卡片,顯示調整後的 TDEE 為 2,163 kcal,帶有 HIGH 信心徽章、公式估算為 2,172 kcal、Watch 修正係數,以及 30 天 TDEE 走勢圖

每週摘要會套用第 5 層的能量平衡公式。平均攝取(1,991 kcal)減去平均 TDEE(2,254 kcal),得到每日赤字 263 kcal,推算每週體重變化為 -0.24 kg。下方細項可看到每天的 macros。

Onyx Tenet 週摘要,顯示平均攝取 1,991 kcal、平均 TDEE 2,254 kcal、每日熱量赤字 263 kcal,以及預估每週體重變化 -0.24 kg

每個數字都能回到上面的某個公式。沒有黑箱。

Onyx Tenet 的自適應 TDEE 是免費的。大約在你持續記錄與量體重 4 週後會自動啟用。不需要訂閱。

相關文章