Pattern Causality gives us a method to measure the causality in the complex system, it has its own ability to catch the hidden pattern in many kinds of series, so that it is statistically sufficient.
First of all, we can import the data of AAPL and MSFT, also we can import data from the yahooo api.
library(patterncausality)
data(DJS)
head(DJS)
#> Date X3M American.Express Apple Boeing Caterpillar Chevron
#> 1 2000-01-03 47.1875 45.88031 3.997768 40.1875 24.31250 41.81250
#> 2 2000-01-04 45.3125 44.14794 3.660714 40.1250 24.00000 41.81250
#> 3 2000-01-05 46.6250 42.96264 3.714286 42.6250 24.56250 42.56250
#> 4 2000-01-06 50.3750 43.83794 3.392857 43.0625 25.81250 44.37500
#> 5 2000-01-07 51.3750 44.47618 3.553571 44.3125 26.65625 45.15625
#> 6 2000-01-10 51.1250 45.09618 3.491071 43.6875 25.78125 43.93750
#> Cisco.Systems Coca.Cola DowDuPont ExxonMobil General.Electric Goldman.Sachs
#> 1 54.03125 28.18750 44.20833 39.15625 50.00000 88.3125
#> 2 51.00000 28.21875 43.00000 38.40625 48.00000 82.7500
#> 3 50.84375 28.46875 44.39583 40.50000 47.91667 78.8750
#> 4 50.00000 28.50000 45.64583 42.59375 48.55727 82.2500
#> 5 52.93750 30.37500 46.66667 42.46875 50.43750 82.5625
#> 6 54.90625 29.40625 45.47917 41.87500 50.41667 84.3750
#> IBM Intel Johnson...Johnson JPMorgan.Chase McDonald.s Merck
#> 1 116.0000 43.50000 46.09375 48.58333 39.6250 67.6250
#> 2 112.0625 41.46875 44.40625 47.25000 38.8125 65.2500
#> 3 116.0000 41.81250 44.87500 46.95833 39.4375 67.8125
#> 4 114.0000 39.37500 46.28125 47.62500 38.8750 68.3750
#> 5 113.5000 41.00000 48.25000 48.50000 39.8750 74.9375
#> 6 118.0000 42.87500 47.03125 47.66667 40.0625 72.7500
#> Microsoft Nike Pfizer Procter...Gamble The.Home.Depot Travelers
#> 1 58.28125 6.015625 31.8750 53.59375 65.1875 33.0000
#> 2 56.31250 5.687500 30.6875 52.56250 61.7500 32.5625
#> 3 56.90625 6.015625 31.1875 51.56250 63.0000 32.3125
#> 4 55.00000 5.984375 32.3125 53.93750 60.0000 32.9375
#> 5 55.71875 5.984375 34.5000 58.25000 63.5000 34.2500
#> 6 56.12500 6.085938 34.4375 57.96875 63.1875 33.6250
#> United.Technologies UnitedHealth.Group Verizon Walmart Walt.Disney
#> 1 31.25000 6.718750 53.90316 66.8125 29.46252
#> 2 29.96875 6.632813 52.16072 64.3125 31.18836
#> 3 29.37500 6.617188 53.90316 63.0000 32.48274
#> 4 30.78125 6.859375 53.28487 63.6875 31.18836
#> 5 32.00000 7.664063 52.89142 68.5000 30.69527
#> 6 32.31250 7.531250 52.61038 67.2500 35.37968
We can visualize this stock price.
Then search the best parameters for the PC.
After that, calculate the causality of each status.
X <- DJS$Apple
Y <- DJS$Microsoft
pc <- pcLightweight(X, Y, E = 3, tau = 2, metric = "euclidean", h = 1, weighted = TRUE, tpb=FALSE)
print(pc)
#> total positive negative dark
#> 1 0.2776053 0.3933764 0.1567044 0.4499192
Lastly we can also visualize this result.
library(ggplot2)
df <- data.frame(
name = stringr::str_to_title(c(colnames(pc))),
val = as.vector(unlist(pc))
)
ggplot(df, aes(x = name, y = val, fill = name)) +
geom_bar(stat = "identity", alpha = .6, width = .4) +
scale_fill_grey(start = 0, end = 0.8) + # start and end define the range of grays
labs(x = "Status", y = "Strength") +
theme_bw(base_size = 12, base_family = "Times New Roman") +
theme(
legend.position = "none", axis.text = element_text(size = rel(0.8)),
strip.text = element_text(size = rel(0.8))
)
The details could be found with following code.
X <- DJS$Apple
Y <- DJS$Microsoft
detail <- pcFullDetails(X, Y, E = 3, tau = 2, metric = "euclidean", h = 1, weighted = TRUE)
predict_status <- detail$spectrumOfCausalityPredicted
real_status <- detail$spectrumOfCausalityReal
names(detail)
So far, the whole process of this algorithm has finished.