Dear useRs, I wrote a function that simulates a stochastic model in discrete time. The problem is that the stochastic parameters should not be negative and sometimes they happen to be. How can I conditionate it to when it draws a negative number, it transforms into zero in that time step? Here is the function: stochastic_prost <- function(Fmean, Fsd, Smean, Ssd, f, s, n, time, out=FALSE, plot=TRUE) { nt <- rep(0, time) nt[1] <- n for(n in 2:time) { nt[n] <- 0.5*rnorm(1, Fmean, Fsd)*rnorm(1, Smean, Ssd)*exp(1)^(-(f+s)*nt[n-1])*nt[n-1]} if(out==TRUE) {print(data.frame(nt))} if(plot==TRUE) {plot(1:time, nt, type='l', main='Simulation', ylab='Population', xlab='Generations')} } The 2 rnorm()'s should not be negative; when negative they should turn into zero. Thanks in advance, Rafael ____________________________________________________________________________________ [[elided Yahoo spam]] [[alternative HTML version deleted]]
Generate the numbers, test for zero and then set negatives to zero:> set.seed(1) > x <- rnorm(100,5,3) > sum(x<0)[1] 3> x[x<0] <- 0 > sum(x<0)[1] 0>On Mon, Nov 16, 2009 at 7:43 AM, Rafael Moral <rafa_moral2004 at yahoo.com.br> wrote:> Dear useRs, > > I wrote a function that simulates a stochastic model in discrete time. > The problem is that the stochastic parameters should not be negative and sometimes they happen to be. > How can I conditionate it to when it draws a negative number, it transforms into zero in that time step? > > Here is the function: > > stochastic_prost <- function(Fmean, Fsd, Smean, Ssd, f, s, n, time, out=FALSE, plot=TRUE) { > nt <- rep(0, time) > nt[1] <- n > for(n in 2:time) { > nt[n] <- 0.5*rnorm(1, Fmean, Fsd)*rnorm(1, Smean, Ssd)*exp(1)^(-(f+s)*nt[n-1])*nt[n-1]} > if(out==TRUE) {print(data.frame(nt))} > if(plot==TRUE) {plot(1:time, nt, type='l', main='Simulation', ylab='Population', xlab='Generations')} > } > > The 2 rnorm()'s should not be negative; when negative they should turn into zero. > > Thanks in advance, > Rafael > > > ? ? ?____________________________________________________________________________________ > [[elided Yahoo spam]] > > ? ? ? ?[[alternative HTML version deleted]] > > ______________________________________________ > 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. >-- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem that you are trying to solve?
On Nov 16, 2009, at 7:43 AM, Rafael Moral wrote:> Dear useRs, > > I wrote a function that simulates a stochastic model in discrete time. > The problem is that the stochastic parameters should not be negative > and sometimes they happen to be. > How can I conditionate it to when it draws a negative number, it > transforms into zero in that time step? > > Here is the function: > > stochastic_prost <- function(Fmean, Fsd, Smean, Ssd, f, s, n, time, > out=FALSE, plot=TRUE) { > nt <- rep(0, time) > nt[1] <- n > for(n in 2:time) { > nt[n] <- 0.5*rnorm(1, Fmean, Fsd)*rnorm(1, Smean, Ssd)*exp(1)^(-(f > +s)*nt[n-1])*nt[n-1]} > if(out==TRUE) {print(data.frame(nt))} > if(plot==TRUE) {plot(1:time, nt, type='l', main='Simulation', > ylab='Population', xlab='Generations')} > } > > The 2 rnorm()'s should not be negative; when negative they should > turn into zero....*max(0, rnorm(1, Fmean, Fsd)*max(0, rnorm(1, Smean, Ssd)*...> Thanks in advance, > Rafael > > > > ____________________________________________________________________________________ > [[elided Yahoo spam]] > > [[alternative HTML version deleted]] > > ______________________________________________ > 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.David Winsemius, MD Heritage Laboratories West Hartford, CT