knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  eval = FALSE
)
library(mlanimate)
set_theme()
p <- 0.5
mu_0 <- c(0, 2)
sigma_0 <- matrix(c(1, 0, 0, 1.5), nrow = 2)
mu_1 <- c(2, 0)
sigma_1 <- matrix(c(1.5, -0.5, -0.5, 1), nrow = 2)

n <- 6000
set.seed(31415)
sample_mvn <- new_sample_mvn(n,
                             mu_0, sigma_0,
                             mu_1, sigma_1,
                             p)

x_min <- -3
x_max <- 5
y_min <- -3
y_max <- 5
density_mvn <- new_density_mvn(mu_0, sigma_0,
                               mu_1, sigma_1,
                               p,
                               x_min, x_max,
                               y_min, y_max)

ggplot() +
    layer_sample(sample_mvn)

ggplot() +
    layer_density(density_mvn, z = p_0_xy) +
    layer_density(density_mvn, z = p_1_xy)

ggplot() +
    layer_density(density_mvn, z = p_0_xy, alpha = 0.5) +
    layer_density(density_mvn, z = p_1_xy, alpha = 0.5) +
    layer_optimal(density_mvn)
set.seed(31415)
p <- 0.5
mu_0 <- c(0, 2)
sigma_0 <- matrix(c(1.5, -0.5, -0.5, 1), nrow = 2)

make_mu <- function(x) {
    matrix(c(cos(x), sin(x)), nrow = 1)
}

make_density <- function(...)
    new_density_mvn(mu_0, sigma_0,
                    make_mu(...), sigma_0,
                    p,
                    -4, 4, -4, 5)

make_sample <- function(...)
    new_sample_mvn(n,
                   mu_0, sigma_0,
                   make_mu(...), sigma_0,
                   p)


steps <- 50
nframes <- 50
fps <- 10
xs <- list(x = seq(0.01,
                   2*pi-0.01,
                   length = steps))
new_DensityFrameSequence(density_fun = make_density,
                         params = xs,
                         method = identity) %>%
    new_Animation() %>%
    animate(nframes = nframes,
            fps = fps)
anim_save("/home/jovyan/work/mlanimate/animations/linear_mean.gif")
set.seed(31415)
p <- 0.5
mu_0 <- c(0, 2)
sigma_0 <- matrix(c(1.5, -0.5, -0.5, 1), nrow = 2)
sigma_1 <- matrix(c(1, 0.75, 0.75, 1.25), nrow = 2)

make_mu <- function(x) {
    matrix(c(cos(x), sin(x)), nrow = 1)
}

make_density <- function(...)
    new_density_mvn(mu_0, sigma_0,
                    make_mu(...), sigma_1,
                    p,
                    -3.5, 4.5, -4, 5)

steps <- 50
nframes <- 50
fps <- 10
xs <- list(x = seq(0.01,
                   2*pi-0.01,
                   length = steps))

new_DensityFrameSequence(density_fun = make_density,
                         params = xs,
                         method = identity) %>%
    new_Animation() %>%
    animate(nframes = nframes,
            fps = fps)

anim_save("/home/jovyan/work/mlanimate/animations/quadratic_mean.gif")
fit_and_predict_qda <- function(sample, density, ...) {
    fit_qda <- MASS::qda(class ~ x + y, data = sample)
    pred_qda <- predict(fit_qda, newdata = density)
    density_qda <- cbind(density, "fitted" = pred_qda$posterior[, "1"])
    density_qda
}

new_FittedFrameSequence(sample_frame = sample_mvn,
                        density_frame = density_mvn,
                        fit_and_predict = fit_and_predict_qda,
                        delta = 10,
                        start = 100) %>%
    new_Animation(animation_frame) %>%
    animate(animation)
anim_save("/home/jovyan/work/mlanimate/animations/fitting_qda.gif")
fit_and_predict_qda <- function(sample, density, ...) {
    fit_qda <- MASS::qda(class ~ x + y, data = sample)
    pred_qda <- predict(fit_qda, newdata = density)
    density_qda <- cbind(density, "fitted" = pred_qda$posterior[, "1"])
    density_qda
}

new_FittedFrameSequence(sample_frame = sample_mvn,
                        density_frame = density_mvn,
                        fit_and_predict = fit_and_predict_qda,
                        delta = 10,
                        start = 100) %>%
    new_Animation(animation_frame) %>%
    animate(animation)
anim_save("/home/jovyan/work/mlanimate/animations/fitting_qda.gif")


ryanholbrook/mlanimate documentation built on March 16, 2020, 4:34 p.m.