--- title: "Working with priors" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Working with priors} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.width = 7, fig.height = 5 ) ``` Internally, **adoptr** is built around the joint distribution of a test statistic and the unknown location parameter of interest given a sample size, i.e. $$ \mathcal{L}\big[(X_i, \theta)\,|\,n_i\big] $$ where $X_i$ is the stage-$i$ test statistic and $n_i$ the corresponding sample size. The distribution class for $X_i$ is defined by specifying a `DataDistribution` object, e.g., a normal distribution ```{r setup} library(adoptr) datadist <- Normal() ``` To completely specify the marginal distribution of $X_i$, the distribution of $\theta$ must also be specified. The classical case where $\theta$ is considered fixed, emerges as special case when a single parameter value has probability mass 1. ### Discrete priors The simplest supported prior class are discrete `PointMassPrior` priors. To specify a discrete prior, one simply specifies the vector of pivot points with positive mass and the vector of corresponding probability masses. E.g., consider an example where the point $\delta = 0.1$ has probability mass $0.4$ and the point $\delta = 0.25$ has mass $1 - 0.4 = 0.6$. ```{r discrete-prior} disc_prior <- PointMassPrior(c(0.1, 0.25), c(0.4, 0.6)) ``` For details on the provided methods, see `?DiscretePrior`. ### Continuous priors **adoptr** also supports arbitrary continuous priors with support on compact intervals. For instance, we could consider a prior based on a truncated normal via: ```{r} cont_prior <- ContinuousPrior( pdf = function(x) dnorm(x, mean = 0.3, sd = 0.2), support = c(-2, 3) ) ``` For details on the provided methods, see `?ContinuousPrior`. ### Conditioning In practice, the most important operation will be conditioning. This is important to implement type one and type two error rate constraints. Consider, e.g., the case of power. Typically, a power constraint is imposed on a single point in the alternative, e.g. using the constraint ```{r} Power(Normal(), PointMassPrior(.4, 1)) >= 0.8 ``` If uncertainty about the true response rate should be incorporated in the design, it makes sense to assume a continuous prior on $\theta$. In this case, the prior should be conditioned for the power constraint to avoid integrating over the null hypothesis: ```{r} Power(Normal(), condition(cont_prior, c(0, 3))) >= 0.8 ```