knitr::opts_chunk$set( collapse = TRUE, comment = "#>", tidy = "styler" )

We have two objectives
1. Demonstrate how **SpatPCA** captures the most dominant spatial pattern of variation based on different signal-to-noise ratios.
2. Represent how to use **SpatPCA** for one-dimensional data

library(SpatPCA) library(ggplot2) library(dplyr) library(tidyr) library(gifski) base_theme <- theme_classic(base_size = 18, base_family = "Times")

The underlying spatial pattern below indicates realizations will vary dramatically at the center and almost unchange at the both ends of the curve.

set.seed(1024) position <- matrix(seq(-5, 5, length = 100)) true_eigen_fn <- exp(-position^2) / norm(exp(-position^2), "F") data.frame(position = position, eigenfunction = true_eigen_fn) %>% ggplot(aes(position, eigenfunction)) + geom_line() + base_theme

We want to generate 100 random sample based on - The spatial signal for the true spatial pattern is distributed normally with $\sigma=20$ - The noise follows the standard normal distribution.

realizations <- rnorm(n = 100, sd = 20) %*% t(true_eigen_fn) + matrix(rnorm(n = 100 * 100), 100, 100)

We can see simulated central realizations change in a wide range more frequently than the others.

for (i in 1:100) { plot(x = position, y = realizations[i, ], ylim = c(-10, 10), ylab = "realization") }

`SpatPCA::spatpca`

cv <- spatpca(x = position, Y = realizations) eigen_est <- cv$eigenfn

There are two comparison remarks
1. Two estimates are similar to the true eigenfunctions
2. **SpatPCA** can perform better at the both ends.

data.frame(position = position, true = true_eigen_fn, spatpca = eigen_est[, 1], pca = svd(realizations)$v[, 1]) %>% gather(estimate, eigenfunction, -position) %>% ggplot(aes(x = position, y = eigenfunction, color = estimate)) + geom_line() + base_theme

realizations <- rnorm(n = 100, sd = 3) %*% t(true_eigen_fn) + matrix(rnorm(n = 100 * 100), 100, 100)

It is hard to see a crystal clear spatial pattern via the simluated sample shown below.

for (i in 1:100) { plot(x = position, y = realizations[i, ], ylim = c(-10, 10), ylab = "realization") }

The following panel indicates that **SpatPCA** outperforms to PCA visually when the signal-to-noise ratio is quite lower.

cv <- spatpca(x = position, Y = realizations) eigen_est <- cv$eigenfn data.frame(position = position, true = true_eigen_fn, spatpca = eigen_est[, 1], pca = svd(realizations)$v[, 1]) %>% gather(estimate, eigenfunction, -position) %>% ggplot(aes(x = position, y = eigenfunction, color = estimate)) + geom_line() + base_theme

**Any scripts or data that you put into this service are public.**

Embedding an R snippet on your website

Add the following code to your website.

For more information on customizing the embed code, read Embedding Snippets.