我想计算时间序列的一阶和二阶导数,我怎样才能在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))
答案 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以获得二阶导数。