用于查找时间序列中每个点的导数的 R 函数
R Function to Find Derivative of Every Point in Time Series
我有一个平滑的时间序列,想求函数沿线任意点的瞬时速度。
我想做的是取一系列值:ex(1,6,5,4,3,5,6,7,1)
和 return 每个相对于整个系列函数的导数,这样在每个时间点,我都知道这条线的趋势。
我是 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
你提出的使用 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])
要获得您请求的data.frame,您只需要
Derivative = data.frame(x, d1)
我有一个平滑的时间序列,想求函数沿线任意点的瞬时速度。
我想做的是取一系列值:ex(1,6,5,4,3,5,6,7,1) 和 return 每个相对于整个系列函数的导数,这样在每个时间点,我都知道这条线的趋势。
我是 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
你提出的使用 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])
要获得您请求的data.frame,您只需要
Derivative = data.frame(x, d1)