Menu

指数回归计算器

拟合增长或衰减数据的曲线 y = a·bˣ,并给出每一步的变化率。

作者 Nethanel Bar, 联合创始人兼 CEO

最后更新

想不用计算器也能解出这些题?

Coddy 数学课程教的是方法本身:你在交互式白板上完成每一步,哪一步出错都会准确告诉你。

指数回归拟合的是按倍数而非按加法增长的数据

直线在 x 每增加一步时加上同样的量。而很多事物是乘以同样的倍数:复利计息的钱、细菌培养物、电池剩余的电量、一杯正在变凉的饮料与室温之间的温差。这种规律就是 y = a·bˣ,其中 a 是 x = 0 时的值,b 是每一步乘上的倍数。b 大于 1 时数量增长,b 在 0 和 1 之间时数量衰减,(b 减 1) 换成百分数就是每一步的变化率。

标准的拟合方法是对每个 y 取自然对数。如果 y = a·bˣ,那么 ln y = ln a + x·ln b,这是关于 x 的一条直线。所以这种方法先对点 (x, ln y) 做普通最小二乘直线拟合,从斜率读出 ln b,从截距读出 ln a,再还原对数。TI-84 的 ExpReg 命令和 Excel 的指数趋势线都是这样做的,而本页会展示每个阶段:ln y 这一列、拟合出的直线,以及还原 a 和 b 的两次指数运算。

由于对数是无理数,这是这一组回归计算器中唯一一个答案为四舍五入小数、而不是精确分数的计算器,结果旁边也会注明这一点。它还要求每个 y 都大于 0,因为 0 和负数的对数不存在。显示的 r² 是对 ln y 做直线拟合的 r²,也就是图形计算器报告的那个数。

关于这条曲线需要注意的地方

  • b 是每一步的倍数,(b 减 1) 是变化率。b ≈ 0.8195 表示每一步保留上一个值的约 81.95%,即每步衰减约 18.05%。
  • a 是 x = 0 时的拟合值,不一定是第一个数据点。对于 x = 0 到 5 时 y = 100, 82, 67, 55, 45, 37,拟合得到 a ≈ 99.9517。
  • 同一条曲线可以写成 y = a·eᵏˣ,其中 k = ln b。k 为正表示增长,k 为负表示衰减,ln 2 / |k| 就是倍增时间或半衰期。
  • 最小二乘拟合的对象是 ln y,而不是 y。不管 y 是 5 还是 5000,偏差 10% 的权重都一样,这正适合按百分比增长的数据。
  • 对数尺度上的 r² 很高,并不能证明增长是指数型的。直线数据 5, 4, 3, 2, 1 做指数拟合,r² 仍约为 0.9473。

怎样手算指数回归

  1. 对每个 y 取对数

    把每个 y 换成 ln y。对于 x = 0, 1, 2, 3, 4 和 y = 3, 6, 12, 24, 48,新的一列约为 1.0986、1.7918、2.4849、3.1781 和 3.8712。

  2. 对 (x, ln y) 拟合一条直线

    对点 (x, ln y) 用普通最小二乘公式求斜率和截距。这里斜率约为 0.6931,截距约为 1.0986。

  3. 还原对数

    斜率是 ln b,截距是 ln a,所以 b = e 的斜率次方,a = e 的截距次方。这里 b ≈ e^0.6931 = 2,a ≈ e^1.0986 = 3。

  4. 写出曲线并读出变化率

    y ≈ 3·2ˣ,或以 e 为底写成 y ≈ 3e^(0.6931x)。b = 2 表示每一步 y 乘以 2:每步增长 100%,倍增时间正好是一步。

小数据集的指数拟合

每一行都是在上面的计算器中输入的一组数据。所有值都四舍五入到小数点后四位。

x 值y 值最佳拟合曲线每步变化ln y 的 r²
0, 1, 2, 3, 43, 6, 12, 24, 48y ≈ 3 · 2ˣ+100%1
0, 1, 2, 3, 4, 5100, 82, 67, 55, 45, 37y ≈ 99.9517 · 0.8195ˣ-18.05%1.0000
1, 2, 3, 4, 52.1, 4.3, 8.9, 17.5, 36y ≈ 1.0413 · 2.0313ˣ+103.13%0.9999
0, 1, 2, 3, 41000, 1050, 1102.5, 1157.625, 1215.50625y ≈ 1000 · 1.05ˣ+5%1
0, 1, 2, 3, 45, 4, 3, 2, 1y ≈ 5.6968 · 0.6762ˣ-32.38%0.9473

例题详解

每一步翻一倍

plain
x: 0, 1, 2, 3, 4; y: 3, 6, 12, 24, 48

每个 y 都是前一个的两倍,所以这些点恰好在 y = 3·2ˣ 上,计算器给出 a ≈ 3、b ≈ 2,即每步增长 100%,r² = 1。以 e 为底,同一条曲线是 y ≈ 3e^(0.6931x),而 0.6931 就是 ln 2。延伸到 x = 6,预测值为 3·2⁶ = 192。

