---
title: "woylier"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{woylier}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
```
The "woylier" package provides alternative method for generating a tour path by interpolating between d-D frames in p-D space rather than d-D planes. A tour path is a sequence of projection and we use interpolation method to produce the path. The \CRANpkg{tourr} package uses geodesic interpolation between planes. Geodesic interpolation path is the locally shortest path between planes with no within-plane spin. As a result of this method, the rendered target plane could be the rotated version of the target plane we wanted. This is not a problem when the structure we are looking can be identified without turning the axis around.
The "woylier" package implements the Givens interpolation paths method proposed by [Buja et al. (2005)](https://doi.org/10.1016/S0169-7161(04)24014-7) in R. This algorithm adapts Given’s matrix decomposition technique which allows the interpolation to be between frames rather than planes.
# Installation
You can install the development version of woylier from GitHub with:
```{r eval=FALSE}
# install.packages("remotes")
remotes::install_github("numbats/woylier")
```
```{r setup}
library(woylier)
library(geozoo)
library(ggplot2)
library(dplyr)
library(purrr)
```
# Path 1
In this example, we have 2 random 1D basis in 6D data space and the `givens_full_path()` function returns the intermediate interpolation step projections in given number of steps. The code chunk below demonstrates the interpolation between 2 random basis in 5 steps.
```{r}
# Generate 1D example
set.seed(2022)
p <- 6
base1 <- tourr::basis_random(p, d=1)
base2 <- tourr::basis_random(p, d=1)
base1
base2
givens_full_path(base1, base2, nsteps = 5)
```
# Path 2
In this example, we have 2 random 2D basis in 6D data space and the `givens_full_path()` function returns the intermediate interpolation step projections in given number of steps. The code chunk below demonstrates the interpolation between 2 random basis in 5 steps.
```{r}
# Generate 2D example
set.seed(2022)
p <- 6
base3 <- tourr::basis_random(p, d=2)
base4 <- tourr::basis_random(p, d=2)
base3
base4
givens_full_path(base3, base4, nsteps = 5)
```
# Examples
To see how to use this for examining projections of multivariate data, see [Batsaikhan, Cook, Laa (2024)](https://doi.org/10.48550/arXiv.2311.08181).