 Forum index » Science and Technology » Math » Probability
Author Message
David Carson
science forum beginner

Joined: 05 Jul 2006
Posts: 4 Posted: Thu Jul 06, 2006 11:58 pm    Post subject: Re: Death rate problem On Thu, 06 Jul 2006 14:18:38 +0100, nigel <useweb@nospam.com> wrote:

 Quote: I'm not sure that adding extra detail to your death rates will be an effective use of your time. As you subsequently point out, infant mortality rates are higher than average, but so are geriatric mortality rates etc. There are also conditions that cause spikes in death rates across the whole population, for example flu epidemics or unusual weather patterns. To model these would be more or less guesswork. It might be helpful if we understood why you want to model the effects of different death rates, then we might be able to make more relevant suggestions for tuning your model.

The purpose of the model is to see what happens when factors such as the
ones you mentioned are introduced or changed. I can add as many different
factors as I want, but it's all for naught if it takes a half a day to run
the simulation. I can handle the model; I just needed some help with the
math, to make it run faster. The Poisson distribution Ray pointed me to
did the trick. Nigel
science forum beginner

Joined: 03 Jun 2005
Posts: 37 Posted: Thu Jul 06, 2006 1:18 pm    Post subject: Re: Death rate problem David Carson wrote:

 Quote: Hi, I am not a regular participant of this group, and only stopped in to ask a question. I hope that's OK. First, the context: I want to run some simulations to see what effects different death rates have on a human population. To keep things simple while I'm developing the code, I'm using a uniform death rate of 8 per 1,000 per month (which is very high by modern standards, but not by world historical standards). I'm keeping track of how many people there are in each age group, and the age groups are broken down by month. Ultimately, there will be different death rates for different age groups, genders, etc., but a uniform death rate is better for purposes of developing and testing the simulation code. The simplest way to run the simulation would be to multiply the number of people in each age group by .008, subtract them from the population, and age the rest by one month. That would also, however, be very unrealistic. In reality, you would never have exactly 8 deaths per 1,000 in each age group every month. In reality, 8 would be the modal value, but you'd also get a lot of 7's and 9's, some 6's and 10's, a few 5's, and 11's, etc. The real distribution would be a normal probability curve with 8 as the peak. My working solution uses RND, a random number from the system, where 0 = RND < 1. If, for a given person, RND is greater than or equal to .992, the poor creature dies, and if it is less than .992, he or she lives another month. This method gives a nice result where, on average, the death rate tends to be 8 per 1000, but it varies according to normal probability. The problem with this method is the sheer number of RND fetches, comparisons, and iterations that have to be performed. Aging a population of 20,000 by 12 months by this method takes a few seconds. To apply it to a population of hundreds of millions over 100 years would take hours, or even days. Can anyone think of a way to run this simulation so that death rates will result in a normal probability curve, but without iterating over the entire population person-by-person every month? I will check back here to see if there are any answers, and thanks in advance. David Carson

I'm not sure that adding extra detail to your death rates will be an
effective use of your time. As you subsequently point out, infant
mortality rates are higher than average, but so are geriatric mortality
rates etc. There are also conditions that cause spikes in death rates
across the whole population, for example flu epidemics or unusual
weather patterns. To model these would be more or less guesswork.

It might be helpful if we understood why you want to model the effects
of different death rates, then we might be able to make more relevant
suggestions for tuning your model. Ray Koopman
science forum Guru Wannabe

Joined: 25 Mar 2005
Posts: 216 Posted: Thu Jul 06, 2006 6:49 am    Post subject: Re: Death rate problem David Carson wrote:
 Quote: On 5 Jul 2006 15:43:18 -0700, "Ray Koopman" wrote: A long as n (the number of people in the group) is large -- say > 100 -- and p (the proportion who are expected to die) is small -- say .10 -- take your numbers from a Poisson distribution with mean = m = n*p. Otherwise revert to your original method. Here is some pseudocode for generating a Poisson variable with mean m: u = rnd()*exp(m); x = 0; t = 1; s = 1; while s < u: (x = x+1, t = t*m/x, s = s+t); use x Interesting. I found some code for a Box-Muller transformation today, but I like this better, because it gives me a result I can use without any further manipulation. By iterating over each member of the population every month, it took 65 seconds on my PC to age a population of 100,000 by 10 years. Using this Poisson distribution, the same calculation was instantaneous, and aging a population of 100,000 by 100 years took under 2 seconds. This will work fine. One question - at what proportion of deaths in the population group does this method start to break down? I can see, in some high infant mortality scenarios, needing to apply a death rate of, say, 8 out of 80. Will that be a problem? I can revert to the iterative method if necessary, but it would help to know if and when I have to make the switch, and of course it would be preferable to have only one method to worry about. Thanks for your help, Ray. David Carson

