The goal of scorematchingad
is to enable fast implementation of score matching estimators through the use of automatic differentiation in the CppAD library.
Such implementation is best done by either contributing to this package or creating a new package that links to this package. On linux with the gcc
compiler it is possible to create estimators for new models interactively using customll()
(I am pondering how it is that this feature only works on linux with gcc).
See the file DESCRIPTION
for a slightly longer description, and ./R/scorematchingad-package.R
(equivalently help(scorematchingad, scorematchingad)
from within R
) for an even longer description. The built-in help for R
packages is well populated.
You can install the development version of scorematchingad from GitHub with:
# install.packages("devtools")
devtools::install_github("kasselhingee/scorematchingad")
Some models are already incorporated into scorematchingad
. Below is an example of estimating the Polynomially-Tilted Pairwise Interaction model (Scealy and Wood, 2023) for compositional data:
library(scorematchingad)
model <- rppi_egmodel(100)
estalr <- ppi(model$sample,
paramvec = ppi_paramvec(betap = -0.5, p = ncol(model$sample)),
trans = "alr")
This is an example of obtaining a tape of the score matching discrepancy of a custom likelihood for compositional data, which most naturally lies on the simplex:
myll <- customll("a1type dirichlet(const veca1 &u, const veca1 &beta) {
size_t d = u.size();
a1type y(0.); // initialize summation at 0
for(size_t i = 0; i < d; i++)
{ y += beta[i] * log(u[i]);
}
return y;
}")
tapes <- buildsmdtape("sim", "identity", "sim",
myll, rep(1/3, 3), rep(NA, 3),
bdryw="minsq", acut = 0.01)
wrap
and as
for veca1
, mata1
etc except in RcppExports.cpp
. This makes sure that the speciailsations definitions are not duplicated for each .cpp
file in your ./src
directory. In practise you can get the scorematchingad
types by including just the _forward.h
header file.Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.