# in_bound: Returns whether a vector or each row of a matrix falls inside... In genscore: Generalized Score Matching Estimators

## Description

Returns whether a vector or each row of a matrix falls inside a domain.

## Usage

 `1` ```in_bound(x, domain) ```

## Arguments

 `x` A vector of length or a matrix of number of columns equal to `domain\$p` if `domain\$type != "simplex"`, or either `domain\$p` or `domain\$p-1` otherwise. `domain` A list returned from `make_domain()` that represents the domain.

## Details

Returns whether a vector or each row of a matrix falls inside a domain. If `domain\$type == "simplex"`, if the length/number of columns is `domain\$p`, returns `all(x > 0) && abs(sum(x) - 1) < domain\$simplex_tol`; if the dimension is `domain\$p-1`, returns `all(x > 0) && sum(x) < 1`.

## Value

A logical vector of length equal to the number of rows in `x` (`1` if `x` is a vector).

## 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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80``` ```p <- 30 n <- 10 # The 30-dimensional real space R^30, assuming probability of domain <- make_domain("R", p=p) in_bound(1:p, domain) in_bound(matrix(1:(p*n), ncol=p), domain) # The non-negative orthant of the 30-dimensional real space, R+^30 domain <- make_domain("R+", p=p) in_bound(matrix(1:(p*n), ncol=p), domain) in_bound(matrix(1:(p*n) * (2*rbinom(p*n, 1, 0.98)-1), ncol=p), domain) # x such that sum(x^2) > 10 && sum(x^(1/3)) > 10 with x allowed to be negative domain <- make_domain("polynomial", p=p, rule="1 && 2", ineqs=list(list("expression"="sum(x^2)>10", abs=FALSE, nonnegative=FALSE), list("expression"="sum(x^(1/3))>10", abs=FALSE, nonnegative=FALSE))) in_bound(rep((5/p)^3, p), domain) in_bound(rep((10/p)^3, p), domain) in_bound(rep((15/p)^3, p), domain) in_bound(rep((5/p)^(1/2), p), domain) in_bound(rep((10/p)^(1/2), p), domain) in_bound(rep((15/p)^(1/2), p), domain) # ([0, 1] v [2,3]) ^ p domain <- make_domain("uniform", p=p, lefts=c(0,2), rights=c(1,3)) in_bound(c(0.5, 2.5)[rbinom(p, 1, 0.5)+1], domain) in_bound(c(rep(0.5, p/2), rep(2.5, p/2)), domain) in_bound(c(rep(0.5, p/2), rep(2.5, p/2-1), 4), domain) # x such that {x1 > 1 && log(1.3) < x2 < 1 && x3 > log(1.3) && ... && xp > log(1.3)} domain <- make_domain("polynomial", p=p, rule="1 && 2 && 3", ineqs=list(list("expression"="x1>1", abs=FALSE, nonnegative=TRUE), list("expression"="x2<1", abs=FALSE, nonnegative=TRUE), list("expression"="exp(x)>1.3", abs=FALSE, nonnegative=FALSE))) in_bound(c(1.5, (log(1.3)+1)/2, rep(log(1.3)*2, p-2)), domain) in_bound(c(0.5, (log(1.3)+1)/2, rep(log(1.3)*2, p-2)), domain) in_bound(c(1.5, log(1.3)/2, rep(log(1.3)*2, p-2)), domain) in_bound(c(1.5, (log(1.3)+1)/2, rep(log(1.3)/2, p-2)), domain) # x in R_+^p such that {sum(log(x))<2 || (x1^(2/3)-1.3x2^(-3)<1 && exp(x1)+2.3*x2>2)} domain <- make_domain("polynomial", p=p, rule="1 || (2 && 3)", ineqs=list(list("expression"="sum(log(x))<2", abs=FALSE, nonnegative=TRUE), list("expression"="x1^(2/3)-1.3x2^(-3)<1", abs=FALSE, nonnegative=TRUE), list("expression"="exp(x1)+2.3*x2^2>2", abs=FALSE, nonnegative=TRUE))) in_bound(rep(exp(1/p), p), domain) in_bound(c(1, 1, rep(1e5, p-2)), domain) # x in R_+^p such that {x in R_+^p: sum_j j * xj <= 1} domain <- make_domain("polynomial", p=p, ineqs=list(list("expression"=paste(paste(sapply(1:p, function(j){paste(j, "x", j, sep="")}), collapse="+"), "<1"), abs=FALSE, nonnegative=TRUE))) in_bound(0.5/p/1:p, domain) in_bound(2/p/1:p, domain) in_bound(rep(1/p, p), domain) in_bound(rep(1/p^2, p), domain) # The (p-1)-simplex domain <- make_domain("simplex", p=p) x <- abs(matrix(rnorm(p*n), ncol=p)) x <- x / rowSums(x) in_bound(x, domain) # TRUE in_bound(x[,1:(p-1)], domain) # TRUE x2 <- x x2[,1] <- -x2[,1] in_bound(x2, domain) # FALSE since the first component is now negative in_bound(x2[,1:(p-1)], domain) # FALSE since the first component is now negative x3 <- x x3[,1] <- x3[,1] + domain\$simplex_tol * 10 in_bound(x3, domain) # FALSE since the rows do not sum to 1 in_bound(x3[,1:(p-1)], domain) # TRUE since the first (p-1) elts in each row still sum to < 1 x3[,1] <- x3[,1] + x3[,p] in_bound(x3[,1:(p-1)], domain) # FALSE since the first (p-1) elts in each row now sum to > 1 # The l-1 ball {sum(|x|) < 1} domain <- make_domain("polynomial", p=p, ineqs=list(list("expression"="sum(x)<1", abs=TRUE, nonnegative=FALSE))) in_bound(rep(0.5/p, p)*(2*rbinom(p, 1, 0.5)-1), domain) in_bound(rep(1.5/p, p)*(2*rbinom(p, 1, 0.5)-1), domain) ```

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