衰减:一杯正在变凉的咖啡

plain
x: 0, 1, 2, 3, 4, 5; y: 100, 82, 67, 55, 45, 37

把 y 看作咖啡与室温之间的温差,每五分钟测一次。拟合结果是 y ≈ 99.9517 · 0.8195ˣ,或 y ≈ 99.9517e^(-0.1991x):每一步温差减少约 18.05%,半衰期是 ln 2 / 0.1991,约 3.48 步。对数拟合几乎完美:r² 保留五位小数是 0.99999,计算器把它四舍五入为 1。

带噪声的增长

plain
x: 1, 2, 3, 4, 5; y: 2.1, 4.3, 8.9, 17.5, 36

这些值每一步大约翻一倍,但并不精确。拟合结果是 y ≈ 1.0413 · 2.0313ˣ,即每步增长约 103.13%,对数尺度上 r² ≈ 0.9999。以 e 为底时 k ≈ 0.7087,所以倍增时间是 ln 2 / 0.7087,约 0.98 步。

复利

plain
x: 0, 1, 2, 3, 4; y: 1000, 1050, 1102.5, 1157.625, 1215.50625

本金 1000,年利率 5%。计算器还原出 y ≈ 1000 · 1.05ˣ,即每步变化 +5%,r² = 1。从一串余额反推出利率,正是这种拟合的用途。

数据不是指数型的时候

plain
x: 0, 1, 2, 3, 4; y: 5, 4, 3, 2, 1

这些点每一步减少同样的量,所以它们在一条直线 y = -x + 5 上。指数拟合仍然会给出 y ≈ 5.6968 · 0.6762ˣ,对数尺度上 r² ≈ 0.9473,看起来还不错。但把曲线和数据点画在一起,两端都对不上:这里正确的模型是直线,用线性回归可以精确拟合。

常见错误

  • 数据中包含小于或等于 0 的 y。这时对数没有定义,方法无法进行。如果数据真的会降到 0,它就不是指数型的。
  • 把 b 当成百分比。b = 1.05 表示每步增长 5%,b = 0.82 表示每步衰减 18%,而不是 82%。
  • 把 a 和第一个 y 值弄混。a 是 x = 0 时的拟合值;只有当拟合完全精确、且数据从 x = 0 开始时,它才等于第一个数据点。
  • 一步用以 10 为底的对数,另一步用 e。用什么底都可以,只要取对数和还原时用的是同一个底。
  • 把对数尺度上的 r² 当作指数增长的证据。直线数据的得分也可能超过 0.9;要把曲线和数据点画在一起看。
  • 外推得太远。指数增长迟早会遇到上限,而拟合出的曲线无从知道那是什么时候。

指数回归常见问题

怎样手算指数回归?

对每个 y 取自然对数,对点 (x, ln y) 做普通最小二乘直线拟合,再还原对数:b 是 e 的斜率次方,a 是 e 的截距次方。对于 x = 0 到 4 时 y = 3, 6, 12, 24, 48,直线的斜率是 0.6931,截距是 1.0986,得到 b = 2、a = 3,所以 y = 3·2ˣ。

y = a·bˣ 中的 a 和 b 是什么意思?

a 是 x = 0 时 y 的值,b 是 x 每增加 1 时 y 乘上的倍数。b 大于 1 表示增长,b 在 0 和 1 之间表示衰减。每一步的变化率是 (b 减 1) 换成百分数:b = 1.05 是 +5%,b = 0.8195 约为 -18.05%。

怎样从数据中求出增长率?

拟合曲线,读出 b。计算器会把 x 每增加一步的变化以百分数形式给出:本页带噪声的倍增例子是 +103.13%,变凉的咖啡是 -18.05%。如果 x 以年为单位,这就是年增长率。

y = a·bˣ 和 y = a·eᵏˣ 有什么区别?

只是写法不同。它们是同一条曲线,k = ln b,所以 b = eᵏ。以 e 为底的形式在科学中很常见,因为 k 是连续变化率,而 ln 2 / |k| 直接给出倍增时间或半衰期。

为什么计算器给出的是小数而不是分数?

因为这种方法要取对数,而整数的对数几乎总是无理数。这一组中的线性回归和二次回归计算器给出的是精确分数;这个计算器给出的是四舍五入到小数点后四位的值,并标明为近似值。

为什么我的答案和 Excel 或图形计算器略有不同?

在不计舍入误差的情况下,它应该与 TI-84 的 ExpReg 和 Excel 的指数趋势线一致,两者都是对 ln y 做最小二乘拟合。直接对 y 做非线性最小二乘拟合的软件,最小化的是另一个量,得到的 a 和 b 会略有不同,因为它对最大值处的偏差权重最高。

指数回归中 y 可以是负数或零吗?

不可以。这种方法要对每个 y 取对数,而 ln 0 和负数的对数都不存在。何况 a 为正的曲线 y = a·bˣ 总是大于 0,所以会降到 0 的数据本来就不符合这种曲线。

更多数学工具

Coddy 编程语言插图

和 Coddy 一起学数学

开始