大数定律验证场景下R语言随机数计算代码正确性求助
代码问题诊断
你的现有代码完全不符合验证大数定律的需求,核心逻辑偏差较大,具体问题如下:
- 第一步生成1000个U(0,1)分布的随机数
a = runif(1000,0,1)是符合需求的(如果你要的均匀分布参数就是0和1),但后续b = pnorm(a, mean = 60.5, sd = 0.1)的操作完全无意义,和你的需求没有关联。 - 循环逻辑完全偏离需求:你没有用一开始生成的均匀分布序列计算前i个值的均值,反而每次生成指数分布的随机数再求均值,完全没有对应你要实现的功能。
- 编码习惯问题:你用内置函数名
mean作为自定义变量名,会覆盖R的内置mean()函数,容易触发后续隐式错误。
正确实现代码
你要验证大数定律的逻辑是:随着样本量增大,样本均值逐步逼近总体的理论期望,U(0,1)的理论期望是0.5,你可以参考以下代码:
rm(list=ls()) # 固定随机种子方便结果复现 set.seed(123) # 生成1000个U(0,1)分布的随机数 x <- runif(1000, 0, 1) # 初始化存储前i个样本均值的向量 sample_mean <- numeric(1000) for(i in 1:1000){ # 计算前i个样本的均值 sample_mean[i] <- mean(x[1:i]) } # 绘图验证:样本量越大,均值越接近0.5 n <- 1:1000 plot(sample_mean ~ n, type = "l", xlab = "样本量", ylab = "前n个样本的均值", main = "大数定律验证") # 加一条理论均值的参考线 abline(h = 0.5, col = "red", lwd = 2)
内容的提问来源于stack exchange,提问作者Athika Selvya Suhendar
相关产品推荐
相关产品推荐

