2

可能重复:
ggplot2:使用密度曲线叠加直方图

对不起,这可能是一个简单的问题,但我有一点问题。

我创建了一个基于二项分布的直方图,均值 = 0.65,sd = 0.015,样本数为 10000。直方图本身看起来不错。但是,我需要在此之上覆盖正态分布(具有相同的均值和标准差)。目前,我有以下内容:

qplot(x, data=prob, geom="histogram", binwidth=.05) + stat_function(geom="line", fun=dnorm, arg=list(mean=0.65, sd=0.015))

出现了一个分布,但它很小。这可能是因为平均值的计数上升到近 2,000,而正态分布要小得多。简而言之,它没有像 R 那样自动拟合数据。有没有办法指定正态分布的线来拟合直方图,或者有没有办法操纵直方图来拟合正态分布?

提前致谢。

4

2 回答 2

2

@daroczig 的答案是正确的,需要在绘制密度而不是计数时保持一致,但是:我无法看到您如何设法获得具有这些属性的二项式样本。特别是,二项式n*p的均值是 ,方差是n*p*(1-p),标准差是sqrt(n*p*(1-p)),所以 ..

b.m <- 0.65
b.sd <- 0.015

计算方差:

b.v <- b.sd^2  ## n*p*(1-p)

计算p

## (1-p) = b.v/(n*p) = b.v/b.m
## p = 1-b.v/b.m
b.p <- 1-b.v/b.m

计算n

## n = n*p/p = b.m/b.p
b.n <- b.m/b.p

这 给出n=0.6502251, p=0.9996538-- 所以 我 不 知道 你 怎么 能 得到 这个 二项式 分布n<1, 除非 我 把 代数 搞砸 了 ...

于 2011-11-13T14:01:31.707 回答
2

“分布很小”,因为您要在counts上绘制密度函数。您应该在两个图中使用相同的指标,例如:

我尝试为您的示例生成一些数据:

x <- rbinom(10000, 10, 0.15)
prob <- data.frame(x=x/(mean(x)/0.65))

并将两者都绘制为密度函数

library(ggplot2)
ggplot(prob, aes(x=x)) + geom_histogram(aes(y = ..density..), binwidth=.05) + stat_function(geom="line", fun=dnorm, arg=list(mean=0.65, sd=0.015))

在此处输入图像描述

于 2011-11-13T13:38:37.307 回答