---
title: "A quick tour of ppgmmga"
author:
- Alessio Serafini, Luca Scrucca
date: "`r format(Sys.time(), '%d %b %Y')`"
output:
rmarkdown::html_vignette:
toc: true
number_sections: false
# highlight: "monochrome"
css: "vignette.css"
vignette: >
%\VignetteIndexEntry{A quick tour of ppgmmga}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r setup, include=FALSE}
library(knitr)
opts_chunk$set(fig.align = "center",
out.width = "80%",
fig.width = 6, fig.height = 5,
dev.args = list(pointsize = 10),
par = TRUE, # needed for setting hook
collapse = TRUE, # collapse input & ouput code in chunks
message = FALSE,
warning = FALSE)
knit_hooks$set(par = function(before, options, envir)
{ if(before && options$fig.show != "none")
par(family = "sans", mar=c(4.1,4.1,1.1,1.1), mgp=c(3,1,0), tcl=-0.5)
})
```
# Introduction
An R package implementing a Projection Pursuit algorithm based on finite Gaussian Mixtures Models for density estimation using Genetic Algorithms (PPGMMGA) to maximise a Negentropy index.
The **PPGMMGA** algorithm provides a method to visualise high-dimensional data in a lower-dimensional space, with special reference to reveal clustering structures.
```{r, message = FALSE, echo=1}
library(ppgmmga)
cat(ppgmmga:::ppgmmgaStartupMessage(), sep="")
```
# Banknote data
```{r, fig.width = 7, fig.height = 6, out.width = "100%"}
library(mclust)
data("banknote")
X <- banknote[,-1]
Class <- banknote$Status
table(Class)
clPairs(X, classification = Class,
symbols = ppgmmga.options("classPlotSymbols"),
colors = ppgmmga.options("classPlotColors"))
```
# 1-dimensional PPGMMGA
```{r}
PP1D <- ppgmmga(data = X, d = 1, seed = 1)
PP1D
summary(PP1D)
```
```{r, out.width="60%", fig.width=6, fig.height=4}
plot(PP1D)
```
```{r, out.width="70%", fig.width=7, fig.height=4}
plot(PP1D, class = Class)
```
# 2-dimensional PPGMMGA
```{r}
PP2D <- ppgmmga(data = X, d = 2, seed = 1)
summary(PP2D)
summary(PP2D$GMM)
```
```{r}
plot(PP2D$GA)
```
```{r}
plot(PP2D)
```
```{r, fig.width = 7, fig.height = 5}
plot(PP2D, class = Class, drawAxis = FALSE)
```
# 3-dimensional PPGMMGA
```{r}
PP3D <- ppgmmga(data = X, d = 3,
center = TRUE, scale = FALSE,
gatype = "gaisl",
options = ppgmmga.options(numIslands = 2),
seed = 1)
summary(PP3D)
```
```{r}
plot(PP3D$GA)
```
```{r, fig.width = 7, fig.height = 6, out.width = "100%"}
plot(PP3D)
```
```{r, fig.width = 7, fig.height = 6, out.width = "100%"}
plot(PP3D, class = Class)
```
```{r, fig.width = 6, fig.height = 5}
plot(PP3D, dim = c(1,2))
```
```{r, fig.width = 7, fig.height = 5, out.width = "90%"}
plot(PP3D, dim = c(1,3), class = Class)
```
```{r, eval=FALSE}
# A rotating 3D plot can be obtained using
if(!require("msir")) install.packages("msir")
msir::spinplot(PP3D$Z, markby = Class,
pch.points = c(20,17),
col.points = ppgmmga.options("classPlotColors")[1:2])
```
# References
Scrucca L, Serafini A (2019).
"Projection pursuit based on Gaussian mixtures and evolutionary algorithms."
*Journal of Computational and Graphical Statistics*, 28(4), 847–860.
.
----
```{r}
sessionInfo()
```