Функция R для нахождения производного каждой точки во временном ряду - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть сглаженный временной ряд, и я хочу найти мгновенную скорость функции в любой точке вдоль линии.

Что я хочу сделать, это принять ряд значений: ex (1,6,5,4,3,5,6,7,1) и вернуть производную каждого относительно функции всего ряда, так что в каждый момент времени я знаю, в каком направлении проходит линия.

Я новичок в R, но знаю, что должен быть способ.

Какие-нибудь советы?

Ex:

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 с цветом по производной

1 Ответ

0 голосов
/ 02 ноября 2018

Ваш предложенный пример с использованием данных 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-я точка, х = 1,7

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

Tangent Line

Чтобы получить запрошенный вами фрейм данных. Вам просто нужно

Derivative = data.frame(x, d1)
...