← 博客

卡路里追踪背后的数学

每个卡路里追踪器都在替你做算术。大多数不会把公式展示给你。这里按顺序列出,并附上带步骤的示例,每一步都建立在上一层之上。

这篇文章讲五层计算:如何估算你的基础代谢,如何把这个估算变成每日能量目标,应用如何从真实数据中学习你的实际消耗,食物条目在你只吃部分份量时如何缩放,以及热量缺口如何转化为脂肪和瘦体重的流失。每一个数字都能追溯到一个公式。每一个公式都能追溯到一个引用来源。

五层方程链:BMR 进入公式 TDEE,再由真实数据驱动的自适应 TDEE 细化,然后换算为热量缺口,最后推演为身体成分变化

第 1 层:BMR 估算

你的基础代谢率是身体在完全静息时燃烧的能量。也就是平躺不动,在温度中性的房间里,清醒着。它约占每日总消耗的 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 是底线。总日能量消耗 (TDEE) 还要加上其他一切:走路、工作、锻炼、消化食物、坐立不安。传统做法是用 BMR 乘以活动系数:

活动水平乘数实际含义
久坐1.200办公室工作,走路很少
轻度活跃1.375每天约 8,000 步或每周 2 次轻度运动
中度活跃1.550每天约 10,000 步 + 每周 3 次抗阻训练
活跃1.725体力工作或每周 5 次训练
非常活跃1.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 则是根据身体实际发生了什么,倒推出你真正消耗了多少。

核心思路是:如果你知道自己吃了多少 kcal,以及体重随时间如何变化,就能解出能量消耗。

算法

给定一个 28 天窗口的数据:

步骤 1。 只对有记录的日期计算平均摄入。没有食物日志的日期会被完全排除,不算作 0。

步骤 2。 用 7 天指数移动平均 (EMA) 平滑每日体重读数,过滤掉水分、糖原和钠带来的噪声。然后对平滑后的序列做最小二乘线性回归。斜率就是你真实的体重趋势,单位是 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 层:宏量缩放

当你记录食物条目时,你很少吃到数据库里的标准份量。宏量缩放就是把所有数值按比例调整的算术:

scaling factor = consumed amount / serving size

每种宏量都会乘以同一个系数。这是线性缩放。

示例。 数据库里有一个燕麦条目: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

这很直接,但有一个容易让人困惑的细节:宏量不一定总是和热量加总一致。

Atwater 系数(protein 4 kcal/g,carbs 4 kcal/g,fat 9 kcal/g)只是近似值。真实数值会因食物而异。fiber 约贡献 2 kcal/g,alcohol 贡献 7 kcal/g,而这两者都不是标准宏量。当食物数据库同时列出总热量和宏量时,它们往往来自独立的实验室测量。每个宏量四舍五入到一位小数后,再套用 Atwater 系数,总和可能与标示热量相差每份 5-15 kcal。整天记录下来,这个差异还会继续累积。

这不是 bug。这是 Atwater 系统本身的固有不精确。总热量通常比根据宏量推算出来的热量总和更准确,因为总热量是通过炸弹量热法或近似分析直接测得的。

第 5 层:缺口数学与身体组成

能量平衡方程:

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

如果按标准 7,700 kcal/kg 计算,500 kcal/day 的缺口应该带来每周 0.45 kg 的减重。但这个数字假设你减掉的全是脂肪。事实并不是这样。

Forbes/Hall 模型 会根据你的脂肪储量,预测减重中有多少来自脂肪,多少来自瘦组织:

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-ratio--
混合密度--
每日总计--
每日脂肪--
每日瘦体重--

每周总计--
其中脂肪--
其中瘦肉--

来源: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.


你会在应用里看到什么

这些就是 Onyx Tenet 运行的公式。下面是它们在实际中的样子。

TDEE 卡片会同时显示公式估算值和自适应值,并附带一个置信度徽标和数据覆盖率统计。TDEE 轨迹图会展示估算值如何随时间演变。在这个示例里,自适应 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 的体重变化。下面的细分会显示每天的宏量。

Onyx Tenet 每周摘要显示平均摄入为 1,991 kcal,平均 TDEE 为 2,254 kcal,每天热量缺口为 263 kcal,预计每周体重变化为 -0.24 kg

每一个数字都能追溯到上面的某个公式。没有黑箱。

Onyx Tenet 中的自适应 TDEE 是免费的。大约在你记录和称重 4 周后会自动启用。无需订阅。

相关文章