我正在玩R.我尝试使用以下R脚本可视化1000个骰子投掷的分布:
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))
有人可以向我解释为什么第一个酒吧这么大吗?我检查了数据,看起来很好。我该如何解决这个问题?
提前谢谢!
答案 0 :(得分: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 :(得分:1)
您的breaks
不正确,因此,第一个栏正在计算卷中的1和2。
hist(
x,
xlim=c(0,6),
main=paste(cases,"Samples"),
freq = FALSE,
breaks=seq(0,6,1)
)
答案 2 :(得分:1)
m0nhawk解决了部分问题。另一个问题可能是您使用as.integer
,它总是向下舍入(因此向1
倾斜)。
as.integer(1.7)
# 1
round(1.7)
# 2
最后,我不确定为什么人们会将高斯分布为均匀分布。从rnorm
而不是runif
生成数字会更有意义。