This vignette shows how to use the basic functionalities of the `gplite` package. Weâ€™ll start with a simple regression example, and then illustrate the usage with non-Gaussian likelihoods. This vignette assumes that youâ€™re already familiar Gaussian processes (GPs), and so we shall not focus on the mathematical details. To read more about GPs, see Rasmussen and Williams (2006).

# 1 Regression

``````library(gplite)
library(ggplot2)
theme_set(theme_classic())``````

Let us simulate some toy regression data.

``````# create some toy 1d regression data
set.seed(32004)
n <- 200
sigma <- 0.1
x <- rnorm(n)
y <- sin(3*x)*exp(-abs(x)) +  rnorm(n)*sigma
ggplot() +
geom_point(aes(x=x,y=y), size=0.5) +
xlab('x') + ylab('y') + xlim(-4,4)``````

Set up the model with squared exponential covariance function and Gaussian likelihood. With a Gaussian observation model, we can compute the posterior analytically for a given set of hyperparameters.

So letâ€™s first create he model. Weâ€™ll use the squared exponential covariance function for this example.

``gp <- gp_init(cfs = cf_sexp(), lik = lik_gaussian())``

Thereâ€™s three hyperparameters in the model. We can see the summary of the model by printing it.

``print(gp)``
``````## Likelihood:
##    lik_gaussian(sigma = 0.5)
## Covariance functions:
##    cf_sexp(lscale = 0.3; magn = 1)
## Method:
##    method_full
## Latent approximation:
##    approx_laplace``````

We can optimize the hyperparameters to the maximum marginal likelihood solution using `gp_optim`.

``gp <- gp_optim(gp, x, y)``

Letâ€™s print out the model and the hyperparameters after optimization:

``print(gp)``
``````## Likelihood:
##    lik_gaussian(sigma = 0.098)
## Covariance functions:
##    cf_sexp(lscale = 0.424; magn = 0.332)
## Method:
##    method_full
## Latent approximation:
##    approx_laplace``````

We can easily make predictions with the fitted model using function `gp_pred`. So letâ€™s predict and visualize the results

``````# compute the predictive mean and variance in a grid of points
xt <- seq(-4,4,len=150)
pred <- gp_pred(gp, xt, var=T)

# visualize
mu <- pred\$mean
lb <- pred\$mean - 2*sqrt(pred\$var)
ub <- pred\$mean + 2*sqrt(pred\$var)
ggplot() +
geom_ribbon(aes(x=xt, ymin=lb, ymax=ub), fill='lightgray') +
geom_line(aes(x=xt, y=mu), size=1) +
geom_point(aes(x=x, y=y), size=0.5) +
xlab('x') + ylab('y')``````