# get_g0_ada: Adaptively truncates the l2 distance to the boundary of the... In genscore: Generalized Score Matching Estimators

## Description

Adaptively truncates the l2 distance to the boundary of the domain and its gradient for some domains.

## Usage

 `1` ```get_g0_ada(domain, percentile) ```

## Arguments

 `domain` A list returned from `make_domain()` that represents the domain. `percentile` A number between 0 and 1, the percentile. The returned l2 distance will be truncated to its `percentile`-th quantile, i.e. the function returns `pmin(g0(x), stats::quantile(g0(x), percentile))` and its gradient. The quantile is calculated using finite values only, and if no finite values exist the quantile is set to 1.

## Details

Calculates the l2 distance to the boundary of the domain, with the distance truncated above at a specified quantile. Matches the `g0` function and its gradient from Liu (2019) if `percentile == 1` and domain is bounded. Currently only R, R+, simplex, uniform and polynomial-type domains of the form sum(x^2) <= d or sum(x^2) >= d or sum(abs(x)) <= d are implemented.

## Value

A function that takes `x` and returns a list of a vector `g0` and a matrix `g0d`.

## Examples

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51``` ```n <- 15 p <- 5 K <- diag(p) eta <- numeric(p) domain <- make_domain("R", p=p) x <- gen(n, "gaussian", FALSE, eta, K, domain, 100) get_g0_ada(domain, 0.3)(x) domain <- make_domain("R+", p=p) x <- gen(n, "gaussian", FALSE, eta, K, domain, 100) get_g0_ada(domain, 0.3)(x) domain <- make_domain("uniform", p=p, lefts=c(-Inf,-3,3), rights=c(-5,1,Inf)) x <- gen(n, "gaussian", FALSE, eta, K, domain, 100) get_g0_ada(domain, 0.6)(x) domain <- make_domain("simplex", p=p) x <- gen(n, "gaussian", FALSE, eta, K, domain, 100) max(abs(get_g0_ada(domain, 0.4)(x)\$g0 - get_g0_ada(domain, 0.4)(x[,-p])\$g0)) max(abs(get_g0_ada(domain, 0.4)(x)\$g0d - get_g0_ada(domain, 0.4)(x[,-p])\$g0d)) domain <- make_domain("polynomial", p=p, ineqs= list(list("expression"="sum(x^2)>1.3", "nonnegative"=FALSE, "abs"=FALSE))) x <- gen(n, "gaussian", FALSE, eta, K, domain, 100) get_g0_ada(domain, 0.5)(x) domain <- make_domain("polynomial", p=p, ineqs= list(list("expression"="sum(x^2)>1.3", "nonnegative"=TRUE, "abs"=FALSE))) x <- gen(n, "gaussian", FALSE, eta, K, domain, 100) get_g0_ada(domain, 0.7)(x) domain <- make_domain("polynomial", p=p, ineqs= list(list("expression"="sum(x^2)<1.3", "nonnegative"=FALSE, "abs"=FALSE))) x <- gen(n, "gaussian", FALSE, eta, K, domain, 100) get_g0_ada(domain, 0.6)(x) domain <- make_domain("polynomial", p=p, ineqs= list(list("expression"="sum(x^2)<1.3", "nonnegative"=TRUE, "abs"=FALSE))) x <- gen(n, "gaussian", FALSE, eta, K, domain, 100) get_g0_ada(domain, 0.25)(x) domain <- make_domain("polynomial", p=p, ineqs= list(list("expression"="sum(x)<1.3", "nonnegative"=FALSE, "abs"=TRUE))) x <- gen(n, "gaussian", FALSE, eta, K, domain, 100) get_g0_ada(domain, 0.37)(x) domain <- make_domain("polynomial", p=p, ineqs= list(list("expression"="sum(x)<1.3", "nonnegative"=TRUE, "abs"=TRUE))) x <- gen(n, "gaussian", FALSE, eta, K, domain, 100) get_g0_ada(domain, 0.45)(x) ```

genscore documentation built on April 28, 2020, 1:06 a.m.