###----------------------------------------------------------------###
## The dmbp-example from P1_fig_03.
## This script contains the code needed in order to reproduce the
## plot that shows both the pseduo-normalised version of the
## 'dmbp'-data together with some plots of the lag 1 pairs.
###----------------------------------------------------------------###
## Load the required libraries.
library(localgaussSpec)
library(ggplot2)
library(grid)
## Access the 'dmbp'-data from the 'localgaussSpec'-pakcage (this is a
## copy of the data in the 'rugarch'-package.)
data(dmbp)
dmbp <- dmbp[, "V1"]
## Create pseudo-normal observations from `dmbp`.
dmbp_pn <- qnorm(p = (rank(dmbp) - 0.5) /length(dmbp))
rm(dmbp)
###----------------------------------------------------------------###
## Create a plot to present the pseduo-normalised values that the
## computations are based upon.
dmbp_pn_plot <- ggplot(
data = data.frame(
x = seq_along(dmbp_pn),
y = dmbp_pn),
mapping = aes(x = x, y = y)) +
geom_line(
mapping = aes(x = x, y = y),
lwd = 0.1,
alpha = 0.6) +
theme(axis.title.x = element_blank(),
axis.title.y = element_blank()) +
annotate(geom = "text",
x = -Inf,
y = Inf,
size = 3,
label = "pseduo-normal dmbp",
col = "brown",
alpha = 1,
vjust = 1.3,
hjust = -0.1) +
theme(axis.ticks = element_line(linewidth = 0.25),
axis.ticks.length = unit(.04, "cm"),
axis.text = element_text(size = 4.5))
## This plot is shrinked a lot later on, and then the tiny `lwd`
## gives a decent view.
###----------------------------------------------------------------###
## Add information related to the selected points in the lower tail,
## the center and the upper tail.
## Specify the points needed for the "plots with rectangles"
.lower_tail <- 0.1
.center <- 0.5
.upper_tail <- 0.9
coord_points <- structure(
.Data = qnorm(c(.lower_tail, .center, .upper_tail)),
.Names = c("lower", "center", "upper"))
## Specify the "half-width of the strip"
bw <- 0.5
### Create a version that contains the bands of interest, i.e. need
### to have a data-frame
df_details <- data.frame(
x = seq_along(dmbp_pn),
y = dmbp_pn,
lower_min = unname(coord_points["lower"] - bw),
lower_max = unname(coord_points["lower"] + bw),
center_min = unname(coord_points["center"] - bw),
center_max = unname(coord_points["center"] + bw),
upper_min = unname(coord_points["upper"] - bw),
upper_max = unname(coord_points["upper"] + bw))
## Specify details to be used when adding strips to the plot of the
## pseduo-normalised time series.
.border_colour <- "blue"
.fill <- "magenta"
.border_size <- 0.1
dmbp_pn_plot_extra <- dmbp_pn_plot +
geom_hline(yintercept = coord_points,
linetype = 2,
lwd = .3) +
geom_rect(data = data.frame(
xmin = -Inf,
xmax = Inf,
ymin = coord_points["lower"] - bw,
ymax = coord_points["lower"] + bw),
aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax),
color = .border_colour,
alpha = 0.2,
size = .border_size,
fill = .fill,
inherit.aes = FALSE) +
geom_rect(data = data.frame(
xmin = -Inf,
xmax = Inf,
ymin = coord_points["center"] - bw,
ymax = coord_points["center"] + bw),
aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax),
color = .border_colour,
alpha = 0.2,
size = .border_size,
fill = .fill,
inherit.aes = FALSE) +
geom_rect(data = data.frame(
xmin = -Inf,
xmax = Inf,
ymin = coord_points["upper"] - bw,
ymax = coord_points["upper"] + bw),
aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax),
color = .border_colour,
alpha = 0.2,
size = .border_size,
fill = .fill,
inherit.aes = FALSE) +
annotate(
geom = "text",
x = Inf,
y = coord_points,
size = 1.5,
label = c("10%", "50%", "90%"),
col = "brown",
vjust = -0.5,
hjust = 1) +
annotate(
geom = "text",
x = -Inf,
y = coord_points,
size = 1.5,
label = c("10%", "50%", "90%"),
col = "brown",
vjust = -0.5,
hjust = 0)
###----------------------------------------------------------------###
## The next part is to create the plots that shows the lag-h pairs,
## with a rectangle added that highligths the differences in the
## points for the three points of interest.
## Count the number of observations captured in these strips, by
## investigating some logical vectors.
count_lower <- {dmbp_pn <= coord_points["lower"] + bw} -
{dmbp_pn < coord_points["lower"] - bw}
count_center <- {dmbp_pn <= coord_points["center"] + bw} -
{dmbp_pn < coord_points["center"] - bw}
count_upper <- {dmbp_pn <= coord_points["upper"] + bw} -
{dmbp_pn < coord_points["upper"] - bw}
nr_in_lower_strip <- sum(count_lower)
nr_in_center_strip <- sum(count_center)
nr_in_upper_strip <- sum(count_upper)
## And while at it, find the number of points within the
## corresponding squares for the desired lag.
h <- 1
x_lower <- tail(count_lower, -h)
y_lower <- head(count_lower, -h)
nr_in_lower_square <- sum(x_lower * y_lower)
##
x_center <- tail(count_center, -h)
y_center <- head(count_center, -h)
nr_in_center_square <- sum(x_center * y_center)
##
x_upper <- tail(count_upper, -h)
y_upper <- head(count_upper, -h)
nr_in_upper_square <- sum(x_upper * y_upper)
## Also count the combination of "lower" and "upper", to be used when
## discussing an off-diagonal example
nr_in_lower__upper_square <- sum(x_lower * y_upper)
## Do the same for the highest number of lags included.
h.max <- 200
x_lower_h.max <- tail(count_lower, -h.max)
y_lower_h.max <- head(count_lower, -h.max)
nr_in_lower_square_h.max <- sum(x_lower_h.max * y_lower_h.max)
##
x_center_h.max <- tail(count_center, -h.max)
y_center_h.max <- head(count_center, -h.max)
nr_in_center_square_h.max <- sum(x_center_h.max * y_center_h.max)
##
x_upper_h.max <- tail(count_upper, -h.max)
y_upper_h.max <- head(count_upper, -h.max)
nr_in_upper_square_h.max <- sum(x_upper_h.max * y_upper_h.max)
## Also count the combination of "lower" and "upper", to be used when
## discussing an off-diagonal example
nr_in_lower__upper_square_h.max <- sum(x_lower_h.max * y_upper_h.max)
###----------------------------------------------------------------###
## Create a plot that shows the lagged pairs for the lag = 1 case of
## the pseudo-normalised dmbp data.
h <- 1
x_dmbp_pn <- tail(dmbp_pn, -h)
y_dmbp_pn <- head(dmbp_pn, -h)
label_dmbp_pn <- paste(
"Lag",
h,
"pairs") #" for pseduo-normal dmbp")
dmbp_pn_lag1_data <- data.frame(
x = x_dmbp_pn,
y = y_dmbp_pn)
.alpha <- 2/10
.size <- 4/10
dmbp_pn_lag1 <-
ggplot(data = dmbp_pn_lag1_data, aes(x=x, y=y)) +
geom_point(shape = 19, size = .size, alpha= .alpha) +
geom_abline(colour = "magenta", linetype = 2, size = .3) +
annotate(geom = "text",
x = -Inf,
y = Inf,
size = 3,
label = label_dmbp_pn,
col = "brown",
alpha = 1,
vjust = 1.3,
hjust = -0.1) +
theme(axis.title.x = element_blank(),
axis.title.y = element_blank()) +
theme(axis.ticks = element_line(linewidth = 0.25),
axis.ticks.length = unit(.04, "cm"),
axis.text = element_text(size = 4.5))
## Add points that shows where the local Gaussian correlations will
## be computed, and a corresponding bandwidht-square. Information
## about the number of points within these squares might also be of
## interest.
dmbp_pn_lag1_lower <-
dmbp_pn_lag1 +
geom_rect(data = data.frame(
xmin = coord_points["lower"] - bw,
xmax = coord_points["lower"] + bw,
ymin = coord_points["lower"] - bw,
ymax = coord_points["lower"] + bw),
aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax),
color = "white",
alpha = 0.3,
inherit.aes = FALSE) +
annotate(geom = "text",
x = -2.5,
y = -Inf,
size = 3,
label = paste("box =",
nr_in_lower_square,
"observations"),
col = "brown",
alpha = 1,
vjust = -0.5,
hjust = 0) +
annotate(
geom = "text",
x = Inf,
y = Inf,
size = 3,
label = "10% :: 10%",
col = "brown",
vjust = 1.2,
hjust = 1.2) +
geom_point(data = data.frame(
x = coord_points["lower"],
y = coord_points["lower"]),
shape = 20,
size = 4 * .size,
color = "white")
dmbp_pn_lag1_center <-
dmbp_pn_lag1 +
geom_rect(data = data.frame(
xmin = coord_points["center"] - bw,
xmax = coord_points["center"] + bw,
ymin = coord_points["center"] - bw,
ymax = coord_points["center"] + bw),
aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax),
color = "white",
alpha = 0.3,
inherit.aes = FALSE) +
annotate(geom = "text",
x = -2.5,
y = -Inf,
size = 3,
label = paste("box =",
nr_in_center_square,
"observations"),
col = "brown",
alpha = 1,
vjust = -0.5,
hjust = 0) +
annotate(
geom = "text",
x = Inf,
y = Inf,
size = 3,
label = "50% :: 50%",
col = "brown",
vjust = 1.2,
hjust = 1.2) +
geom_point(data = data.frame(
x = coord_points["center"],
y = coord_points["center"]),
shape = 20,
size = 4 * .size,
color = "white")
dmbp_pn_lag1_upper <-
dmbp_pn_lag1 +
geom_rect(data = data.frame(
xmin = coord_points["upper"] - bw,
xmax = coord_points["upper"] + bw,
ymin = coord_points["upper"] - bw,
ymax = coord_points["upper"] + bw),
aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax),
color = "white",
alpha = 0.3,
inherit.aes = FALSE) +
annotate(geom = "text",
x = -2.5,
y = -Inf,
size = 3,
label = paste("box =",
nr_in_upper_square,
"observations"),
col = "brown",
alpha = 1,
vjust = -0.5,
hjust = 0) +
annotate(
geom = "text",
x = Inf,
y = Inf,
size = 3,
label = "90% :: 90%",
col = "brown",
vjust = 1.2,
hjust = 1.2) +
geom_point(data = data.frame(
x = coord_points["upper"],
y = coord_points["upper"]),
shape = 20,
size = 4 * .size,
color = "white")
###----------------------------------------------------------------###
## Create the desired grid of plots, and save this grid to disk.
## Note: It is only after having saved the result to a file, that the
## effect of the size-arguments for the text can be properly
## investigated.
## WARNING: For this particular example the file will be saved in the
## active working directory of R.
.save_file <- "P1_fig_03.pdf"
pdf(file = .save_file)
grid.newpage()
pushViewport(viewport(
layout = grid.layout(6,3)))
print(dmbp_pn_plot_extra +
theme(legend.position = "none"),
vp = viewport(
layout.pos.row = 1,
layout.pos.col = 1:3))
##### The trhee points for the lagged pairs case
print(dmbp_pn_lag1_lower,
vp = viewport(
layout.pos.row = 2,
layout.pos.col = 1))
print(dmbp_pn_lag1_center,
vp = viewport(
layout.pos.row = 2,
layout.pos.col = 2))
print(dmbp_pn_lag1_upper,
vp = viewport(
layout.pos.row = 2,
layout.pos.col = 3))
dev.off()
## Crop the result. This approach requires that 'pdfcrop' is
## available on the system.
.crop_code <- sprintf("pdfcrop --margins 0 %s %s", .save_file, .save_file)
system(.crop_code)
rm(.crop_code, .save_file)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.