# read the data from the file
TeslaSearch <- read.csv("TeslaSearch.txt",header = FALSE,col.names=c("Tesla Search")) #%>% as.tbl
TeslaSale <- read.csv("TeslaSale.txt",header = FALSE, col.names=c("Tesla Sale")) #%>% as.tbl
AudiSale <- read.csv("AudiSale.txt",header = FALSE,col.names=c("Audi Sale")) #%>% as.tbl
AudiSearch <- read.csv("AudiSearch.txt",header = FALSE,col.names = c("Audi Search")) #%>% as.tbl
TeslaSale <- na.omit(TeslaSale)
TeslaSearch <- na.omit(TeslaSearch)
AudiSale <- na.omit(AudiSale)
AudiSearch <- na.omit(AudiSearch)
# CONVERT THE DATA TO STATIONARY TIME SERIES
N1 <- nrow(AudiSale)
N2 <- nrow(AudiSearch)
Audi.ts1 <- cbind(log(AudiSearch[2:N1,] /AudiSearch[1:N1-1,]),log(AudiSale[2:N1,]/ AudiSale[1:N1-1,])) #%>% as.tbl
Tesla.ts1 <- cbind(log(TeslaSearch[2:N2,] /TeslaSearch[1:N2-1,]),log(TeslaSale[2:N2,]/ TeslaSale[1:N2-1,])) #%>% as.tbl
# **must** be added if not writing in `tidyverse`
colnames(Audi.ts1) <- c("Audi.Search","Audi.Sale")
colnames(Tesla.ts1) <- c("Tesla.Search","Tesla.Sale")
audi.var1 <- VAR(Audi.ts1, p =1 , type = "const")
causality(audi.var1, cause = "Audi.Search")
## $Granger
##
## Granger causality H0: Audi.Search do not Granger-cause Audi.Sale
##
## data: VAR object audi.var1
## F-Test = 0.94963, df1 = 1, df2 = 46, p-value = 0.3349
##
##
## $Instant
##
## H0: No instantaneous causality between: Audi.Search and Audi.Sale
##
## data: VAR object audi.var1
## Chi-squared = 2.2371, df = 1, p-value = 0.1347
tesla.var1 <- VAR(Tesla.ts1, p =1 , type = "const")
causality(tesla.var1, cause = "Tesla.Search")
## $Granger
##
## Granger causality H0: Tesla.Search do not Granger-cause
## Tesla.Sale
##
## data: VAR object tesla.var1
## F-Test = 4.1115, df1 = 1, df2 = 46, p-value = 0.04841
##
##
## $Instant
##
## H0: No instantaneous causality between: Tesla.Search and
## Tesla.Sale
##
## data: VAR object tesla.var1
## Chi-squared = 0.020411, df = 1, p-value = 0.8864
Under the confidance level \(\alpha = 0.05\), Audi.Search do not Granger-cause Audi.Sale. But Tesla.Search do Granger-cause Tesla.Sale with lag = 1.
## Compute the TE from AudiSearch to AudiSale
computeTE(AudiSearch,AudiSale,3,1,"MI_diff") ## should be circa 0.16
block_Tesla <- cbind(TeslaSearch,TeslaSale)
block_Audi <- cbind(AudiSearch,AudiSale)
vars <- colnames(block_Audi)
# generate all combinations of lib_column, target_column, tp
params <- expand.grid(lib_column = vars,
target_column = vars,
tp = 1:12)
# throw out cases where lib == target
params <- params[params$lib_column != params$target_column, ]
# E = 3 is optimal or very close to optimal for both vars
# In other circumstances, we should use the best univariate E for each lib_column
E <- 3
audi.output <- do.call(rbind, lapply(seq_len(NROW(params)), function(i) {
ccm(block_Audi, E = 3,
lib_sizes = NROW(block_Audi), random_libs = FALSE,
lib_column = params$lib_column[i],
target_column = params$target_column[i],
tp = params$tp[i], silent = TRUE)
}
)
)
kable(audi.output)
| 3 |
1 |
1 |
4 |
Audi.Sale |
Audi.Search |
25 |
25 |
-0.3385121 |
52314.206 |
66393.950 |
| 3 |
1 |
1 |
4 |
Audi.Search |
Audi.Sale |
25 |
25 |
0.0191074 |
1904.417 |
2217.216 |
| 3 |
1 |
2 |
4 |
Audi.Sale |
Audi.Search |
24 |
24 |
-0.1476461 |
43404.824 |
55220.811 |
| 3 |
1 |
2 |
4 |
Audi.Search |
Audi.Sale |
24 |
24 |
-0.4127977 |
2116.306 |
2534.869 |
| 3 |
1 |
3 |
4 |
Audi.Sale |
Audi.Search |
23 |
23 |
-0.1812810 |
46779.375 |
56969.947 |
| 3 |
1 |
3 |
4 |
Audi.Search |
Audi.Sale |
23 |
23 |
-0.0757697 |
1946.047 |
2320.873 |
| 3 |
1 |
4 |
4 |
Audi.Sale |
Audi.Search |
22 |
22 |
-0.1995820 |
49556.055 |
56188.884 |
| 3 |
1 |
4 |
4 |
Audi.Search |
Audi.Sale |
22 |
22 |
-0.0906235 |
1968.730 |
2428.806 |
| 3 |
1 |
5 |
4 |
Audi.Sale |
Audi.Search |
21 |
21 |
-0.2766103 |
46434.128 |
53797.617 |
| 3 |
1 |
5 |
4 |
Audi.Search |
Audi.Sale |
21 |
21 |
-0.3362113 |
2135.943 |
2709.511 |
| 3 |
1 |
6 |
4 |
Audi.Sale |
Audi.Search |
20 |
20 |
-0.0505972 |
48428.394 |
52018.638 |
| 3 |
1 |
6 |
4 |
Audi.Search |
Audi.Sale |
20 |
20 |
-0.4671800 |
2389.884 |
2844.199 |
| 3 |
1 |
7 |
4 |
Audi.Sale |
Audi.Search |
19 |
19 |
0.3203341 |
40193.634 |
44686.696 |
| 3 |
1 |
7 |
4 |
Audi.Search |
Audi.Sale |
19 |
19 |
-0.2800256 |
2241.120 |
2708.951 |
| 3 |
1 |
8 |
4 |
Audi.Sale |
Audi.Search |
18 |
18 |
0.2330507 |
37466.867 |
47182.955 |
| 3 |
1 |
8 |
4 |
Audi.Search |
Audi.Sale |
18 |
18 |
-0.0870362 |
2142.673 |
2616.568 |
| 3 |
1 |
9 |
4 |
Audi.Sale |
Audi.Search |
17 |
17 |
-0.0769730 |
42037.955 |
51886.061 |
| 3 |
1 |
9 |
4 |
Audi.Search |
Audi.Sale |
17 |
17 |
0.0298232 |
2052.421 |
2413.452 |
| 3 |
1 |
10 |
4 |
Audi.Sale |
Audi.Search |
16 |
16 |
-0.0369256 |
39532.958 |
50132.288 |
| 3 |
1 |
10 |
4 |
Audi.Search |
Audi.Sale |
16 |
16 |
0.1635485 |
1719.170 |
2204.214 |
| 3 |
1 |
11 |
4 |
Audi.Sale |
Audi.Search |
15 |
15 |
-0.1460358 |
39841.024 |
47969.857 |
| 3 |
1 |
11 |
4 |
Audi.Search |
Audi.Sale |
15 |
15 |
0.1761920 |
1839.425 |
2309.890 |
| 3 |
1 |
12 |
4 |
Audi.Sale |
Audi.Search |
14 |
14 |
-0.1803175 |
36812.964 |
49435.587 |
| 3 |
1 |
12 |
4 |
Audi.Search |
Audi.Sale |
14 |
14 |
-0.4665664 |
2144.504 |
2497.015 |
block_Tesla <- cbind(TeslaSearch,TeslaSale)
block_Audi <- cbind(AudiSearch,AudiSale)
varsTesla <- colnames(block_Tesla)
# generate all combinations of lib_column, target_column, tp
paramsTesla <- expand.grid(lib_column = varsTesla,
target_column = varsTesla,
tp = 1:12)
# throw out cases where lib == target
paramsTesla <- paramsTesla[paramsTesla$lib_column != paramsTesla$target_column, ]
# E = 3 is optimal or very close to optimal for both `varsTesla`
# In other circumstances, we should use the best univariate E for each lib_column
E <- 3
audi.output <- do.call(rbind, lapply(seq_len(NROW(paramsTesla)), function(i) {
ccm(block_Tesla, E = 3,
lib_sizes = NROW(block_Audi), random_libs = FALSE,
lib_column = paramsTesla$lib_column[i],
target_column = paramsTesla$target_column[i],
tp = paramsTesla$tp[i], silent = TRUE)
}
)
)
kable(audi.output)
| 3 |
1 |
1 |
4 |
Tesla.Sale |
Tesla.Search |
25 |
25 |
-0.4379163 |
128596.2346 |
141197.7304 |
| 3 |
1 |
1 |
4 |
Tesla.Search |
Tesla.Sale |
25 |
25 |
0.1940282 |
313.7523 |
376.4099 |
| 3 |
1 |
2 |
4 |
Tesla.Sale |
Tesla.Search |
24 |
24 |
-0.4817647 |
123954.5471 |
138979.2202 |
| 3 |
1 |
2 |
4 |
Tesla.Search |
Tesla.Sale |
24 |
24 |
-0.2936833 |
412.9776 |
481.8796 |
| 3 |
1 |
3 |
4 |
Tesla.Sale |
Tesla.Search |
23 |
23 |
-0.3878509 |
123038.9718 |
139407.8717 |
| 3 |
1 |
3 |
4 |
Tesla.Search |
Tesla.Sale |
23 |
23 |
-0.1879216 |
345.7714 |
453.1371 |
| 3 |
1 |
4 |
4 |
Tesla.Sale |
Tesla.Search |
22 |
22 |
-0.3081341 |
120760.1752 |
137539.7316 |
| 3 |
1 |
4 |
4 |
Tesla.Search |
Tesla.Sale |
22 |
22 |
0.5602586 |
225.9624 |
303.2620 |
| 3 |
1 |
5 |
4 |
Tesla.Sale |
Tesla.Search |
21 |
21 |
-0.1855932 |
112310.1368 |
129239.5275 |
| 3 |
1 |
5 |
4 |
Tesla.Search |
Tesla.Sale |
21 |
21 |
0.0796541 |
325.4930 |
403.9694 |
| 3 |
1 |
6 |
4 |
Tesla.Sale |
Tesla.Search |
20 |
20 |
-0.0659118 |
108908.7504 |
120774.6342 |
| 3 |
1 |
6 |
4 |
Tesla.Search |
Tesla.Sale |
20 |
20 |
0.0164671 |
361.0241 |
406.0969 |
| 3 |
1 |
7 |
4 |
Tesla.Sale |
Tesla.Search |
19 |
19 |
-0.3907647 |
104052.2455 |
133635.0306 |
| 3 |
1 |
7 |
4 |
Tesla.Search |
Tesla.Sale |
19 |
19 |
0.3488974 |
293.8169 |
358.8981 |
| 3 |
1 |
8 |
4 |
Tesla.Sale |
Tesla.Search |
18 |
18 |
-0.4472347 |
104165.0476 |
130763.6715 |
| 3 |
1 |
8 |
4 |
Tesla.Search |
Tesla.Sale |
18 |
18 |
-0.0980671 |
363.8159 |
429.8393 |
| 3 |
1 |
9 |
4 |
Tesla.Sale |
Tesla.Search |
17 |
17 |
-0.3845198 |
92224.7485 |
113395.1526 |
| 3 |
1 |
9 |
4 |
Tesla.Search |
Tesla.Sale |
17 |
17 |
0.0846541 |
332.3889 |
407.4171 |
| 3 |
1 |
10 |
4 |
Tesla.Sale |
Tesla.Search |
16 |
16 |
-0.3086075 |
75239.9422 |
91281.4176 |
| 3 |
1 |
10 |
4 |
Tesla.Search |
Tesla.Sale |
16 |
16 |
0.4863624 |
239.4919 |
308.9398 |
| 3 |
1 |
11 |
4 |
Tesla.Sale |
Tesla.Search |
15 |
15 |
-0.2020883 |
71125.1843 |
83800.8791 |
| 3 |
1 |
11 |
4 |
Tesla.Search |
Tesla.Sale |
15 |
15 |
0.0516980 |
337.8724 |
389.1706 |
| 3 |
1 |
12 |
4 |
Tesla.Sale |
Tesla.Search |
14 |
14 |
-0.2807491 |
58209.1663 |
72596.4630 |
| 3 |
1 |
12 |
4 |
Tesla.Search |
Tesla.Sale |
14 |
14 |
-0.3720290 |
371.4256 |
435.3282 |
audi.output$direction <- paste(output$lib_column, "xmap to", audi.output$target_column)
# visualize
ggplot(output, aes(x = tp, y = rho, color = direction)) +
geom_line() + theme_bw()
Exaple for CCM test
Following is the standard example from the r-blogger.
data(paramecium_didinium)
vars <- names(paramecium_didinium)[2:3] # c("paramecium", "didinium")
# generate all combinations of lib_column, target_column, tp
params <- expand.grid(lib_column = vars,
target_column = vars,
tp = -10:10)
# throw out cases where lib == target
params <- params[params$lib_column != params$target_column, ]
# E = 3 is optimal or very close to optimal for both vars
# In other circumstances, we should use the best univariate E for each lib_column
E <- 3
# Perform cross mapping runs
output <- do.call(rbind, lapply(seq_len(NROW(params)), function(i) {
ccm(paramecium_didinium, E = 3,
lib_sizes = NROW(paramecium_didinium), random_libs = FALSE,
lib_column = params$lib_column[i],
target_column = params$target_column[i],
tp = params$tp[i], silent = TRUE)
}))
kable(output)
| 3 |
1 |
-10 |
4 |
didinium |
paramecium |
61 |
61 |
0.0295085 |
70.34813 |
94.24059 |
| 3 |
1 |
-10 |
4 |
paramecium |
didinium |
61 |
61 |
0.4114229 |
22.26645 |
27.81776 |
| 3 |
1 |
-9 |
4 |
didinium |
paramecium |
62 |
62 |
0.0814710 |
66.93714 |
91.43848 |
| 3 |
1 |
-9 |
4 |
paramecium |
didinium |
62 |
62 |
0.4213588 |
22.63818 |
28.33557 |
| 3 |
1 |
-8 |
4 |
didinium |
paramecium |
63 |
63 |
-0.0183784 |
69.59975 |
94.27927 |
| 3 |
1 |
-8 |
4 |
paramecium |
didinium |
63 |
63 |
0.4421479 |
21.97603 |
28.04247 |
| 3 |
1 |
-7 |
4 |
didinium |
paramecium |
64 |
64 |
-0.0110335 |
68.04791 |
92.82893 |
| 3 |
1 |
-7 |
4 |
paramecium |
didinium |
64 |
64 |
0.4747370 |
22.22587 |
27.85163 |
| 3 |
1 |
-6 |
4 |
didinium |
paramecium |
65 |
65 |
0.3359370 |
62.50622 |
81.26970 |
| 3 |
1 |
-6 |
4 |
paramecium |
didinium |
65 |
65 |
0.6182322 |
19.32392 |
24.22547 |
| 3 |
1 |
-5 |
4 |
didinium |
paramecium |
66 |
66 |
0.7301911 |
43.42354 |
56.39094 |
| 3 |
1 |
-5 |
4 |
paramecium |
didinium |
66 |
66 |
0.6926566 |
17.53715 |
22.62126 |
| 3 |
1 |
-4 |
4 |
didinium |
paramecium |
67 |
67 |
0.8636567 |
31.91674 |
40.83279 |
| 3 |
1 |
-4 |
4 |
paramecium |
didinium |
67 |
67 |
0.7142419 |
16.41135 |
21.57040 |
| 3 |
1 |
-3 |
4 |
didinium |
paramecium |
68 |
68 |
0.8460469 |
35.24298 |
43.12551 |
| 3 |
1 |
-3 |
4 |
paramecium |
didinium |
68 |
68 |
0.7022479 |
16.60132 |
21.50497 |
| 3 |
1 |
-2 |
4 |
didinium |
paramecium |
69 |
69 |
0.8220896 |
36.45445 |
45.85722 |
| 3 |
1 |
-2 |
4 |
paramecium |
didinium |
69 |
69 |
0.8244554 |
13.28106 |
16.84226 |
| 3 |
1 |
-1 |
4 |
didinium |
paramecium |
69 |
69 |
0.7583648 |
36.47250 |
51.92012 |
| 3 |
1 |
-1 |
4 |
paramecium |
didinium |
69 |
69 |
0.8808708 |
10.99742 |
13.89441 |
| 3 |
1 |
0 |
4 |
didinium |
paramecium |
69 |
69 |
0.6496415 |
44.00072 |
61.47605 |
| 3 |
1 |
0 |
4 |
paramecium |
didinium |
69 |
69 |
0.8429156 |
12.41947 |
15.56230 |
| 3 |
1 |
1 |
4 |
didinium |
paramecium |
68 |
68 |
0.6251339 |
45.14225 |
63.60374 |
| 3 |
1 |
1 |
4 |
paramecium |
didinium |
68 |
68 |
0.7982394 |
14.24096 |
17.36885 |
| 3 |
1 |
2 |
4 |
didinium |
paramecium |
67 |
67 |
0.6999449 |
42.75334 |
58.23997 |
| 3 |
1 |
2 |
4 |
paramecium |
didinium |
67 |
67 |
0.7896611 |
14.77443 |
17.82333 |
| 3 |
1 |
3 |
4 |
didinium |
paramecium |
66 |
66 |
0.6529026 |
43.81703 |
62.94071 |
| 3 |
1 |
3 |
4 |
paramecium |
didinium |
66 |
66 |
0.7525724 |
15.59011 |
19.38724 |
| 3 |
1 |
4 |
4 |
didinium |
paramecium |
65 |
65 |
0.5492227 |
52.90417 |
70.77524 |
| 3 |
1 |
4 |
4 |
paramecium |
didinium |
65 |
65 |
0.5928557 |
19.32684 |
24.28676 |
| 3 |
1 |
5 |
4 |
didinium |
paramecium |
64 |
64 |
0.4834459 |
55.54542 |
75.09968 |
| 3 |
1 |
5 |
4 |
paramecium |
didinium |
64 |
64 |
0.4570977 |
21.56946 |
27.63148 |
| 3 |
1 |
6 |
4 |
didinium |
paramecium |
63 |
63 |
0.4902958 |
52.99690 |
72.09239 |
| 3 |
1 |
6 |
4 |
paramecium |
didinium |
63 |
63 |
0.3751043 |
23.12912 |
28.83605 |
| 3 |
1 |
7 |
4 |
didinium |
paramecium |
62 |
62 |
0.3706265 |
56.54052 |
79.55106 |
| 3 |
1 |
7 |
4 |
paramecium |
didinium |
62 |
62 |
0.3350856 |
24.42825 |
30.03801 |
| 3 |
1 |
8 |
4 |
didinium |
paramecium |
61 |
61 |
0.3514713 |
56.22364 |
82.28203 |
| 3 |
1 |
8 |
4 |
paramecium |
didinium |
61 |
61 |
0.4494399 |
22.64310 |
27.66854 |
| 3 |
1 |
9 |
4 |
didinium |
paramecium |
60 |
60 |
0.3416320 |
62.84974 |
82.99648 |
| 3 |
1 |
9 |
4 |
paramecium |
didinium |
60 |
60 |
0.3932366 |
23.26772 |
28.93985 |
| 3 |
1 |
10 |
4 |
didinium |
paramecium |
59 |
59 |
0.3568375 |
63.85717 |
81.35833 |
| 3 |
1 |
10 |
4 |
paramecium |
didinium |
59 |
59 |
0.3301802 |
25.01866 |
30.41829 |