On 2010-12-08 17:07, Anup Nandialath wrote:
  Dear R-helpers,

My question is related to how to impose constraints when when sampling from a 
distribution.

For example, suppose I'm sampling a vector from a multivariate normal 
distribution

vbeta<- 100*diag(2)
mbeta<- c(1,1)
ans<- beta<- c(rmvnorm(1,mbeta,vbeta))

ans will thus be a vector with two elements.

My question is how do I place a restriction on one of the elements of the ans 
vector. For example, suppose my goal is to reject any draw for ans[2] below -1 
and above 1, how should I implement that in the above setting?


What's wrong with just rejecting those cases after
they've been generated. Not efficient, but easy.

Say you want 10 random points. Generate 500 (or
whatever seems reasonable), toss out the ones
you don't want, randomly select 10 from the rest.

 library(mvtnorm)  ## (I assume)
 set.seed(31415)
 tmp <- rmvnorm(500,mbeta,vbeta)
 tmp1 <- tmp[which(abs(tmp[,2]) <= 1),]
 ans <- tmp1[sample(nrow(tmp1),10),]
 ans

Peter Ehlers

Thanks in advance for your help.

Kind Regards

Anup


______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to