gpt4 book ai didi

r - 如何估计一系列线性段以拟合指数曲线?

转载 作者:行者123 更新时间:2023-12-02 02:03:49 26 4
gpt4 key购买 nike

这可能更像是一个数学问题,但最终我想在 R 中执行此操作。如果我有基本的指数曲线,我想了解如何使用 R 将一系列线性函数应用于尽我所能拟合指数曲线。原因是线性线是一种特殊的关系,并且线代表变化率,在每个拐点处变化率都会增加。了解这些拐点对于用户来说很重要。我附上了我想要完成的任务的粗略图。

Exponential Curve with Linear Lines

黑线是指数曲线,红线是一系列线性线,橙色圆圈当然代表线相交的地方。我可以以随意的方式执行此任务,只需选择任意数据点并构建线性模型,直到找到我认为最适合指数曲线的组合,但我知道有比这更好的方法。

下面是一些可能有帮助的代码:

data <- c(1:34)
sales <- c(20000000, 25000000, 30000000, 35000000, 43000000,
50000000, 57000000, 65000000, 72000000, 80000000, 89000000,
97000000, 108000000, 118000000, 128000000, 138000000, 150000000,
161000000, 174000000, 187000000, 203000000, 218000000, 235000000,
251000000, 260000000, 280000000 ,293000000, 310000000, 333000000,
363000000, 390000000, 415000000, 454000000, 540000000)
data2 <- data.frame(data,sales)

plot(data2$data,data2$sales)

plot of exponential curve as data

最佳答案

使用segmented包(参见this question):

library(segmented)
m1 <- lm(sales ~ data, data = data2) ## initial fit
s1 <- segmented(m1) ## one breakpoint
s2 <- segmented(m1, psi = c(10,25)) ## two breakpoints, estimated starting values
plot(sales ~ data, data = data2)
lines(data2$data, predict(s1))
lines(data2$data, predict(s2), col = 2, lwd =2)

结果:

s2
Call: segmented.lm(obj = m1, psi = c(10, 25))

Meaningful coefficients of the linear terms:
(Intercept) data U1.data U2.data
5942857 7732143 7105220 26962637

Estimated Break-Point(s):
psi1.data psi2.data
15.72 29.65

与 @JJacquelin 提供的解决方案不同,在估计 >1 断点时,您确实需要为断点提供起始值,但它们只需要是合理的值 - 特别是对于简单/行为良好的数据,结果将是(几乎)对于一系列相似的起始值选择是相同的。

data with predictions from segmented fits

从数学上来说,我会很挑剔地说指数曲线实际上没有拐点 - 斜率不断且逐渐增加 - 但如果这是一种将某些东西传达给观众们,加油吧。

关于r - 如何估计一系列线性段以拟合指数曲线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68683044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com