[R] truncated normal
Berwin A Turlach
berwin at maths.uwa.edu.au
Thu Jul 24 08:47:46 CEST 2008
G'day all,
On Wed, 23 Jul 2008 20:48:59 -0400
Duncan Murdoch <murdoch at stats.uwo.ca> wrote:
> On 23/07/2008 8:17 PM, cindy Guo wrote:
> > Yes, I know. I mean if I want to generate 100 numbers from
> > N(0,1)I((0,1),(5,10)). There are two intervals (0,1) and (5,10).
> > Then the function will give 50 numbers in the first interval and 50
> > in the other.
I can think of two strategies:
1) Use rtnorm from the msm *package* to sample from the normal
distribution truncated to the interval from your smallest lower
bound and your largest upper bound; and then use rejection sampling.
I.e. for your original example N(0,1)I((0,1),(2,4)) sample from a
N(0,1)I(0,4) distribution and reject all observations that are between
1 and 2, sample sufficiently many points until you have kept the
required number. But this could be rather inefficient for your second
example N(0,1)I((0,1),(5,10)).
2) If I am not mistaken, truncating the normal distribution to more than
one interval essentially creates a mixture distribution where the
components of the mixture are normal distributions truncated to a
single interval. The weights of the mixture are given by the relative
probability with which an observation from a normal distribution falls
into each of the intervals. Thus, an alternative strategy, exemplified
using your second example, would be (code untested):
samp1 <- rtnorm(100,mean=0,sd=1, lower=0,upper=1)
samp2 <- rtnorm(100,mean=0,sd=1, lower=5,upper=10)
p1 <- pnorm(1)-pnorm(0)
p2 <- pnorm(10)-pnorm(5) ## Take heed about Duncan's remark on
## evaluating such quantities
p <- p1/(p1+p2)
ind <- runif(100) < p
finalsample <- samp1
finalsample[!ind] <- samp2[!ind]
HTH.
Cheers,
Berwin
=========================== Full address =============================
Berwin A Turlach Tel.: +65 6516 4416 (secr)
Dept of Statistics and Applied Probability +65 6516 6650 (self)
Faculty of Science FAX : +65 6872 3919
National University of Singapore
6 Science Drive 2, Blk S16, Level 7 e-mail: statba at nus.edu.sg
Singapore 117546 http://www.stat.nus.edu.sg/~statba
More information about the R-help
mailing list