The Poisson variable is serving as an approximation to a Binomial
variable, which is what your original loop over n gives. There is no
precise general rule that says when the approximation is good enough.
The following recommendation is from
http://www.itl.nist.gov/div898/handbook/pmc/section3/pmc331.htm :
"The sample size n should be equal to or larger than 20 and the
probability of a single success, p, should be smaller than or equal to
..05. If n >= 100, the approximation is excellent if np is also <= 10." David Carson
science forum beginner

Joined: 05 Jul 2006
Posts: 4 Posted: Thu Jul 06, 2006 3:53 am    Post subject: Re: Death rate problem On 5 Jul 2006 15:43:18 -0700, "Ray Koopman" <koopman@sfu.ca> wrote:

 Quote: A long as n (the number of people in the group) is large -- say > 100 -- and p (the proportion who are expected to die) is small -- say .10 -- take your numbers from a Poisson distribution with mean = m = n*p. Otherwise revert to your original method. Here is some pseudocode for generating a Poisson variable with mean m: u = rnd()*exp(m); x = 0; t = 1; s = 1; while s < u: (x = x+1, t = t*m/x, s = s+t); use x

Interesting. I found some code for a Box-Muller transformation today, but
I like this better, because it gives me a result I can use without any
further manipulation.

By iterating over each member of the population every month, it took 65
seconds on my PC to age a population of 100,000 by 10 years. Using this
Poisson distribution, the same calculation was instantaneous, and aging a
population of 100,000 by 100 years took under 2 seconds. This will work
fine.

One question - at what proportion of deaths in the population group does
this method start to break down? I can see, in some high infant mortality
scenarios, needing to apply a death rate of, say, 8 out of 80. Will that
be a problem? I can revert to the iterative method if necessary, but it
would help to know if and when I have to make the switch, and of course it
would be preferable to have only one method to worry about.

Thanks for your help, Ray.

David Carson Ray Koopman
science forum Guru Wannabe

Joined: 25 Mar 2005
Posts: 216 Posted: Wed Jul 05, 2006 10:43 pm    Post subject: Re: Death rate problem A long as n (the number of people in the group) is large -- say > 100
-- and p (the proportion who are expected to die) is small -- say <
..10 -- take your numbers from a Poisson distribution with mean = m =
n*p. Otherwise revert to your original method.

Here is some pseudocode for generating a Poisson variable with mean m:

u = rnd()*exp(m); x = 0; t = 1; s = 1;
while s < u: (x = x+1, t = t*m/x, s = s+t);
use x

David Carson wrote:
 Quote: On 5 Jul 2006 13:26:01 -0700, "Ray Koopman" wrote: There are several ways to do what you want. From what distributions other than Uniform(0,1) will your system generate random numbers? None ... that's the only one. I'm just using a PC and VBScript. If there were a way to fetch a number randomly generated from a normal distribution, all I would have to do is fetch a value for each age group. I guess another way of phrasing my question would be, is there a way to randomly generate numbers from a normal distribution, when your system only generates random numbers from a uniform distribution and only has the basic arithmetic, logarithmic, and trigonometric functions built in? David Carson David Carson
science forum beginner

Joined: 05 Jul 2006
Posts: 4 Posted: Wed Jul 05, 2006 9:52 pm    Post subject: Re: Death rate problem On 5 Jul 2006 13:26:01 -0700, "Ray Koopman" <koopman@sfu.ca> wrote:

 Quote: There are several ways to do what you want. From what distributions other than Uniform(0,1) will your system generate random numbers?

None ... that's the only one. I'm just using a PC and VBScript.

If there were a way to fetch a number randomly generated from a normal
distribution, all I would have to do is fetch a value for each age
group. I guess another way of phrasing my question would be, is there
a way to randomly generate numbers from a normal distribution, when
your system only generates random numbers from a uniform distribution
and only has the basic arithmetic, logarithmic, and trigonometric
functions built in?

David Carson Ray Koopman
science forum Guru Wannabe

Joined: 25 Mar 2005
Posts: 216 Posted: Wed Jul 05, 2006 8:26 pm    Post subject: Re: Death rate problem There are several ways to do what you want. From what distributions
other than Uniform(0,1) will your system generate random numbers?

