【问题标题】:How to calculate first derivative of time series如何计算时间序列的一阶导数
【发布时间】:2012-12-29 14:21:29
【问题描述】:

我会使用timepH 这两个变量来计算时间序列的一阶导数(dpH/dtime)。

在 R 中是否有任何类型的函数可以做到这一点,或者我应该计算一个额外的函数来做到这一点?

【问题讨论】:

  • diff.ts 浮现在脑海中。
  • 或更粗略的diff(pH)/diff(time);这还取决于您是否要进行某种平滑处理。
  • 我使用了函数 diff,例如导数
  • 如果没有可重复的示例(tinyurl.com/reproducible-000),几乎不可能说。假设pH1pH2 的滞后版本,time1/time2 也是如此,您的计算应该给出相同的结果...
  • 你说得对,我在 R 中遇到了导出问题。在 excel 中,时间差为 0.16667,但我只用一个十进制数导出时间序列。抱歉弄错了。

标签: r derivative


【解决方案1】:

假设pHtime 是普通向量,试试这个:

library(pspline)
predict(sm.spline(time, pH), time, 1)

【讨论】:

    【解决方案2】:

    您可能希望按照 Matt L 的建议从 stats::derivdiff.ts 开始。请记住我的一位教授曾经对他所有的学生说的话:数值微分被称为“误差乘数”。

    编辑: 澄清一下——他警告的是,数据中的任何噪音都会使导数估计偏离。有人说积分是低通滤波器,微分是高通滤波器。 因此,重要的是在计算导数之前对数据进行一些平滑处理。因此,Gabor 建议使用 predict.spline 。但请记住,修改样条参数会使您的数据平滑到不同的水平,因此请务必查看结果,以确保您去除了明显的噪声,但不是所需的特征。

    【讨论】:

    • 您能否添加一两行来解释“数值微分又名误差乘数”?真的很好奇。
    【解决方案3】:

    【讨论】:

    • 这是有用的信息,但我认为与 OP 的问题无关(这是关于查找时间序列数据的导数,而不是查找/近似显式定义函数的导数... )
    • @BenBolker - 你是对的。 numDeriv 不是正确的包。我目前找不到合适的包(也许我记得来自不同语言的包?),但该技术只是标准的泰勒级数方法。我将替换 numDeriv 链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 2020-05-06
    相关资源
    最近更新 更多