From 5be86fef6950d3574f28857e8f7d4abd650dd3ae Mon Sep 17 00:00:00 2001 From: Niclas Date: Tue, 20 Jan 2026 15:13:27 +0100 Subject: [PATCH] add density plots --- scripts/plot_densities.R | 177 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 scripts/plot_densities.R diff --git a/scripts/plot_densities.R b/scripts/plot_densities.R new file mode 100644 index 0000000..8607982 --- /dev/null +++ b/scripts/plot_densities.R @@ -0,0 +1,177 @@ +# 1. Load functions and Libraries ---------------------------------------------- +source("./R/graphon_distribution.R") + +# 2. Set constants ------------------------------------------------------------- +withr::with_seed(42) # set seed in a local environment + +a0 <- c(0, 0) +a1 <- c(1.0) +a2 <- c(0.5, -0.3) + +N <- 400 # number of samples for X + +X1 = matrix(rnorm(N)) +X2 = matrix(rnorm(2 * N), ncol = 2) + + +# 3. Normally distributed v's -------------------------------------------------- +## 3.1 Plot a = 0 ============================================================== +# In this section we plot the conditional density p(u | x) for v ~ N(0,1) and +# a = (0, 0) +p1 <- create_cond_density(a0, dnorm, pnorm, X2) +givenX <- c(0, 0) +p1_plot <- \(x) p1(x, givenX) +plot.function(p1_plot, xlab="u", ylab="p(u |x) ") +title(main=expression("Conditional density for" ~ v %~% N(0, 1)), line=2) +title( + main = bquote( + a == (.(paste(a0, collapse = ", "))) ~ "," ~ + N == .(N) ~ "," ~ + x == (.(paste(givenX, collapse = ", "))) + ), + line = 1, + cex = 0.65 +) + +## 3.2 Plot a != 0, X != 0 ===================================================== +p2 <- create_cond_density(a2, dnorm, pnorm, X2) +givenX <- c(-0.5, 0.5) +p2_plot <- \(x) p2(x, givenX) +plot.function(p2_plot, xlab="u", ylab="p(u |x) ") +title(main=expression("Conditional density for" ~ v %~% N(0, 1)), line=2) +title( + main = bquote( + a == (.(paste(a2, collapse = ", "))) ~ "," ~ + N == .(N) ~ "," ~ + x == (.(paste(givenX, collapse = ", "))) + ), + line = 1, + cex = 0.65 +) + +## 3.3 Plot one dimensional X_i ================================================ +p3 <- create_cond_density(a1, dnorm, pnorm, X1) +givenX <- c(-0.5) +p3_plot <- \(x) p3(x, givenX) +plot.function(p3_plot, xlab="u", ylab="p(u |x) ") +title(main=expression("Conditional density for" ~ v %~% N(0, 1)), line=2) +title( + main = bquote( + a == (.(paste(a1, collapse = ", "))) ~ "," ~ + N == .(N) ~ "," ~ + x == (.(paste(givenX, collapse = ", "))) + ), + line = 1, + cex = 0.65 +) + +## 3.4 Plot v ~ N(0, 2) ======================================================== +dens_func <-\(x) dnorm(x, sd=sqrt(2)) +cdf <- \(x) pnorm(x, sd=sqrt(2)) +p4 <- create_cond_density(a1, dens_func, cdf, X1) +givenX <- c(-0.5) +p4_plot <- \(x) p4(x, givenX) +plot.function(p4_plot, xlab="u", ylab="p(u |x) ") +title(main=expression("Conditional density for" ~ v %~% N(0, 2)), line=2) +title( + main = bquote( + a == (.(paste(a1, collapse = ", "))) ~ "," ~ + N == .(N) ~ "," ~ + x == (.(paste(givenX, collapse = ", "))) + ), + line = 1, + cex = 0.65 +) + +# 4. Expontial distribution for v's -------------------------------------------- +## 4.1 One dimensional X_i ===================================================== +# This example has a jump in [0.14, 0.15]. +# The zero can not be explained and it's not a probability as: +# integrate(p5_plot, 0.15, 1, subdivisions = 500) +# => 0.952492 with absolute error < 0.00011 +lambda <- 1.0 +p5 <- create_cond_density(a1, dexp, pexp, X1) +givenX <- c(-0.5) +p5_plot <- \(x) p5(x, givenX) +plot.function(p5_plot, xlab="u", ylab="p(u |x) ") +title(main=expression("Conditional density for" ~ v %~% Exp(1)), line=2) +title( + main = bquote( + a == (.(paste(a1, collapse = ", "))) ~ "," ~ + N == .(N) ~ "," ~ + x == (.(paste(givenX, collapse = ", "))) + ), + line = 1, + cex = 0.65 +) + +## 4.2 Two dimensional X_i ===================================================== +lambda <- 1.0 +p6 <- create_cond_density(a2, dexp, pexp, X2) +givenX <- c(-0.5) +p6_plot <- \(x) p6(x, givenX) +plot.function(p6_plot, xlab="u", ylab="p(u |x) ") +title(main=expression("Conditional density for" ~ v %~% Exp(1)), line=2) +title( + main = bquote( + a == (.(paste(a2, collapse = ", "))) ~ "," ~ + N == .(N) ~ "," ~ + x == (.(paste(givenX, collapse = ", "))) + ), + line = 1, + cex = 0.65 +) + +## 4.3 Higher Rate of exponential distribtion ================================== +lambda <- 2.0 +dens_func <- \(x) dexp(x, rate=lambda) +cdf <- \(x) pexp(x, rate=lambda) +p7 <- create_cond_density(a2, dens_func, cdf, X2) +givenX <- c(-0.5, 0.5) +p7_plot <- \(x) p7(x, givenX) +plot.function(p7_plot, xlab="u", ylab="p(u |x) ") +title(main=expression("Conditional density for" ~ v %~% Exp(2.0)), line=2) +title( + main = bquote( + a == (.(paste(a2, collapse = ", "))) ~ "," ~ + N == .(N) ~ "," ~ + x == (.(paste(givenX, collapse = ", "))) + ), + line = 1, + cex = 0.65 +) + +# 5. Uniform Distribution ------------------------------------------------------ + +## Two dimensional X_i ========================================================= +p8 <- create_cond_density(a2, dunif, punif, X2) +givenX <- c(-0.5, 0.5) +p8_plot <- \(x) p8(x, givenX) +plot.function(p8_plot, xlab="u", ylab="p(u |x) ") +title(main=expression("Conditional density for" ~ v %~% U(0,1)), line=2) +title( + main = bquote( + a == (.(paste(a2, collapse = ", "))) ~ "," ~ + N == .(N) ~ "," ~ + x == (.(paste(givenX, collapse = ", "))) + ), + line = 1, + cex = 0.65 +) + +## 5.2 One dimensional X_i ===================================================== +p9 <- create_cond_density(a1, dunif, punif, X1) +givenX <- c(-0.5) +p9_plot <- \(x) p9(x, givenX) +plot.function(p9_plot, xlab="u", ylab="p(u |x) ") +title(main=expression("Conditional density for" ~ v %~% U(0,1)), line=2) +title( + main = bquote( + a == (.(paste(a1, collapse = ", "))) ~ "," ~ + N == .(N) ~ "," ~ + x == (.(paste(givenX, collapse = ", "))) + ), + line = 1, + cex = 0.65 +) +