## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.width = 7,
  fig.height = 5
)

## ----eval = FALSE-------------------------------------------------------------
# install.packages("gipsDA")

## ----eval = FALSE-------------------------------------------------------------
# pak::pkg_install("AntoniKingston/gipsDA")

## -----------------------------------------------------------------------------
library(gipsDA)

## -----------------------------------------------------------------------------
set.seed(42)

train_id <- unlist(
  lapply(split(seq_len(nrow(iris)), iris$Species), sample, size = 35),
  use.names = FALSE
)

train <- iris[train_id, ]
test <- iris[-train_id, ]

## -----------------------------------------------------------------------------
fit <- gipslda(Species ~ ., data = train)

fit

## -----------------------------------------------------------------------------
pred <- predict(fit, test)

head(pred$class)
head(pred$posterior)

mean(pred$class == test$Species)

## ----model-hierarchy, echo = FALSE, fig.cap = "The diagram illustrates the hierarchical relationships between the models.", out.width = "95%"----
knitr::include_graphics("figures/models_hierarchy.png")

## -----------------------------------------------------------------------------
lda_map <- gipslda(
  Species ~ .,
  data = train,
  MAP = TRUE
)

lda_map

## -----------------------------------------------------------------------------
lda_avg <- gipslda(
  Species ~ .,
  data = train,
  MAP = FALSE
)

lda_avg

## ----eval = FALSE-------------------------------------------------------------
# fit_mh <- gipsqda(
#   Species ~ .,
#   data = train,
#   optimizer = "MH",
#   max_iter = 1000
# )

## -----------------------------------------------------------------------------
lda_fit <- gipslda(Species ~ ., data = train)
qda_fit <- gipsqda(Species ~ ., data = train)
joint_qda_fit <- gipsmultqda(Species ~ ., data = train)

## -----------------------------------------------------------------------------
lda_pred <- predict(lda_fit, test)
qda_pred <- predict(qda_fit, test)
joint_qda_pred <- predict(joint_qda_fit, test)

c(
  gipslda = mean(lda_pred$class == test$Species),
  gipsqda = mean(qda_pred$class == test$Species),
  gipsmultqda = mean(joint_qda_pred$class == test$Species)
)

## -----------------------------------------------------------------------------
print(lda_fit)

## -----------------------------------------------------------------------------
summary(lda_fit)

## -----------------------------------------------------------------------------
head(lda_pred$class)
head(lda_pred$posterior)

## -----------------------------------------------------------------------------
x <- as.matrix(iris[, 1:4])
grouping <- iris$Species

fit_matrix <- gipslda(x, grouping)

predict(fit_matrix, x[1:5, ])$class

## -----------------------------------------------------------------------------
qda_matrix <- gipsqda(x, grouping)
joint_qda_matrix <- gipsmultqda(x, grouping)

predict(qda_matrix, x[1:5, ])$class
predict(joint_qda_matrix, x[1:5, ])$class

## -----------------------------------------------------------------------------
fit <- gipslda(Species ~ ., data = train)
pred <- predict(fit, test)

mean(pred$class == test$Species)

