---
title: "demo"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{demo}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
This is a demonstration of the SparseVFC algorithm. This demonstration was adapted from the script in https://github.com/jiayi-ma/VFC.
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
```
Import related packages.
```{r}
library(SparseVFC)
library(ggplot2)
library(dplyr)
library(tibble)
```
Load and normalize the data.
```{r}
data(church)
X <- church$X
Y <- church$Y
CorrectIndex <- church$CorrectIndex
nX <- norm_vecs(X)
nY <- norm_vecs(Y)
```
SparseVFC.
```{r}
set.seed(1614)
VecFld <- SparseVFC(nX, nY - nX, silent = FALSE)
```
Make some samples for drawing the victor field.
```{r}
vec <- expand.grid(x = seq(-1.2, 1.2, 0.2), y = seq(-1.2, 1.2, 0.2))
vec <- vec %>%
rowwise() %>%
mutate(v = list(predict(VecFld, c(x, y)))) %>%
mutate(
vx = v[1],
vy = v[2]
)
```
The accuracy for the algorithm.
```{r}
tibble(
correct = 1:126 %in% CorrectIndex,
VFC = 1:126 %in% VecFld$VFCIndex
) %>% table()
```
(Recall: $59/(59+1) = 0.9833$; precision: $59/(59+10) = 0.8551$. Those two performance measures are the same as reported in Zhao et al., 2011 , indicating a correct replication.)
Plot the output vector field. (red arrows: correct arrows in the original data; black arrows: incorrect vectors in the original data; gray arrows: learned vector field.)
```{r}
library(grid)
ggplot(vec, aes(x = x, y = y)) +
geom_segment(aes(xend = x + vx, yend = y + vy),
arrow = arrow(length = unit(0.1, "cm")), linewidth = 0.25, alpha = 0.2
) +
geom_segment(
data = cbind(nX, nY - nX) %>% as.data.frame() %>% `colnames<-`(c("x", "y", "vx", "vy")),
aes(xend = x + vx, yend = y + vy),
arrow = arrow(length = unit(0.1, "cm")), linewidth = 0.25
) +
geom_segment(
data = cbind(nX, nY - nX) %>% as.data.frame() %>% `colnames<-`(c("x", "y", "vx", "vy")) %>% slice(CorrectIndex),
aes(xend = x + vx, yend = y + vy),
arrow = arrow(length = unit(0.1, "cm")), linewidth = 0.25, color = "red"
)
```