我无法将直方图绘制为pdf(概率)
我希望所有部分的总和等于1的面积,这样就可以更容易地比较数据集。出于某种原因,每当我指定中断(默认值为4或其他任何可怕的内容)时,它不再希望将箱子绘制为概率,而是将箱子绘制为频率计数。
hist(data[,1], freq = FALSE, xlim = c(-1,1), breaks = 800)
我应该将此行更改为什么?我需要一个概率分布和大量的箱子。 (我有600万个数据点)
这是在R帮助中,但我不知道如何覆盖它:
频率逻辑;如果为TRUE,则直方图图形表示 频率,结果的计数分量;如果为假,概率 绘制密度,组分密度(以便直方图具有 总面积一)。当且仅当中断时,默认为TRUE 等距(并且没有指定概率)。
由于
编辑:详情
嗯,所以我的情节超过1,如果这是一个概率,这是非常令人困惑的。我现在看看它与bin宽度有什么关系。我或多或少想要让每个垃圾箱价值1点,同时仍然有很多垃圾箱。换句话说,除非直接在1.0并且所有其他箱都是0.0,否则箱高度不应高于1.0。就像现在一样,我有一个箱子可以在15.0左右形成一个驼峰编辑:bin中%的高度 @Dwin:那我该如何绘制概率?我意识到由于x轴上的单位,积分仍然会给我1.0,但这不是我想要的。假设我有100分,其中5分落入第一个分区,那个分区应该是.05高度。这就是我要的。我做错了还有另一种方法吗?
我知道我有多少分。有没有办法将频率直方图中的每个bin计数除以这个数?
答案 0 :(得分:39)
回答绘制概率而不是密度的请求:
h <- hist(vec, breaks = 100, plot=FALSE)
h$counts=h$counts/sum(h$counts)
plot(h)
答案 1 :(得分:2)
> vec <- rnorm(6000000)
>
> h <- hist(vec, breaks = 800, freq = FALSE)
> sum(h$density)
[1] 100
> unique(zapsmall(diff(h$breaks)))
[1] 0.01
将最后两个结果相乘,得到概率密度和为1.请记住,箱宽在这里很重要。
这是
> sessionInfo()
R version 3.0.1 RC (2013-05-11 r62732)
Platform: x86_64-unknown-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_GB.UTF-8 LC_COLLATE=en_GB.UTF-8
[5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8
[7] LC_PAPER=C LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] tools_3.0.1
答案 2 :(得分:2)
默认的休息时间是log2(N)
,其中N是600万,所以应该是22.如果你只看到4次休息,那可能是因为你有xlim
个你的来电。这不会改变基础直方图,它只会影响它的哪一部分被绘制。如果你这样做
h <- hist(data[,1], freq=FALSE, breaks=800)
sum(h$density * diff(h$breaks))
你应该得到1的结果。
您的数据密度与其计量单位有关;因此,您要确保“没有箱高应该高于1.0”实际上是有意义的。例如,假设我们以英尺为单位进行了一系列测量。我们将测量的直方图绘制为密度。然后我们将所有测量值转换为英寸(乘以12)并进行另一个密度直方图。即使数据基本相同,密度的高度也是原始密度的1/12。同样地,您可以通过将所有数字乘以15来使您的箱高度小于1。
值1.0是否具有某种意义?
答案 3 :(得分:0)
我在直方图中观察到了这一点 密度=相对频率/相应的箱宽
示例1:
nums = c(10,41,10,28,22,8,31,3,9,9)
h2 = hist(nums,plot = F)
rf2 = h2 $ count / sum(h2 $ counts)
d2 = rf2 / diff(h2 $ break)
H 2 $密度
[1] 0.06 0.00 0.02 0.01 0.01
D2
[1] 0.06 0.00 0.02 0.01 0.01
示例2:
nums = c(10,41,10,28,22,8,31,3,9,9)
h3 = hist(nums,plot = F,breaks = c(1,30,40,50))
rf3 = h3 $ count / sum(h3 $ counts)
d3 = rf3 / diff(h3 $ break)
H3 $密度
[1] 0.02758621 0.01000000 0.01000000
D3
[1] 0.02758621 0.01000000 0.01000000
答案 4 :(得分:-1)
R有一个错误或什么的。如果你在data.frame(有1列)中有离散数据,并且在其上调用hist(DF,freq = FALSE),则相对密度将是错误的(总和为&gt; 1)。就我所知,这不应该发生。
解决方案是首先在对象上调用unlist()。这修复了情节。 (我也更改了文字,来自http://www.electionstudies.org/studypages/anes_timeseries_2012/anes_timeseries_2012.htm的数据)