1

我正在估计一个非线性系统(通过看似不相关的回归 - SUR),使用带有 4 个方程、32 个参数来估计(!)和 412 个观察值的systemfit(函数)包。nlsystemfit()但是我的代码要花很长时间(我的笔记本电脑不是超级强大的)。到目前为止,该过程已经运行了 13 个小时。我不是计算方面的专家,但前段时间有人向我解释了算法(或 big-o)的时间复杂度的概念,然后根据这个概念,计算某个算法的时间可能依赖于特定的函数关系关于观察和/或系数的数量。

因此,我正在考虑停止我的过程,并尝试(暂时)简化模型并尝试运行更简单的东西,只是为了检查估计的参数到目前为止是否有意义。然后,运行一个完整的模型。

但是,如果我可以更改模型中的关键元素,那么这一切都是有意义的,这可以显着减少处理时间。这就是为什么我在谷歌上寻找关于nlm-package 的时间复杂度(nlsystemfit()函数依赖nlm)但没有成功的原因。所以,这是我的问题:任何人都知道我在哪里可以找到这些信息,或者至少给我建议如何在运行整个模型之前测试非线性系统?

4

1 回答 1

0

由于您没有提供有关您的模型或相同代码的任何实质性信息,因此很难表达对您的情况的改进。

从你说的:

因此,我正在考虑停止我的过程,并尝试(暂时)简化模型并尝试运行更简单的东西,只是为了检查估计的参数到目前为止是否有意义。然后,运行一个完整的模型。

就像您的情况一样,您似乎需要进行基准测试或获取执行所需的测量时间。(虽然它也可以处理内存使用或其他一些性能指标)

有很多方法可以在 R 中对代码进行基准测试,其中包括在算法/函数执行之前和之后使用Sys.time()或在执行算法/函数之前和之后使用system.time(),或者诸如rbenchmark(这是system.time函数的简单包装)tictoc、.benchmicrobenchmark

在这些中,最后两个是优选的选项,bench::mark包括system_time()一个更高精度的替代方案,system.time()并且microbenchmark已知是准确测量和比较 R 表达式/算法的执行时间的可靠来源。

于 2020-02-13T16:12:13.540 回答