R函数查找时间序列中每个点的导数

时间:2018-11-01 20:44:12

标签: r derivative

我有一个平滑的时间序列,想找到函数在直线上任何一点的瞬时速度。

我想做的是获取一系列值:ex(1,6,5,4,3,5,6,7,1) 并返回每个相对于整个系列函数的导数,这样在每个时间点,我都知道直线的趋势。

我是R的新手,但知道一定有办法。

有什么提示吗?

例如:

library(smoother)
data(BJsales)
m <- data.frame(BJsales)

x.smth <- as.data.frame(smth.gaussian(m$BJsales,tails=TRUE,alpha = 5))

x.smth.ts <- cbind(seq(1:nrow(m)),x.smth)

colnames(x.smth.ts) <- c("x","y")

x.smth.ts

plot(x.smth.ts$y~x.smth.ts$x)

所需的输出:

df with 2 columns: x, deriv.of.y

编辑:归功于G5W

TS with Color by Derivative

1 个答案:

答案 0 :(得分:1)

您使用BJSales数据提出的示例绝对不可区分, BJSales

因此,我将展示一个更加平滑的函数的导数。如果您的真实数据是平滑的,这应该对您有用。

最简单的近似导数的方法就是使用有限差分。
f'(x)≈(f(x + h)-f(x))/ h

## Smooth sample function
x = seq(0,10,0.1)
y = x/2 + sin(x)
plot(x,y, pch=20)

## Simplest - first difference
d1 = diff(y)/diff(x)
d1 = c(d1[1],d1)

让我们用它来绘制切线作为错误检查。我选择了一个任意绘制切线的地方:第18个点,x = 1.7

plot(x,y, type="l")
abline(y[18]-x[18]*d1[18], d1[18]) 

Tangent Line

只需获取所需的data.frame,

Derivative = data.frame(x, d1)