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

______________________________________________
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to