问题
I have a time series data (in day format) of 5 places for 15 days stored as a matrix
. The structure of data is
meter_daywise<-structure(c(24.4745528484842, 21.5936510486629, 58.9120896540103,
49.4188338105575, 568.791971631185, 27.1682608244523, 23.3482757939878,
74.710966227615, 82.6947717673258, 704.212340152625, 23.7581651139442,
21.154634543401, 64.9680107059625, 420.903181621575, 672.629513512841,
128.22871420984, 601.521395359887, 74.6606087800009, 335.87599588534,
576.451039365565, 641.329910104503, 1010.78497435794, 72.6159099850862,
225.153924410613, 582.652388366075, 529.082673064516, 1151.87208010484,
76.9939865858514, 198.567927906582, 641.511944831027, 280.685806121688,
998.647413766557, 73.2033388656998, 337.966543898629, 847.24874747014,
76.7357959402453, 1065.75153722813, 220.286408574643, 301.120955096701,
552.703945876515, 206.496034127105, 1053.49582469841, 206.187963352323,
219.791668265415, 655.496754449233, 172.87981151456, 1018.01514547636,
544.551001017031, 227.116788647859, 656.566145328213, 373.484460701849,
1503.65562864399, 117.732932835236, 251.383369528816, 802.871808716031,
150.471195301885, 1414.88799728991, 14.6490905509617, 203.429955747521,
622.731792495107, 548.093577186778, 1076.5618643676, 15.5135269483705,
256.581499048612, 644.572474965446, 63.2304035656636, 1538.07906461011,
15.0980567507389, 261.513768642083, 622.17970609429, 210.786387991582,
996.998005580537, 15.8138368515615, 157.390773346978, 573.477606081416
), .Dim = c(5L, 15L), .Dimnames = list(c("apFac_401", "apFac_403",
"apFac_501", "apFac_503", "apFac_601"), c("D1", "D2", "D3", "D4",
"D5", "D6", "D7", "D8", "D9", "D10", "D11", "D12", "D13", "D14",
"D15")))
Earlier, I was calculating correlation between different series using
library(corrplot)# for plotting correlation matrix
corrplot(cor(t(meter_daywise)),method = "number",type="lower")# have taken transpose of above structure
So, with this I am getting a nice correlation matrix showing correlation between different series.
But, while observing correlation values I find something is wrong and on searching I found this link, where it mentions that we need to compute cross-correlation. Therefore, now I need to calculate cross correlation matrix like the above one. Accordingly, I found some functions like
1. ccf() #in base packages
2. diss(meter_daywise,METHOD = "CORT",deltamethod = "DTW")#in TSclust package
I am facing two issues with above functions:
ccf
do not take full matrix as inputdiss()
takes input matrix and produces some matrix, but while observing the values I find that it is not a cross-correlation matrix because the values are not between-1
and1
.
So the question is how do we compute cross-correlation matrix of different time-series values in R?
回答1:
You can transform matrix
to list
of ts
objects then use do.call
.
meter_daywise <- structure(c(24.4745528484842, 21.5936510486629, 58.9120896540103,
49.4188338105575, 568.791971631185, 27.1682608244523, 23.3482757939878,
74.710966227615, 82.6947717673258, 704.212340152625, 23.7581651139442,
21.154634543401, 64.9680107059625, 420.903181621575, 672.629513512841,
128.22871420984, 601.521395359887, 74.6606087800009, 335.87599588534,
576.451039365565, 641.329910104503, 1010.78497435794, 72.6159099850862,
225.153924410613, 582.652388366075, 529.082673064516, 1151.87208010484,
76.9939865858514, 198.567927906582, 641.511944831027, 280.685806121688,
998.647413766557, 73.2033388656998, 337.966543898629, 847.24874747014,
76.7357959402453, 1065.75153722813, 220.286408574643, 301.120955096701,
552.703945876515, 206.496034127105, 1053.49582469841, 206.187963352323,
219.791668265415, 655.496754449233, 172.87981151456, 1018.01514547636,
544.551001017031, 227.116788647859, 656.566145328213, 373.484460701849,
1503.65562864399, 117.732932835236, 251.383369528816, 802.871808716031,
150.471195301885, 1414.88799728991, 14.6490905509617, 203.429955747521,
622.731792495107, 548.093577186778, 1076.5618643676, 15.5135269483705,
256.581499048612, 644.572474965446, 63.2304035656636, 1538.07906461011,
15.0980567507389, 261.513768642083, 622.17970609429, 210.786387991582,
996.998005580537, 15.8138368515615, 157.390773346978, 573.477606081416
), .Dim = c(5L, 15L), .Dimnames = list(c("apFac_401", "apFac_403",
"apFac_501", "apFac_503", "apFac_601"), c("D1", "D2", "D3", "D4",
"D5", "D6", "D7", "D8", "D9", "D10", "D11", "D12", "D13", "D14",
"D15")))
tss <- unlist(apply(meter_daywise, 1 , function(x) list(ts(x))), recursive = FALSE)
tssu <- do.call(ts.union, tss)
plot(acf(tssu))
Output:
来源:https://stackoverflow.com/questions/33537687/cross-correlation-of-different-time-series-data-values-in-r