【发布时间】:2014-12-04 07:29:35
【问题描述】:
有没有办法将 x,y 对数据集提供给一个函数,该函数将返回曲线拟合模型和系数的列表。 DataFit 程序使用大约 200 种不同的模型来执行此操作,但我们正在寻找一种 Python 的方式。从指数到逆多项式等。
我看过很多手动使用 scipy 键入每个模型的帖子,但这对于我们要测试的模型数量来说是不可行的。
我找到的最接近的是 pyeq2,但这并没有返回函数列表,而且似乎是一个要编码的兔子洞。
如果 R 有这个可用,我们可以使用它,但 Python 是真正的目标
以下是数据示例,我们想找到描述这条曲线的最佳方式
【问题讨论】:
-
我知道有些人会这样做,但我认为这是不好的做法。非线性模型应基于理论考虑。非线性函数的数量是无限的,那么您为什么认为(i)您的候选函数之一代表生成数据的过程,以及(ii)R² 将识别“正确”函数?如果您有一些潜在的候选函数(例如,吸附等温线),我可以理解做类似的事情,但我不会使用 R² 作为决策标准,我永远不会使用 200 个任意函数来这样做。
-
@Roland 主要原因是通过测试多个模型,我们可以快速看到与数据在统计上最匹配的结果曲线。然后从最好的几个候选人中提炼或挑选一个。例如,自动测试 1 到 5 阶多项式并查看更高阶是否过冲或拟合得更好。到目前为止,datafit 软件已经满足了我们的需求,但它需要花钱并且在编程方面根本没有灵活性
-
@Roland 我们得到的输出实际上是,StdError, Residual Sum, Residual Avg。 RSS,R^2,Ra^2。它只是为我们找到排名靠前的函数的一种快速方法,因为我们的主要研究背景不在这个领域
-
好吧,我不同意您寻找“在统计上与数据最匹配的结果曲线”的方法。如果那是您的目标,您可能应该使用 GAM。但我现在闭嘴了。这是你的数据,你必须坚持你的结果。
-
@Roland 的评论是正确的。这几乎是我见过的最糟糕的非线性建模应用。令人震惊的是,人们仍然这样做。此外,R.sq 对于非线性模型毫无意义。对于线性模型,R.sq 是模型解释的可变性分数。对于非线性模型情况并非如此。在一个族(例如多项式)中,具有更多参数的模型总是会产生更大的 R.sq,因此该指标无法评估拟合优度。
标签: python r curve-fitting