David Carson wrote:
 Quote: Hi, I am not a regular participant of this group, and only stopped in to ask a question. I hope that's OK. First, the context: I want to run some simulations to see what effects different death rates have on a human population. To keep things simple while I'm developing the code, I'm using a uniform death rate of 8 per 1,000 per month (which is very high by modern standards, but not by world historical standards). I'm keeping track of how many people there are in each age group, and the age groups are broken down by month. Ultimately, there will be different death rates for different age groups, genders, etc., but a uniform death rate is better for purposes of developing and testing the simulation code. The simplest way to run the simulation would be to multiply the number of people in each age group by .008, subtract them from the population, and age the rest by one month. That would also, however, be very unrealistic. In reality, you would never have exactly 8 deaths per 1,000 in each age group every month. In reality, 8 would be the modal value, but you'd also get a lot of 7's and 9's, some 6's and 10's, a few 5's, and 11's, etc. The real distribution would be a normal probability curve with 8 as the peak. My working solution uses RND, a random number from the system, where 0 = RND < 1. If, for a given person, RND is greater than or equal to .992, the poor creature dies, and if it is less than .992, he or she lives another month. This method gives a nice result where, on average, the death rate tends to be 8 per 1000, but it varies according to normal probability. The problem with this method is the sheer number of RND fetches, comparisons, and iterations that have to be performed. Aging a population of 20,000 by 12 months by this method takes a few seconds. To apply it to a population of hundreds of millions over 100 years would take hours, or even days. Can anyone think of a way to run this simulation so that death rates will result in a normal probability curve, but without iterating over the entire population person-by-person every month? I will check back here to see if there are any answers, and thanks in advance. David Carson David Carson
science forum beginner

Joined: 05 Jul 2006
Posts: 4 Posted: Wed Jul 05, 2006 6:06 pm    Post subject: Death rate problem Hi, I am not a regular participant of this group, and only stopped in to ask a question. I hope that's OK. First, the context: I want to run some simulations to see what effects different death rates have on a human population. To keep things simple while I'm developing the code, I'm using a uniform death rate of 8 per 1,000 per month (which is very high by modern standards, but not by world historical standards). I'm keeping track of how many people there are in each age group, and the age groups are broken down by month. Ultimately, there will be different death rates for different age groups, genders, etc., but a uniform death rate is better for purposes of developing and testing the simulation code. The simplest way to run the simulation would be to multiply the number of people in each age group by .008, subtract them from the population, and age the rest by one month. That would also, however, be very unrealistic. In reality, you would never have exactly 8 deaths per 1,000 in each age group every month. In reality, 8 would be the modal value, but you'd also get a lot of 7's and 9's, some 6's and 10's, a few 5's, and 11's, etc. The real distribution would be a normal probability curve with 8 as the peak. My working solution uses RND, a random number from the system, where 0 <= RND < 1. If, for a given person, RND is greater than or equal to ..992, the poor creature dies, and if it is less than .992, he or she lives another month. This method gives a nice result where, on average, the death rate tends to be 8 per 1000, but it varies according to normal probability. The problem with this method is the sheer number of RND fetches, comparisons, and iterations that have to be performed. Aging a population of 20,000 by 12 months by this method takes a few seconds. To apply it to a population of hundreds of millions over 100 years would take hours, or even days. Can anyone think of a way to run this simulation so that death rates will result in a normal probability curve, but without iterating over the entire population person-by-person every month? I will check back here to see if there are any answers, and thanks in advance. David Carson  Display posts from previous: All Posts1 Day7 Days2 Weeks1 Month3 Months6 Months1 Year Oldest FirstNewest First
 The time now is Sat Mar 23, 2019 10:16 am | All times are GMT Forum index » Science and Technology » Math » Probability
 Jump to: Select a forum-------------------Forum index|___Science and Technology    |___Math    |   |___Research    |   |___num-analysis    |   |___Symbolic    |   |___Combinatorics    |   |___Probability    |   |   |___Prediction    |   |       |   |___Undergraduate    |   |___Recreational    |       |___Physics    |   |___Research    |   |___New Theories    |   |___Acoustics    |   |___Electromagnetics    |   |___Strings    |   |___Particle    |   |___Fusion    |   |___Relativity    |       |___Chem    |   |___Analytical    |   |___Electrochem    |   |   |___Battery    |   |       |   |___Coatings    |       |___Engineering        |___Control        |___Mechanics        |___Chemical

 Topic Author Forum Replies Last Post Similar Topics help on problem brb003 Math 0 Mon Aug 28, 2006 3:31 am fraction problem mikerule Research 0 Thu Aug 24, 2006 5:10 am Mod computer problem William Elliot Math 4 Fri Jul 21, 2006 12:07 pm Divine apparitions in the tethered goat problem? jpalmour@gmail.com Math 6 Thu Jul 20, 2006 8:26 pm possible to use Generalized Method of Moments for this pr... comtech Math 1 Thu Jul 20, 2006 12:49 am