get_g0: Calculates the l2 distance to the boundary of the domain and... In genscore: Generalized Score Matching Estimators

Description

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

Usage

 `1` ```get_g0(domain, C) ```

Arguments

 `domain` A list returned from `make_domain()` that represents the domain. `C` A positive number, cannot be `Inf` if `domain\$type == "R"`. If not `Inf`, the l2 distance will be truncated to `C`, i.e. the function returns `pmin(g0(x), C)` and its gradient.

Details

Calculates the l2 distance to the boundary of the domain, with the distance truncated above by a constant `C`. Matches the `g0` function and its gradient from Liu (2019) if `C == Inf` 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(domain, 1)(x) domain <- make_domain("R+", p=p) x <- gen(n, "gaussian", FALSE, eta, K, domain, 100) get_g0(domain, 1)(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(domain, 1)(x) domain <- make_domain("simplex", p=p) x <- gen(n, "gaussian", FALSE, eta, K, domain, 100) max(abs(get_g0(domain, 1)(x)\$g0 - get_g0(domain, 1)(x[,-p])\$g0)) max(abs(get_g0(domain, 1)(x)\$g0d - get_g0(domain, 1)(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(domain, 1)(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(domain, 1)(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(domain, 1)(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(domain, 1)(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(domain, 1)(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(domain, 1)(x) ```

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