R语言:dbinom()与rbinom()结果为何不匹配?lines()绘图偏移疑问
关于R语言二项分布函数与绘图对齐的两个疑问解答
我来帮你拆解这两个问题,都是R语言里很容易踩的小坑~
疑问一:dbinom()与rbinom()的结果为何看起来无法匹配?
首先要明确:这两个函数的结果本质上是一致的,你觉得“无法匹配”大概率是绘图时的x轴对应关系误解,或者是随机样本的正常波动:
dbinom(0:25, 25, .5)计算的是二项分布X~Bin(25,0.5)在X=0到25时的理论概率质量,是完全确定的数值,没有随机性。rbinom(1e6,25,.5)生成的是该分布下的100万个随机样本,table(b)/length(b)计算的是这些样本的经验频率——由于随机性,经验频率和理论概率会有极其微小的偏差,但1e6的样本量已经足够大,偏差几乎可以忽略,整体趋势和理论值完全吻合。
如果你的图里看起来差异明显,大概率是绘图时的x轴对应没对齐(这刚好和你的第二个疑问相关),调整x轴的对应关系后,就能看到两者几乎重合。
疑问二:为什么lines()生成的竖线要加1右移才能和plot(a)的空心圆对齐?
这不是lines()的问题,而是plot()和lines()默认的x轴取值逻辑不同导致的:
当你执行
plot(a)时,a是长度为26的向量,R默认会把向量的**索引(1到26)**作为x轴坐标,也就是说:- x=1对应
a[1](即X=0的理论概率) - x=2对应
a[2](即X=1的理论概率) - ...
- x=26对应
a[26](即X=25的理论概率)
- x=1对应
而
table(b)返回的是按X=0到25排序的频率向量,当你直接用lines(table(b)/length(b), type="h")时,R同样默认用向量的索引(1到26)作为x轴坐标,这时候理论上应该和plot(a)的点对齐,但如果你觉得不对,大概率是你误以为plot(a)的x轴是0到25(对应X的实际取值),而不是向量的索引。
解决这个问题的更清晰的做法是手动指定x轴的取值,让两者的对应关系完全明确,根本不需要加常数偏移:
a <- dbinom(0:25, 25, .5) # 25次试验的二项分布pmf(概率质量函数) b <- rbinom(1e6, 25, .5) # 25次试验的二项分布随机变量 # 手动指定x为X的实际取值(0到25),明确对应关系 plot(0:25, a, type = "p", xlab = "X的取值", ylab = "概率/频率") # 同样指定x为0到25,绘制经验频率的竖线 lines(0:25, table(b)/length(b), type = "h", col = "red")
这样绘图时,空心圆和竖线就会完美对齐,再也不需要额外调整偏移量。
内容的提问来源于stack exchange,提问作者rnorouzian
相关产品推荐
相关产品推荐

