---
title: "SLSEdesign"
subtitle: "Optimal Design under Second-order Least Squares Estimator"
author: | 
  | Chi-Kuang Yeh and Julie Zhou
  | University of Waterloo and University of Victoria
date: "`r Sys.Date()`"
output:
  rmarkdown::html_vignette:
    toc: true
    fig_caption: yes
vignette: >
  %\VignetteIndexEntry{SLSEdesign}
  %\VignetteEncoding{UTF-8}
  %\VignetteEngine{knitr::rmarkdown}
---

<!-- latex macros -->
\newcommand{\cv}{\operatorname{cv}}

```{r setup, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  cache = TRUE
)
original <- options(digits = 3)
```

# Installation

```{r load package}
# required dependencies
require(SLSEdesign)
require(CVXR)
```

# Specify the input for the program

1. **N**: Number of design points

2. **S**: The design space

3. **tt**: The level of skewness

4. **$\theta$**: The parameter vector

5. **FUN**: The function for calculating the derivatives of the given model

```{r Define inputs, cache = TRUE}
N <- 21
S <- c(-1, 1)
tt <- 0
theta <- rep(1, 4)

poly3 <- function(xi,theta){
    matrix(c(1, xi, xi^2, xi^3), ncol = 1)
}

u <- seq(from = S[1], to = S[2], length.out = N)

res <- Aopt(N = N, u = u, tt = tt, FUN = poly3, 
            theta = theta)
```


## Manage the outputs

Showing the optimal design and the support points

```{r output}
res$design
```

Or we can plot them

```{r weight}
plot_weight(res$design)
```

## Plot the directional derivative to use the equivalence theorem for  3rd order polynomial models

### D-optimal design
```{r}
poly3 <- function(xi,theta){
    matrix(c(1, xi, xi^2, xi^3), ncol = 1)
}
design <- data.frame(location = c(-1, -0.447, 0.447, 1),
 weight = rep(0.25, 4))
u = seq(-1, 1, length.out = 201)
plot_direction_Dopt(u, design, tt=0, FUN = poly3,
  theta = rep(0, 4))
```

### A-optimal design

```{r}
poly3 <- function(xi, theta){
  matrix(c(1, xi, xi^2, xi^3), ncol = 1)
}
design <- data.frame(location = c(-1, -0.464, 0.464, 1),
                    weight = c(0.151, 0.349, 0.349, 0.151))
u = seq(-1, 1, length.out = 201)
plot_direction_Aopt(u, design, tt=0, FUN = poly3, theta = rep(0,4))
```

```{r include = FALSE}
options(original) # reset to old settings
```