library(simlandr)
Here comes the central purpose of simlandr
: constructing the potential landscapes from simulation results.
The landscape function is calculated based on the steady-state distribution of the system:
\[U = -\ln P_\textrm{SS}\]
My colleagues and I recently wrote an article about the theoretical background of this method. You can read the preprint at https://psyarxiv.com/49xyg/.
simlandr
provides a set of tools to construct 2d, 3d, and 4d landscapes from single or multiple simulation results. These methods will be illustrated in the following sections.
Frequently used parameters for the family of landscape functions:
x
,y
,z
,rols
,cols
,fr
: the variable names for plot dimensions; from
,to
(for 2d landscapes), lims
(for 3d and 4d landscapes): the range of axes; adjust
(for 2d landscapes), h
(for 3d and 4d landscapes): the level of smoothness; Umax
: the maximum displayed value of potential.
The landscapes in this section are only from a single simulation. We first make a simulation series for illustration.
<- sim_fun_test(
single_test par1 = list(var1 = 1),
par2 = list(var2 = 1, var3 = 0)
)
The result of the landscape functions is a landscape
object, which contains the landscape plot as well as the smooth distributions that are used to calculate the landscapes. Plots without z-axis are built with ggplot2
package, while plots with z-axis are built with plotly
package. These plots can also be modified using ggplot2
or plotly
functions.
You can use plot(l)
to access those plots. For some types of landscape
s, there are multiple types of plots available. Use plot(l, index = 2)
or plot(l, index = 3)
, etc. to access those plots.
Below are the examples of available plots. The meaning of the parameters can be found on the helping page of each function.
<- make_2d_density(single_test, x = "out1", from = -2, to = 2, adjust = 1)
l_single_2d plot(l_single_2d)
<- make_3d_static(single_test, x = "out1", y = "out2", lims = c(-3, 3, -3, 3), h = 0.01, kde_fun = "ks")
l_single_3d #> Calculating the smooth distribution...
#> Done!
#> Making the plot...
#> Done!
#> Making the 2d plot...
#> Done!
plot(l_single_3d, 1)
<- make_4d_static(single_test, x = "out1", y = "out2", z = "out3", lims = c(-3, 3, -3, 3, -3, 3), h = 0.01)
l_single_4d #> Calculating the smooth distribution...
#> Done!
#> Making the plot...
#> Done!
plot(l_single_4d) %>% plotly::layout(scene = list(zaxis = list(range = c(-3, 3))))
The landscapes in the section are built from batch simulation results. The following two data sets will be used to illustrate the functions. The difference is that batch_test_result
only contains one varying parameter, whereas batch_test_result2
contains two.
<- new_var_set()
batch_test
<- batch_test %>%
batch_test add_var("par2", "var3", 0, 0.5, 0.1)
<- make_var_grid(batch_test)
batch_test_grid
<- batch_simulation(batch_test_grid, sim_fun_test,
batch_test_result default_list = list(
par1 = list(var1 = 0),
par2 = list(var2 = 0, var3 = 0)
),bigmemory = FALSE
)
batch_test_result#> Output(s) from 6 simulations.
<- new_var_set()
batch_test2 <- batch_test2 %>%
batch_test2 add_var("par1", "var1", -0.2, 0.2, 0.2) %>%
add_var("par2", "var2", -0.2, 0.2, 0.2)
<- make_var_grid(batch_test2)
batch_test_grid2
<- batch_simulation(batch_test_grid2, sim_fun_test,
batch_test_result2 default_list = list(
par1 = list(var1 = 0),
par2 = list(var2 = 0, var3 = 0)
),bigmemory = FALSE
)
batch_test_result2#> Output(s) from 9 simulations.
Below are the examples of available plots.
<- make_2d_matrix(batch_test_result, x = "out1", cols = "var3", from = -3, to = 3, adjust = 0.1)
l_batch_2d_m1 #> Making the plot...
#> Done!
plot(l_batch_2d_m1)
<- make_2d_matrix(batch_test_result2, x = "out1", rows = "var1", cols = "var2", from = -1, to = 1, adjust = 0.1)
l_batch_2d_m2 #> Making the plot...
#> Done!
plot(l_batch_2d_m2)
<- make_3d_matrix(batch_test_result, x = "out1", y = "out2", cols = "var3", lims = c(-3, 3, -3, 3), h = 0.001, kde_fun = "ks", Umax = 10)
l_batch_3d_m1 #> Making the 2d plot...
#> Done!
plot(l_batch_3d_m1)
<- make_3d_matrix(batch_test_result2, x = "out1", y = "out2", rows = "var1", cols = "var2", lims = c(-3, 3, -3, 3), h = 0.001, kde_fun = "ks", Umax = 10)
l_batch_3d_m2 #> Making the 2d plot...
#> Done!
plot(l_batch_3d_m2)
This part is computational and storage expensive thus not evaluated in the released vignette. You can run it on your device to see how the function produces animations. gifski
package is needed to show the 3d (x, y, color) animation.
<- make_3d_animation(batch_test_result, x = "out1", y = "out2", fr = "var3", Umax = 20, lims = c(-3, 3, -3, 3), h = 0.002)
l_batch_3d_a
plot(l_batch_3d_a, 1)
plot(l_batch_3d_a, 2)
plot(l_batch_3d_a, 3)