[R] Setting max values for rpois
(Ted Harding)
Ted.Harding at nessie.mcc.ac.uk
Wed May 12 23:55:47 CEST 2004
On 12-May-04 Bret Collier wrote:
> R-users,
> I am simulating a birth process for 4 classes of individuals
> with l[i] being the average No. fetuses per individual. However, I
> need to bound the resulting values for each generated rpois to be <=3
> (no individual can have > 3 offspring). I have not been able to
> figure out how to incorporate this into the below example. Any
> suggestions on integrating would be appreciated.
>
>
> recruit.f <- c(12, 12, 25, 51) #No. females in each age class
> l <- c(.05, 1.22, 1.6, 1.8) #mean No. fetuses for each age class
> x <- sapply(lapply(1:4, function(i) rpois(recruit.f[i], l[i])), sum)
It looks as though you are seeking to sample randomly from a Poisson
truncated at 3. This is in effect a multinomial with n=1, so one
approach could be (using your (51,1.8) case as illustration)
prob<-dpois((0:3),1.8); prob<-prob/sum(prob);
Nfetuses <- t((0:3))*rmultinom(51,1,prob)
which would give you 51 draws of 1 from the distribution
P(0)=0.1854599, P(1)=0.3338279, P(2)=0.3004451, P(3)=0.1802671
(though there may be a more direct way).
Anyway, whatever method you use to get the sample, you can wrap it
in a function to replace 'rpois' in your expression above.
Ted.
More information about the R-help
mailing list