[英]Histogram and density in R
誰能給我解釋一下? 如果我運行以下
repet <- 10000
size <- 100
p <- .5
data <- (rbinom(repet, size, p) - size * p) / sqrt(size * p * (1-p))
hist(data, freq = FALSE)
x = seq(min(data) - 1, max(data) + 1, .01)
lines(x, dnorm(x), col='green', lwd = 4)
然后我得到直方圖和理論密度的合理一致(由於中心極限定理)。
如果我使用
hist(data, breaks = 100, freq = FALSE)
直方圖與理論密度明顯不同。
當我將中斷次數從 51 增加到 52 時,就會發生這種行為變化。為什么會發生這種變化?
這與您從rbinom
生成的數據不連續這一事實有關。 它是離散的。 那里只有 ~35 個離散值(使用set.seed(15)
和length(unique(data))
)。 當您強制直方圖有 100 個中斷時,您會發現其中許多 bin 最終是空的
sum(hist(data, breaks = 100, freq = FALSE)$counts==0)
# [1] 36
因此,如果您會注意到第二個直方圖有一個條形,然后是一個空格(對於高度為 0 的條形),重復。 對於兩個直方圖,曲線下的總面積必須相同,但由於第二個圖中的條形寬度是其一半,因此它們需要是所有條形圖的兩倍。
所有這一切的重點是在使用離散數據的直方圖時要小心。 它們用於連續數據。 此外,您選擇的 bin 數量會對解釋產生很大的影響。 如果您更改默認值,您應該有充分的理由這樣做。
查看data
中的值——精度限制為十分之一單位。 因此,如果您有太多的 bin,一些 bin 將落在數據點之間,並且命中計數為零。 其他的將具有相應更高的密度。
在您的實驗中,存在不連續的效果,因為breaks
...
只是一個建議; 斷點將設置為漂亮的值
您可以通過使用 vector 精確指定中斷來覆蓋breaks
的任意行為。 我在下面證明了這一點,以及更直接的(基於整數的)二項式結果直方圖:
probability=0.5 ## probability of success per trial
trials=14 ## number of trials per result
reps=1e6 ## number of results to generate (data size)
## generate histogram of random binomial results
data <- rbinom(reps,trials,probability)
offset = 0.5 ## center histogram bins around integer data values
window <- seq(0-offset,trials+offset) ## create the vector of 'breaks'
hist(data,breaks=window)
## demonstrate the central limit theorem with a predictive curve over the histogram
population_variance = probability*(1-probability) ## from model of Bernoulli trials
prediction_variance <- population_variance / trials
y <- dnorm(seq(0,1,0.01),probability,sqrt(prediction_variance))
lines(seq(0,1,0.01)*trials,y*reps/trials, col='green', lwd=4)
關於問題中顯示的第一個圖表:使用repet <- 10000
,直方圖應該非常接近正常(“大數定律”導致收斂),並且重復運行相同的實驗(或進一步增加repet
)不會t 改變形狀很多——盡管有明顯的隨機性。 第一個圖表中的明顯隨機性也是有問題的繪圖錯誤的產物。 更簡單地說:問題中顯示的兩個圖表都非常錯誤(因為breaks
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.