求解样本分布:基于R语言的抛硬币问题求助
两枚硬币抛掷的分布求解(R语言)
首先明确核心逻辑:抛掷两枚硬币时,正面次数x和反面次数y满足y = 2 - x,只要算出x的分布,就能直接得到y的分布。
原代码的问题
你的代码存在语法和逻辑错误:
- R语言抽样函数是小写的
sample(),不是大写Sample() - 参数位置错误,
prob是sample()的内部参数,不能放在括号外 - 布尔值
replace的正确写法是大写TRUE(R语言规范) - 不能直接将
x,y作为sample()参数,且单个1/4的概率不符合实际分布(不同x取值的概率不同) - 括号不匹配,代码结构混乱
正确实现方法
1. 明确理论分布
两枚硬币的所有可能结果对应的概率:
- 0次正面(2次反面):概率
1/4 - 1次正面(1次反面):概率
2/4(两种组合:正/反、反/正) - 2次正面(0次反面):概率
1/4
2. 模拟抽样(获取随机样本)
# 定义x的可能取值和对应概率 x_values <- 0:2 x_probs <- c(1/4, 2/4, 1/4) # 模拟10次抽样,得到x的结果 sim_x <- sample(x_values, size = 10, replace = TRUE, prob = x_probs) # 由x推导y的结果 sim_y <- 2 - sim_x # 查看抽样结果的频率分布 cat("x的抽样频率:\n") print(table(sim_x)) cat("\ny的抽样频率:\n") print(table(sim_y))
3. 直接生成理论分布表
如果不需要模拟抽样,直接输出理论分布:
dist_table <- data.frame( 正面次数_x = 0:2, 反面次数_y = 2 - 0:2, 概率_probability = c(1/4, 2/4, 1/4) ) print(dist_table)
运行上述代码后,就能清晰看到x和y的分布情况。
内容的提问来源于stack exchange,提问作者Zackery
相关产品推荐
相关产品推荐

