---
title: "Comparing faces"
author: "Alexander (Sasha) Pastukhov"
date: "`r Sys.Date()`"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Comparing faces}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r setup, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

library(TriDimRegression)
library(dplyr)
library(ggplot2)
library(tidyr)
```


Tridimensional regression can be used to compare face similarity via R2 based on 3D landmarks. 

```r
faces <- 
  list("M010"=Face3D_M010,
      "M101"=Face3D_M101,
      "M244"=Face3D_M244,
      "M92"=Face3D_M92,
      "W070"=Face3D_W070,
      "W097"=Face3D_W097,
      "W182"=Face3D_W182,
      "W243"=Face3D_W243)

face_comparison <-
  dplyr::as_tibble(t(combn(names(faces), 2)), 
                   .name_repair = function(x){c("Face1", "Face2")}) %>%
  group_by(Face1, Face2) %>%
  nest() %>%
  mutate(Fit = purrr::map2(Face1, 
                           Face2, 
                           ~fit_transformation_df(faces[[.x]],
                                                  faces[[.y]],
                                                  transformation ='translation',
                                                  refresh=0)))

face_R2 <-
  face_comparison %>%
  mutate(R2 = purrr::map(Fit, ~R2(.))) %>%
  select(Face1, Face2, R2) %>%
  unnest(cols=c(R2)) %>%
  arrange(desc(R2))

knitr::kable(face_R2, digits = c(0, 0, 3, 3, 3))
```

```{r echo=FALSE}
face_R2 <- readRDS("face_R2.RData")
knitr::kable(face_R2, digits = c(0, 0, 3, 3, 3))
```


```{r fig.align='center', out.width = '100%', fig.width=8, fig.asp=0.9}
ggplot(data=face_R2, aes(x=Face1, y=Face2, size=R2, color=R2)) + 
  geom_point()
```

.
