From: Duncan Murdoch <murdoch_at_stats.uwo.ca>

Date: Wed, 23 Jul 2008 20:48:59 -0400

*>> cindy Guo wrote:
*

*>>
*

*>>> Dear Dr. Murdoch,
*

*>>> First thank you very much for your reply. But it seems to me that it will
*

*>>> generate a point with equal probability in the two intervals. I mean if I
*

*>>> generage 100 points, then 50 will be in one interval and the other 50 in the
*

*>>> other interval. I think more points should be in the interval closer to the
*

*>>> mean. What do you think?
*

*>>>
*

*>> I think you mean something different from me when you say a "truncated"
*

*>> distribution. My function would generate 100 points in whatever intervals
*

*>> you specified.
*

*>>
*

*>> Duncan Murdoch
*

*>>
*

*>>> Thanks a lot,
*

*>>> Cindy
*

*>>>
*

*>>> On 7/23/08, *Duncan Murdoch* <murdoch_at_stats.uwo.ca <mailto:
*

*>>> murdoch_at_stats.uwo.ca>> wrote:
*

*>>>
*

>>> On 7/23/2008 4:22 PM, Duncan Murdoch wrote:

*>>>
*

*>>> On 7/23/2008 3:41 PM, cindy Guo wrote:
*

*>>>
*

*>>> Hi, I want to generate random samples from truncated
*

*>>> normal say
*

*>>> Normal(0,1)Indicator((0,1),(2,4)). It has more than one
*

*>>> intervals. In the
*

*>>> library msm, it seems to me that the 'lower' and 'upper'
*

*>>> arguments can only
*

*>>> be a number. I tried rtnorm(1,mean=0,sd=1,
*

*>>> lower=c(0,2),upper=c(1,4)) and it
*

*>>> didn't work. Can you tell me how I can do truncated
*

*>>> normal at more than one
*

*>>> intervals?
*

*>>>
*

*>>>
*

*>>> The inverse CDF method will work. For example, this untested
*

*>>> code:
*

*>>>
*

*>>> rtruncnorm <- function(n, mean=0, sd=1, lower=-Inf, upper=Inf) {
*

*>>> plower <- pnorm(lower, mean, sd) # get the probability
*

*>>> values for the
*

*>>> # lower limits
*

*>>> pupper <- pnorm(upper, mean, sd) # ditto for the upper limits
*

*>>> p <- plower + (pupper - plower)*runif(n) # get random values
*

*>>> between
*

*>>> # those
*

*>>> qnorm(p, mean, sd) # invert the CDFs
*

*>>> }
*

*>>>
*

*>>> As I said, this is untested, but it should work if all of
*

*>>> mean, sd, lower, and upper are the same length, and in some
*

*>>> cases where they aren't.
*

*>>>
*

*>>> Duncan Murdoch
*

*>>>
*

*>>>
*

*>>> One case where the code above will *not* work is if your
*

*>>> truncation is too far out in the tails, e.g. a standard normal,
*

*>>> truncated to be in the interval [100, 101]. It is possible to do
*

*>>> those in R, but it's tricky to avoid rounding error: in the
*

*>>> example above, both plower and pupper will be exactly 1 in this
*

*>>> case. You need to do calculations on a log scale, and work with
*

*>>> upper tails instead of lower ones. It all gets kind of messy.
*

*>>>
*

*>>> Duncan Murdoch
*

*>>>
*

*>>>
*

*>>>
*

>

R-help_at_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. Received on Thu 24 Jul 2008 - 01:31:51 GMT

Date: Wed, 23 Jul 2008 20:48:59 -0400

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.

No, it doesn't handle that case at all. I didn't realize that's what you wanted. Sorry.

I've posted this back to the mailing list; maybe someone else will help you. (This is one reason it's not a good idea to take discussions offline: someone else might have recognized my misunderstanding earlier.)

Duncan Murdoch

> Cindy > > > On 7/23/08, Duncan Murdoch <murdoch_at_stats.uwo.ca> wrote:

>>> On 7/23/2008 4:22 PM, Duncan Murdoch wrote:

>

R-help_at_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. Received on Thu 24 Jul 2008 - 01:31:51 GMT

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.2.0, at Thu 24 Jul 2008 - 08:32:37 GMT.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help.
Please read the posting
guide before posting to the list.
*