r - 找到时间序列的质心
问题描述
如何找到时间序列的质心?质心在水文学中用于查找降雨和径流之间的时间滞后。
质心也称为水位线的重心(按值加权的日期时间的平均值)。我举一个直观的例子来说明清楚。需要的最重要信息是质心的时间,在 08:29 以下的情况下。
有没有人知道如何计算这个?我将 xts 用于我的时间序列,但我可能可以转换。这是我的示例数据:
flow <- structure(c(0, 0.1, 1.21, 3.26, 5.54, 7.5, 9.12, 9.59, 9.41,
8.82, 7.89, 6.74, 5.94, 5.3, 3.67, 3.06, 2.08, 1.46, 0.95, 0.54,
0.13, 0.02, 0), .Dim = c(23L, 1L), index = structure(c(1156918500,
1156919400, 1156920300, 1156921200, 1156922100, 1156923000, 1156923900,
1156924800, 1156925700, 1156926600, 1156927500, 1156928400, 1156929300,
1156930200, 1156931100, 1156932000, 1156932900, 1156933800, 1156934700,
1156935600, 1156936500, 1156937400, 1156938300), tzone = "GMT",
tclass = c("POSIXct", "POSIXt")), class = c("xts", "zoo"),
.indexCLASS = c("POSIXct", "POSIXt"),
tclass = c("POSIXct", "POSIXt"), .indexTZ = "GMT", tzone = "GMT",
.Dimnames = list(NULL, structure("Flow", .Dim = c(1L, 1L))))
我找不到任何 R 代码来做到这一点,无论是在这里还是在谷歌的帮助下。
解决方案
这是答案——感谢@pseudospin 和@g-grothendieck!
版本 1
as.POSIXct(sum(flow * attr(flow, 'index'))/sum(flow), origin = "1970-01-01")
版本 2
tt <- as.numeric(time(flow))
as.POSIXct(weighted.mean(tt, flow), origin = "1970-01-01")