[R] Curious Behavior with Curve() and dnorm()
    Thomas Hopper 
    thopper at cobasys.com
       
    Thu Feb 10 23:08:39 CET 2005
    
    
  
I am attempting to wrap the histogram function in my own custom 
function, so that I can quickly generate some standard plots.
A part of what I want to do is to draw a normal curve over the histogram:
 > x <- rnorm(1000)
 > hist(x, freq=F)
 > curve(dnorm(x), lty=3, add=T)
(for normal use, x would be a vector of empirical values, but the 
rnorm() function works for testing)
That works just as you'd expect, but I've found something a bit strange.
If I try the following:
 > curve(dnorm(x, mean=mean(x), sd=sd(x)), lty=3, add=T)
I get a much flatter and broader curve (which looks like it probably has 
the same area as the first curve, though I haven't tested).
However, if I do
 > z <- sd(x)
 > curve(dnorm(x, mean=mean(x), sd=z), lty=1, add=T)
I get the curve you'd expect; it draws right over the first curve 
(curve(dnorm(x),...), above).
I haven't touched x between the call to curve() containing 
dnorm(...,sd=sd(x)) and the call to curve() containing dnorm(...,sd=z), 
and tests show that z == sd(x).
I get similar results if I manually type in the standard deviation of 
x--the expected curve is drawn--so the broader and flatter curve is only 
drawn when I call dnorm with sd=sd(x).
Is there a reason for this, or is there something odd going on with the 
call to curve()?
Regards,
Tom
    
    
More information about the R-help
mailing list