R语言自定义均匀分布函数生成范围偏移问题如何解决
R语言离散均匀分布模拟代码修正方案
错误原因
原有代码的问题集中在两个核心函数的逻辑缺陷:
fx_uniforme累积分布函数计算逻辑错误:循环内累加的是长度为b-a+1的向量,不符合离散均匀分布的CDF定义,输出不是合法的单值累积概率uniforme_sim函数初始计数从0开始,未和预期的[a,b]区间做偏移匹配,最终输出范围偏移
修正后完整代码
# 离散均匀分布累积分布函数 fx_uniforme <- function(x,a,b) { if (x < a) { return(0) } else if (x >= b) { return(1) } else { return((floor(x) - a + 1)/(b - a + 1)) } } # 离散均匀分布随机数模拟函数 uniforme_sim <- function(F,a,b) { x <- a u <- runif(1) while (F(x, a, b) < u) { x <- x + 1 } return(x) } # 测试模拟及绘图 uniforme_sim(fx_uniforme,1,10) m <- 1000 a <- 1 b <- 10 Ya <- array(NA, dim = m) for (i in 1:m) { Ya[i] <- uniforme_sim(fx_uniforme,a,b) } Ya barplot(table(Ya))
验证说明
运行修正后的代码,模拟1000次得到的结果会落在1~10的预期区间内,柱状图可观察到10个类别的均匀分布效果。
内容的提问来源于stack exchange,提问作者Marcelo
相关产品推荐
相关产品推荐

