[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