[R] boundary check

Feng Li feng.li at stat.su.se
Fri Sep 24 14:17:59 CEST 2010


Thanks. I agree with you that the speed and memory issues might be
(actually is) a big problem for big dimensions. It is interesting to
know to solve this by using linear programming. Buy the way, it seems
a potential bug in your function if you try this


> X <- matrix(rnorm(50), 10, 5)
> x_i<-X[1,,drop=FALSE]
> isin.chull(x_i,X)
Error in A.out[, basic] <- iden(M) : subscript out of bounds

Or I must be wrong somewhere.


Feng


On Sep 24, 12:39 pm, Robin Hankin <rk... at cam.ac.uk> wrote:
> Hello
>
> convex hulls in large numbers of dimensions are hard.
>
> For your problem, though, one can tell whether a given
> point is inside or outside by using linear programming:
>
> > X <- matrix(rnorm(50), 10, 5)
> > x_i <- matrix(rnorm(5), 1, 5)
> > isin.chull
>
> function(candidate,p,plot=FALSE,give.answers=FALSE,
>   ...){
>   if(plot){
>     plot(p,...)
>     p(candidate[1],candidate[2], pch=16)
>   }
>   n <- nrow(p) # number of points
>   d <- ncol(p) # number of dimensions
>
>   p <- t(sweep(p,2,candidate))
>   jj <- simplex(a=rep(1,n),A3=rbind(p,1),b3=c(0*candidate,1))
>   if(give.answers){
>     return(jj)
>   }  else {
>     return((jj$solved >= 0) & all(jj$soln<1))
>   }
>
> }
> > isin.chull(x_i,X)
> [1] FALSE
>
> (we can discuss offline; I'll summarize)
>
> HTH
>
> rksh
>
> On 24/09/10 10:44, Feng Li wrote:
>
>
>
> > Dear R,
>
> > I have a covariates matrix with 10 observations,  e.g.
>
> >> X <- matrix(rnorm(50), 10, 5)
> >> X
>
> >              [,1]        [,2]        [,3]        [,4]       [,5]
> >  [1,]  0.24857135  0.30880745 -1.44118657  1.10229027  1.0526010
> >  [2,]  1.24316806  0.36275370 -0.40096866 -0.24387888 -1.5324384
> >  [3,] -0.33504014  0.42996246  0.03902479 -0.84778875 -2.4754644
> >  [4,]  0.06710229  1.01950917 -0.09325091 -0.03222811  0.4127816
> >  [5,] -0.13619141  1.33143821 -0.79958805  2.08274102  0.6901768
> >  [6,] -0.45060357  0.19348831 -1.23793647 -0.72440163  0.5057326
> >  [7,] -1.20740516  0.20231086  1.15584485  0.81777770 -1.2719855
> >  [8,] -1.81166284 -0.07913113 -0.91080581 -0.34774436  0.9552182
> >  [9,]  0.19131383  0.14980569 -0.37458224 -0.09371273 -1.7667203
> > [10,] -0.85159276 -0.66679528  1.63019340  0.56920196 -2.4049600
>
> > And I define a boundary of X:  The smallest "ball" that nests all the
> > observations of X. I wish to check if a particular point x_i
>
> >> x_i <- matrix(rnorm(5), 1, 5)
> >> x_i
>
> >            [,1]      [,2]       [,3]      [,4]      [,5]
> > [1,] -0.1525543 0.4606419 -0.1011011 -1.557225 -1.035694
>
> > is inside the boundary of X or not. I know it's easy to do it with 1-D or
> > 2-D, but I don't knot how to manage it when the dimension is large.
>
> > Can someone give a hint? Thanks in advance!
>
> > Feng
>
> --
> Robin K. S. Hankin
> Uncertainty Analyst
> University of Cambridge
> 19 Silver Street
> Cambridge CB3 9EP
> 01223-764877
>
> ______________________________________________
> R-h... at r-project.org mailing listhttps://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guidehttp://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list