You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的理论概率)
  • 而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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:56:36