## ----setup, include=FALSE-----------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  message = FALSE,
  warning = FALSE,
  fig.align = "center"
)

## ----load-package-------------------------------------------------------------
library(riemannianStats)

## ----create-data--------------------------------------------------------------
df <- data.frame(
  X1 = c(0.0, 0.5, 0.2, 0.9, 1.2, 1.5, 4.8, 5.5, 5.2, 6.0),
  X2 = c(0.0, 0.1, 0.8, 0.9, 0.3, 0.7, 5.0, 5.1, 5.8, 5.6),
  X3 = c(0.1, 0.2, 0.1, 0.2, 0.3, 0.3, 5.0, 5.1, 4.9, 5.2),
  X4 = c(0.2, 0.0, 0.3, 0.2, 0.1, 0.3, 4.7, 4.8, 5.3, 5.4),
  X5 = c(0.0, 0.1, 0.0, 0.1, 0.2, 0.1, 4.9, 5.0, 5.1, 5.3),
  y = c(
    8.77, 9.09, 8.35, 25.00, -10.00,
    10.00, 12.47, 12.97, 12.31, 13.33
  ),
  row.names = c(
    "ind_1", "ind_2", "ind_3", "ind_4", "ind_5",
    "ind_6", "ind_7", "ind_8", "ind_9", "ind_10"
  )
)

df

## ----model-parameters---------------------------------------------------------
n.neighbors <- 3

## ----lm-classical-------------------------------------------------------------
model.lm <- lm(y ~ ., data = df)

summary(model.lm)

## ----lm-classical-results-----------------------------------------------------
y.hat <- model.lm$fitted.values

head(y.hat)

summary(model.lm)$r.squared

## ----lm-riem-umap-formula-----------------------------------------------------
fit.umap.formula <- riem.lm(
  y ~ .,
  data = df,
  n.neighbors = n.neighbors,
  similarities = "umap",
  min.dist = 0.1,
  metric = "euclidean"
)

fit.umap.formula

## ----prepare-riemannian-data--------------------------------------------------
data.analysis <- df[, c("X1", "X2", "X3", "X4", "X5")]

y <- df$y

## ----lm-riem-umap-separate----------------------------------------------------
fit.umap <- riem.lm(
  data = data.analysis,
  y = y,
  n.neighbors = n.neighbors,
  similarities = "umap",
  min.dist = 0.1,
  metric = "euclidean"
)

fit.umap

## ----lm-riem-umap-results-----------------------------------------------------
riem.results.umap <- data.frame(
  y.R = fit.umap$y.R,
  yhat.R = fit.umap$yhat.R,
  residual.R = fit.umap$residuals.R,
  weight = fit.umap$weights
)

riem.results.umap

## ----lm-riem-umap-coefficients------------------------------------------------
fit.umap$beta.R

fit.umap$R2.R

## ----lm-riem-umap-original-scale----------------------------------------------
orig.umap <- riem.original.scale(fit.umap)

orig.umap$table

orig.umap$yhat.original

## ----lm-riem-isomap-formula---------------------------------------------------
fit.isomap <- riem.lm(
  y ~ .,
  data = df,
  n.neighbors = n.neighbors,
  similarities = "isomap",
  metric = "euclidean"
)

fit.isomap

## ----lm-riem-isomap-results---------------------------------------------------
riem.results.isomap <- data.frame(
  y.R = fit.isomap$y.R,
  yhat.R = fit.isomap$yhat.R,
  residual.R = fit.isomap$residuals.R,
  weight = fit.isomap$weights
)

riem.results.isomap

## ----lm-riem-isomap-coefficients----------------------------------------------
fit.isomap$beta.R

fit.isomap$R2.R

## ----lm-riem-isomap-original-scale--------------------------------------------
orig.isomap <- riem.original.scale(fit.isomap)

orig.isomap$table

orig.isomap$yhat.original

## ----lm-riem-dbscan-formula---------------------------------------------------
fit.dbscan <- riem.lm(
  y ~ .,
  data = df,
  n.neighbors = n.neighbors,
  similarities = "dbscan",
  metric = "euclidean"
)

fit.dbscan

## ----lm-riem-dbscan-results---------------------------------------------------
riem.results.dbscan <- data.frame(
  y.R = fit.dbscan$y.R,
  yhat.R = fit.dbscan$yhat.R,
  residual.R = fit.dbscan$residuals.R,
  weight = fit.dbscan$weights
)

riem.results.dbscan

## ----lm-riem-dbscan-coefficients----------------------------------------------
fit.dbscan$beta.R

fit.dbscan$R2.R

## ----lm-riem-dbscan-original-scale--------------------------------------------
orig.dbscan <- riem.original.scale(fit.dbscan)

orig.dbscan$table

orig.dbscan$yhat.original

## ----compare-models-----------------------------------------------------------
comparison <- data.frame(
  Model = c(
    "Classical LM",
    "Riemannian LM - UMAP",
    "Riemannian LM - ISOMAP",
    "Riemannian LM - DBSCAN"
  ),
  R2 = c(
    summary(model.lm)$r.squared,
    fit.umap$R2.R,
    fit.isomap$R2.R,
    fit.dbscan$R2.R
  )
)

comparison

