计算时间序列的导数

时间:2015-11-06 22:15:49

标签: r time-series

我想计算时间序列的一阶和二阶导数,我怎样才能在R中实现这一点。

 dput(ps)
structure(c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 3L, 2L, 2L, 2L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 5L, 6L), class = c("xts", 
"zoo"), .indexCLASS = c("POSIXct", "POSIXt"), tclass = c("POSIXct", 
"POSIXt"), .indexTZ = "", tzone = "", index = structure(c(1409522400, 
1409523300, 1409524200, 1409525100, 1409526000, 1409526900, 1409527800, 
1409528700, 1409529600, 1409530500, 1409531400, 1409532300, 1409533200, 
1409534100, 1409535000, 1409535900, 1409536800, 1409537700, 1409538600, 
1409539500, 1409540400, 1409541300, 1409542200, 1409543100), tzone = "", tclass = c("POSIXct", 
"POSIXt")), .Dim = c(24L, 1L))

2 个答案:

答案 0 :(得分:1)

由于它们以15分钟的间隔均匀分布,

d <- as.numeric(diff(ps))/15

每分钟给你一次变化; diff(d)/15应该给你二阶导数(以分钟为单位^( - 2))

您也可以使用diff(ps,differences=2)获得第二个差异(您可以通过除以225来转换为衍生品......)

答案 1 :(得分:0)

这会计算样条曲线,然后取其一阶导数:

tt <- time(ps)
xts(splinefun(tt, ps)(tt, 1), tt)

将1替换为2以获得二阶导数。