R语言计算篮球投篮累积方差的模拟代码正确性验证
代码正确性判断与解析
你的这段R代码整体完全符合需求,核心逻辑、模拟流程和可视化都正确,以下是具体验证:
核心逻辑验证
- 投篮结果生成:
rbinom(n_shots, 1, prob_success)正确生成了符合伯努利分布的0-1投篮数据(1为命中,0为未命中),成功概率0.5设置准确。 - 累积方差计算:
- 第一次投篮后返回0,满足题目要求;
- 当投篮次数
j>1时,用var(shots[1:j])计算前j次的样本方差(R中var()默认使用n-1作为分母),这是统计上计算样本方差的标准做法。而你标注的红色虚线0.25是伯努利分布的总体方差(公式为p(1-p)),随着投篮次数增加,样本方差会逐渐收敛到这个值,和你的可视化趋势完全匹配。
模拟与存储逻辑验证
- 用
matrix(nrow = n_shots, ncol = n_simulations)存储100次模拟的累积方差,行对应投篮次数、列对应模拟次数,结构设计合理,能清晰存储所有模拟结果。 - 设置
set.seed(123)保证了模拟结果的可复现性,这是统计模拟中的良好实践。
可视化逻辑验证
- 先绘制第一次模拟的曲线,再循环叠加其余99次模拟的曲线,
ylim = range(cumulative_variances)确保所有曲线都能完整显示在图中; - 红色虚线标注总体方差0.25,直观展示了样本方差的收敛趋势,且第一次投篮的方差为0的要求也在图中得到体现,和你提供的可视化结果一致。
小优化建议(非必须)
原代码中用sapply计算累积方差的写法是正确的,但如果需要提升大样本下的运行效率,可以改用循环实现:
# 替换原代码中sapply的部分 cum_var <- numeric(n_shots) cum_var[1] <- 0 for(j in 2:n_shots) { cum_var[j] <- var(shots[1:j]) } cumulative_variances[,i] <- cum_var
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

