滚动时序 (xts) 对象的斜率 window
Slope of time series (xts) object over rolling window
我正在比较两个时间序列以找出它们之间的趋同和差异。对于这种比较,我需要找到这些 xts 对象的滚动斜率。
输出预计在 +90 度到 -90 度的范围内,但是,所有角度都非常高(+89 度或 -89 度)。 None 个角度在中间范围内(例如 40 度或 50 度)。在时间序列 See the time-series here. 中可以清楚地看到,角度比我得到的要小得多。请参阅下面的代码。
也许这个时间序列中的值太高导致角度太高。
预期结果是 中间 +90 度到 -90 度的角度范围,而不仅仅是直方图最边的角度。
See Current Histogram here。这个直方图两边都偏斜了。
规范化时间序列不起作用,因为还有许多其他时间序列需要相互比较。
我确信这个问题一定有一个巧妙的解决方案,但我不知道。
pk <- structure(c(176475.776229, 801702.534136, 573531.310782, 763134.554794,
51032.510395, -1202277.491428, -1075865.007615, 164827.827364,
1361265.209786, 1127723.252118, 1203207.209536, 253001.450284,
-432815.684082, -1422078.007582, -1664445.275597, -2105884.398064,
-2692917.799029, -44481.693965, 1179531.342173, 1110848.076465,
143379.572703, 181772.06575, -101275.193071, 252103.218599, -947214.996499,
-2489067.257061, -2226433.431194, -1444275.476699, -1969694.906524,
-760675.705558, 899506.35791, 2362280.866488, 1381920.731308,
1084715.948833, 1470193.174884, 1624093.045166, 1223984.756996,
105135.024835, 467388.621885, -340023.436882, -1942657.241719,
-2868287.68536, -3188899.823682, -2023482.788343, -2083416.868433,
-760435.041761, -223620.863171, 1008599.460076, 929822.059922,
1286626.269563, 2115007.421729, 1263829.5103, 117011.837805,
-1810296.187432, -2147812.317081, -2926602.592077, -2121310.677489,
-1091714.667369, -1460359.83423, -1339758.147395, -2007100.150998,
-2968863.772891, -2581419.700941, -3102293.73078, -2773652.767461,
-2842639.167243, -2900330.04286, -3412296.674811, -3535923.326536,
-2910537.240885, -2973223.902763, -2089859.94917, -608387.42732,
-78974.410284, 414977.701612, -5468547.637958, -6880128.453481,
-10676399.836788, -13974736.268232, -15073872.927747, -12395505.578961,
-8406507.177235, -7270788.824168, -7218095.55522, -7511227.500782,
-7589981.076343, -6007998.653345, -6340495.773522, -6185343.701229,
-6305225.926088, -4294831.625218, -1752062.182139, 407152.408487,
3161681.381567, 4700389.19555, 3763376.707736, 1862677.049896,
489057.458062, -150496.024142, 957322.644424), class = c("xts",
"zoo"), .indexCLASS = "Date", .indexTZ = "UTC", tclass = "Date", tzone = "UTC", src = "yahoo", updated = structure(1566047444.37875, class = c("POSIXct",
"POSIXt")), index = structure(c(1553644800, 1553731200, 1553817600,
1554076800, 1554163200, 1554249600, 1554336000, 1554422400, 1554681600,
1554768000, 1554854400, 1554940800, 1555027200, 1555286400, 1555372800,
1555459200, 1555545600, 1555891200, 1555977600, 1556064000, 1556150400,
1556236800, 1556496000, 1556582400, 1556668800, 1556755200, 1556841600,
1557100800, 1557187200, 1557273600, 1557360000, 1557446400, 1557705600,
1557792000, 1557878400, 1557964800, 1558051200, 1558310400, 1558396800,
1558483200, 1558569600, 1558656000, 1559001600, 1559088000, 1559174400,
1559260800, 1559520000, 1559606400, 1559692800, 1559779200, 1559865600,
1560124800, 1560211200, 1560297600, 1560384000, 1560470400, 1560729600,
1560816000, 1560902400, 1560988800, 1561075200, 1561334400, 1561420800,
1561507200, 1561593600, 1561680000, 1561939200, 1562025600, 1562112000,
1562284800, 1562544000, 1562630400, 1562716800, 1562803200, 1562889600,
1563148800, 1563235200, 1563321600, 1563408000, 1563494400, 1563753600,
1563840000, 1563926400, 1564012800, 1564099200, 1564358400, 1564444800,
1564531200, 1564617600, 1564704000, 1564963200, 1565049600, 1565136000,
1565222400, 1565308800, 1565568000, 1565654400, 1565740800, 1565827200,
1565913600), tzone = "UTC", tclass = "Date"), .Dim = c(100L,
1L), .Dimnames = list(NULL, "pk"))
f <- function (x) {
res <- lm(x ~ time(x))
atan(coef(res)[[2]]) * (180/pi)
}
r <- rollapplyr(pk, 14, f)
hist(r)
对我有用。我们不需要 summary
也不需要 by.column
(反正只有一列)。
结果范围是 c(-90, 90) 到 3 位小数。
library(xts)
f <- function (x) {
res <- lm(x ~ time(x))
atan(coef(res)[[2]]) * 180 / pi
}
r <- rollapplyr(pk, 14, f)
round(range(r, na.rm = TRUE), 3)
## [1] -90 90
已添加
张贴者表示不需要规范化,但如果我们确实这样做了,那么我们可以针对 k
的各种值尝试此操作,也许 k=3
,直到我们得到我们想要的。
r <- rollapplyr(k * 14 * pk / max(pk), 14, f)
我正在比较两个时间序列以找出它们之间的趋同和差异。对于这种比较,我需要找到这些 xts 对象的滚动斜率。
输出预计在 +90 度到 -90 度的范围内,但是,所有角度都非常高(+89 度或 -89 度)。 None 个角度在中间范围内(例如 40 度或 50 度)。在时间序列 See the time-series here. 中可以清楚地看到,角度比我得到的要小得多。请参阅下面的代码。
也许这个时间序列中的值太高导致角度太高。
预期结果是 中间 +90 度到 -90 度的角度范围,而不仅仅是直方图最边的角度。 See Current Histogram here。这个直方图两边都偏斜了。
规范化时间序列不起作用,因为还有许多其他时间序列需要相互比较。 我确信这个问题一定有一个巧妙的解决方案,但我不知道。
pk <- structure(c(176475.776229, 801702.534136, 573531.310782, 763134.554794,
51032.510395, -1202277.491428, -1075865.007615, 164827.827364,
1361265.209786, 1127723.252118, 1203207.209536, 253001.450284,
-432815.684082, -1422078.007582, -1664445.275597, -2105884.398064,
-2692917.799029, -44481.693965, 1179531.342173, 1110848.076465,
143379.572703, 181772.06575, -101275.193071, 252103.218599, -947214.996499,
-2489067.257061, -2226433.431194, -1444275.476699, -1969694.906524,
-760675.705558, 899506.35791, 2362280.866488, 1381920.731308,
1084715.948833, 1470193.174884, 1624093.045166, 1223984.756996,
105135.024835, 467388.621885, -340023.436882, -1942657.241719,
-2868287.68536, -3188899.823682, -2023482.788343, -2083416.868433,
-760435.041761, -223620.863171, 1008599.460076, 929822.059922,
1286626.269563, 2115007.421729, 1263829.5103, 117011.837805,
-1810296.187432, -2147812.317081, -2926602.592077, -2121310.677489,
-1091714.667369, -1460359.83423, -1339758.147395, -2007100.150998,
-2968863.772891, -2581419.700941, -3102293.73078, -2773652.767461,
-2842639.167243, -2900330.04286, -3412296.674811, -3535923.326536,
-2910537.240885, -2973223.902763, -2089859.94917, -608387.42732,
-78974.410284, 414977.701612, -5468547.637958, -6880128.453481,
-10676399.836788, -13974736.268232, -15073872.927747, -12395505.578961,
-8406507.177235, -7270788.824168, -7218095.55522, -7511227.500782,
-7589981.076343, -6007998.653345, -6340495.773522, -6185343.701229,
-6305225.926088, -4294831.625218, -1752062.182139, 407152.408487,
3161681.381567, 4700389.19555, 3763376.707736, 1862677.049896,
489057.458062, -150496.024142, 957322.644424), class = c("xts",
"zoo"), .indexCLASS = "Date", .indexTZ = "UTC", tclass = "Date", tzone = "UTC", src = "yahoo", updated = structure(1566047444.37875, class = c("POSIXct",
"POSIXt")), index = structure(c(1553644800, 1553731200, 1553817600,
1554076800, 1554163200, 1554249600, 1554336000, 1554422400, 1554681600,
1554768000, 1554854400, 1554940800, 1555027200, 1555286400, 1555372800,
1555459200, 1555545600, 1555891200, 1555977600, 1556064000, 1556150400,
1556236800, 1556496000, 1556582400, 1556668800, 1556755200, 1556841600,
1557100800, 1557187200, 1557273600, 1557360000, 1557446400, 1557705600,
1557792000, 1557878400, 1557964800, 1558051200, 1558310400, 1558396800,
1558483200, 1558569600, 1558656000, 1559001600, 1559088000, 1559174400,
1559260800, 1559520000, 1559606400, 1559692800, 1559779200, 1559865600,
1560124800, 1560211200, 1560297600, 1560384000, 1560470400, 1560729600,
1560816000, 1560902400, 1560988800, 1561075200, 1561334400, 1561420800,
1561507200, 1561593600, 1561680000, 1561939200, 1562025600, 1562112000,
1562284800, 1562544000, 1562630400, 1562716800, 1562803200, 1562889600,
1563148800, 1563235200, 1563321600, 1563408000, 1563494400, 1563753600,
1563840000, 1563926400, 1564012800, 1564099200, 1564358400, 1564444800,
1564531200, 1564617600, 1564704000, 1564963200, 1565049600, 1565136000,
1565222400, 1565308800, 1565568000, 1565654400, 1565740800, 1565827200,
1565913600), tzone = "UTC", tclass = "Date"), .Dim = c(100L,
1L), .Dimnames = list(NULL, "pk"))
f <- function (x) {
res <- lm(x ~ time(x))
atan(coef(res)[[2]]) * (180/pi)
}
r <- rollapplyr(pk, 14, f)
hist(r)
对我有用。我们不需要 summary
也不需要 by.column
(反正只有一列)。
结果范围是 c(-90, 90) 到 3 位小数。
library(xts)
f <- function (x) {
res <- lm(x ~ time(x))
atan(coef(res)[[2]]) * 180 / pi
}
r <- rollapplyr(pk, 14, f)
round(range(r, na.rm = TRUE), 3)
## [1] -90 90
已添加
张贴者表示不需要规范化,但如果我们确实这样做了,那么我们可以针对 k
的各种值尝试此操作,也许 k=3
,直到我们得到我们想要的。
r <- rollapplyr(k * 14 * pk / max(pk), 14, f)