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

使用R语言qbinom与runif函数计算相对频率结果异常求助

R语言分位数二项式模拟中相对频率不符的问题

问题描述

使用R语言的分位数二项式函数qbinom和runif进行数值模拟以获取相对频率时,出现频数结果正常但相对频率不符合预期的情况:
已设置set.seed(123),执行以下代码得到正确的频数:

table(qbinom(runif(1000,0,1),6,0.2))

输出结果:

0   1   2   3   4   5 
277 367 245  88  22   1 

但执行以下代码计算相对频率时:

table(qbinom(runif(1000,0,1),6,0.2))/1000

得到的结果却与预期不符:

0     1     2     3     4     5     6 
0.271 0.402 0.239 0.071 0.014 0.002 0.001 

预期的相对频率应为频数除以1000的结果:

0      1      2     3     4       5 
0.277 0.367 0.245 0.088  0.022   0.001 

问题原因

核心问题在于两次调用runif(1000,0,1)是独立的随机数生成过程:

  • 设置set.seed(123)后,第一次调用runif(1000,0,1)会生成随机数流中的前1000个随机数,对应一组qbinom结果;
  • 第二次调用runif(1000,0,1)会接着使用随机数流中接下来的1000个随机数,生成另一组完全不同的qbinom结果;
  • 两组不同的样本自然会得到不同的频数和相对频率,导致和预期的频数比例不符。

解决方法

先将生成的模拟样本存储到一个变量中,后续的频数统计和相对频率计算都基于同一个样本:

set.seed(123)
# 先生成一次样本并保存
sim_samples <- qbinom(runif(1000, 0, 1), 6, 0.2)
# 计算频数
table(sim_samples)
# 计算相对频率
table(sim_samples)/1000

执行后,频数和相对频率会完全匹配预期结果:
频数输出:

0   1   2   3   4   5 
277 367 245  88  22   1 

相对频率输出:

0    1    2    3    4    5 
0.277 0.367 0.245 0.088 0.022 0.001 

内容的提问来源于stack exchange,提问作者Rodrigo Badilla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:12:23