2017-05-14 57 views
3

我与R.玩弄我试着想象的1000个骰子分配与下列R-脚本抛出:为什么我的R直方图中的第一个条如此之大?

cases <- 1000 

min <- 1 
max <- 6 

x <- as.integer(runif(cases,min,max+1)) 
mx <- mean(x) 
sd <- sd(x) 

hist(
    x, 
    xlim=c(min - abs(mx/2),max + abs(mx/2)), 
    main=paste(cases,"Samples"), 
    freq = FALSE, 
    breaks=seq(min,max,1) 
) 

curve(dnorm(x, mx, sd), add = TRUE, col="blue", lwd = 2) 
abline(v = mx, col = "red", lwd = 2) 

legend("bottomleft", 
     legend=c(paste('Mean (', mx, ')')), 
     col=c('red'), lwd=2, lty=c(1)) 

脚本生成以下直方图: histogram

有人能解释我为什么第一个酒吧如此之大?我检查了数据,它看起来很好。我怎样才能解决这个问题?

预先感谢您!

+0

同时比较'right = TRUE'和'right = FALSE'。 – Axeman

回答

6

直方图不适用于离散数据,它们是为连续数据而设计的。您的数据如下所示:

> table(x) 
x 
    1 2 3 4 5 6 
174 138 162 178 196 152 

即每个值的数字大致相等。但是当你把它放在直方图中时,你选择了1:6的断点。第一个栏的左边界限有174个条目,右边界限为138个,所以它显示312.

通过在半整数处指定间隔(即breaks = 0:6 + 0.5),可以获得更好看的直方图,但它仍不会“对于像这样的数据使用直方图是有意义的。只需运行plot(table(x))barplot(table(x))即可更准确地描述数据。

1

你有错误的breaks,正因为如此,第一个酒吧正在计数1和2的卷。

hist(
    x, 
    xlim=c(0,6), 
    main=paste(cases,"Samples"), 
    freq = FALSE, 
    breaks=seq(0,6,1) 
) 
1

m0nhawk得到的问题的一部分。另一个问题可能是你使用as.integer,它总是舍入(因此倾向于1)。

as.integer(1.7) 
# 1 

round(1.7) 
# 2 

最后,我不确定为什么一个人会适合一个高斯统一分布。从rnorm而不是runif生成数字会更有意义。

相关问题