R语言中如何为给定p(y)分布表正确绘制概率直方图
错误原因
你写的代码参数传递完全不符合hist()函数的语法规则:hist()的第一个入参要求传入原始观测值向量,由函数自动计算分箱和频数,你直接把概率向量、y取值向量作为前两个参数传入,函数会把概率值当成原始数据做分箱统计,自然得不到对应y取值的概率分布结果。
正确实现方案
对于离散型随机变量的概率分布,用barplot()绘制是最简便准确的,设置柱子无间隙即可匹配直方图的视觉样式:
# 定义随机变量取值和对应概率 y <- c(1, 2, 3, 4) p_y <- c(0.4, 0.3, 0.2, 0.1) # 绘制概率直方图 barplot( height = p_y, names.arg = y, main = "p(y) Probability Histogram", xlab = "Discrete value of y", ylab = "Probability p(y)", ylim = c(0, 0.45), space = 0 # 柱子间无空隙,符合直方图展示要求 )
如果需要使用hist()函数实现,需要先按概率权重生成模拟样本,同时手动设置分箱断点对齐离散y的取值:
# 按概率比例生成模拟观测样本 simulated_y <- rep(y, times = p_y * 100) # 调用hist绘图,设置断点让每个柱子居中对应y的取值,纵轴展示概率而非频数 hist( x = simulated_y, breaks = seq(0.5, 4.5, by = 1), freq = FALSE, main = "p(y) Probability Histogram", xlab = "Discrete value of y", ylab = "Probability p(y)" )
内容的提问来源于stack exchange,提问作者anna
相关产品推荐
相关产品推荐

