knitr::opts_chunk$set( collapse = TRUE, comment = "#>" )
knitr::opts_chunk$set( collapse = TRUE, comment = "#>", out.width = "100%", fig.asp = 0.7, fig.width = 12, fig.align = "center", cache = FALSE, external = FALSE ) library("ALASCA") library("data.table") library("ggplot2") n_time <- 5 n_id <- 100 n_variable <- 20 df <- rbindlist(lapply(seq(1,n_id), function(i_id) { rbindlist(lapply(seq(1,n_variable), function(i_variable) { r_intercept <- rnorm(1, sd = 5) i_group <- i_id %% 2 if (i_group == 1) { beta <- 2 + rnorm(1) } else { beta <- 3 + rnorm(1) } temp_data <- data.table( id = paste0("id_", i_id), group = paste0("group_", i_group), time = seq(1, n_time) - 1, variable = paste0("variable_", i_variable) ) if ((i_variable %% 4) == 0) { temp_data[, value := r_intercept + beta * time] } else if ((i_variable %% 4) == 1) { temp_data[, value := r_intercept - beta * time] } else if ((i_variable %% 4) == 2) { temp_data[, value := r_intercept + beta * abs(time - n_time/2)] } else { temp_data[, value := r_intercept - beta * abs(time - n_time/2)] } temp_data[, value := value + rnorm(n_time)] temp_data[, value := value * i_variable/2] temp_data })) })) df[, time := paste0("t_", time)] res <- ALASCA( df, value ~ time*group + (1|id) ) res_2 <- ALASCA( df, value ~ time*group + (1|id), separate_effects = TRUE )
We have aimed to implement a range of plotting options for ALASCA. In general, the plotting function is
plot(<object>, component = <component>, effect = <effect>, type = <type>, ...)
where <object>
is your ALASCA model, <component>
and <effect>
the components and effects of interest, and <type>
the plot type.
ALASCA can save the plots directly if you specify save = TRUE
when you initialize the ALASCA model. Otherwise, the plots are returned as ordinary ggplot2
objects and can be saved with ggsave()
.
Note that you can specify properties of the plot during plotting, e.g. specifying palette
:
plot(res, component = 1, effect = 1, type = 'effect', palette = c("red", "blue"))
The effect plot is the default plot showing both scores and loadings for the selected components/effects. You can select one effect and one component:
plot(res, component = 1, effect = 1, type = 'effect')
Or two components:
plot(res, component = c(1, 2), effect = 1, type = 'effect')
Or two effects (note: this requires a model with multiple effects):
plot(res_2, component = 1, effect = c(1, 2), type = 'effect')
Or even a combination of multiple components and effects:
plot(res_2, component = c(1,2), effect = c(1, 2), type = 'effect')
The effect plot consists of two parts: scores and loadings. You can get those components directly:
plot(res, component = 1, effect = 1, type = 'score')
And similarly for loadings:
plot(res, component = 1, effect = 1, type = 'loading')
Some journals require plots in grayscale (or require fees for colors). You can therefore ask for grayscale figures in ALASCA:
res_3 <- ALASCA( df, value ~ time*group + (1|id), plot.grayscale = TRUE ) plot(res_3, component = 1, effect = 1, type = 'effect')
You can specify theme etc. of the plots when you initialize the ALASCA model:
res_4 <- ALASCA( df, value ~ time*group + (1|id), plot.my_theme = theme_linedraw(), plot.palette = c("red", "blue") ) plot(res_4, component = 1, effect = 1, type = 'effect')
The color palette is by default made from the viridis palette, ending at 0.8: scales::viridis_pal(end = 0.8)(2)
. You can of course use the colors you want;
res_5 <- ALASCA( df, value ~ time*group + (1|id), plot.my_theme = theme_light(), validate = TRUE, n_validation_runs = 10, plot.palette = scales::brewer_pal(type = "qual")(2) ) plot(res_5, component = 1, effect = 1, type = 'effect')
To remove the ribbon, you can set plot.ribbon = FALSE
:
res_5 <- ALASCA( df, value ~ time*group + (1|id), plot.my_theme = theme_light(), validate = TRUE, n_validation_runs = 10, plot.palette = scales::brewer_pal(type = "qual")(2), plot.ribbon = FALSE ) plot(res_5, component = 1, effect = 1, type = 'effect')
You can also change these properties directly in the plot()
function:
plot(res_5, component = 1, effect = 1, type = 'effect', ribbon = TRUE, palette = scales::hue_pal()(2), my_theme = theme_classic())
or (x_angle
controls the rotation of the x axis labels, and x_h_just
is used to center them horizontally)
plot(res_5, component = 1, effect = 1, type = 'effect', grayscale = TRUE, x_angle = 0, x_h_just= 0.5 )
Some even prefer to have loadings along the x axis:
plot(res_5, component = 1, effect = 1, type = 'effect', x_angle = 90, x_h_just = 1, x_v_just = 0.5, flip_axis= FALSE )
Note: The plotting function remembers previous choices, so if you plotted component 1 in the previous plot, you have to specify which components to plot:
plot(res, component = seq(1,10), effect = 1, type = 'scree')
By default, only some variables are selected based on their loadings:
plot(res, component = 1, effect = 1, type = 'prediction')
You can ask for specific variables:
plot(res, component = 1, effect = 1, type = 'prediction', variable = c("variable_8", "variable_13", "variable_15"))
Or adjust the number of retrieved variables (note that we have to set variable = c()
for the plot function to forget the previous setting):
plot(res, component = 1, effect = 1, type = 'prediction', n_limit = 4, variable = c())
Visualize the distribution of the bootstrap runs:
res_6 <- ALASCA( df, value ~ time*group + (1|id), validate = TRUE, n_validation_runs = 100 ) plot(res_6, component = 1, effect = 1, type = 'histogram', n_bins = 30)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.