density plot of simulated exponential distributed data
Hi: Try this (and note the use of vectorization rather than a loop): rate <- 3 dta <- -log(1 - runif(1000))/rate hist(dta, nclass = 30, probability = TRUE) x <- c(0.001, seq(0, 3, by = 0.01)) lines(x, dexp(x, rate = 3)) This is the difference in timings between the vectorized and iterative methods of generating the samples:
system.time(replicate(1000, -log(1 - runif(1000))/rate))
user system elapsed 0.10 0.00 0.09
system.time(replicate(1000, { dt <- numeric(1000)
+ i <- 1
+ for(i in 1:1000){
+ r <- runif(1)
+ dt[i] <- log(1-r)/(-rate)
+ i <- i+1
+ } }))
user system elapsed
9.35 0.00 9.40
Vectorization is usually your friend in R, and it pays to use it when
available. All of the d*, p*, q* and r* functions, where * denotes the
suffix for a distribution, are vectorized, as are most of the
functions in base R. A happy by-product is that it also makes for more
easily readable code.
HTH,
Dennis
On Tue, Apr 26, 2011 at 3:19 PM, Juanjuan Chai <chaij at umail.iu.edu> wrote:
Hi all,
I tried to plot the density curve using the data from simulation. I am sure
that the data should be exponentially distributed, but the plot of density
curve always starts from (0,0) which is not the case for exponential
distribution. Is there any way around this, to keep the curve dropping at 0?
Thanks.
The following are the codes I tested:
data <- vector()
rate <- 3
i <- 1
for(i in 1:1000){
? ? ? ?r <- runif(1)
? ? ? ?data[i] <- log(1-r)/(-rate)
? ? ? ?i <- i+1
}
plot(density(data))
-JJ
______________________________________________ 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.