[R] Confused by dlnorm - densities do not match histogram

Terran Melconian terran at consistent.org
Tue Sep 23 04:59:19 CEST 2014

Good evening!  I'm running into some surprising behavior with dlnorm() and
trying to understand it.

To set the stage, I'll plot the density and overlay a normal distribution.
This works exactly as expected; the two graphs align quite closely:

qplot(data=data.frame(x=rnorm(1e5,4,2)),x=x,stat='density',geom='area') +

but then I change to a log normal distribution and the behaviour gets
odd.  The distribution looks nothing like the density plot:

qplot(data=data.frame(x=rlnorm(1e5,4,2)),x=x,log='x',stat='density',geom='area') + stat_function(fun=dlnorm,args=list(4,2),colour='blue')

I thought the issue might be scale transformation - if dlnorm is giving the
density per unit x this is not the same as the density after transforming
to log(x).  So I tried to effect this scale transformation manually by
dividing by the derivative of log(x) - i.e. by multiplying by x - but this
also did not match:

qplot(data=data.frame(x=rlnorm(1e5,4,2)),x=x,log='x',stat='density',geom='area') + stat_function(fun=function(x,...){dlnorm(x,...)*x},args=list(4,2),colour='blue')

I also tried plotting without the log scale to eliminate that
transformation as a source of discrepancy, and they still don't match:

qplot(data=data.frame(x=rlnorm(1e5,4,2)),x=x,stat='density',geom='area',xlim=c(0,50)) + stat_function(fun=dlnorm,args=list(4,2),colour='blue')

I'd appreciate any help in understanding what I'm missing.

More information about the R-help mailing list