无需手动枚举,如何自动计算硬币翻转序列的条件概率?
自动生成H/T序列并计算条件概率的R实现
1. 自动生成所有长度1-5的H/T序列
无需手动枚举,用R的expand.grid配合循环可快速生成所有可能的序列。每个长度为k的序列有2^k种组合,代码如下:
# 生成长度1到5的所有H/T序列 all_patterns <- c() for (k in 1:5) { # 生成k个位置的所有H/T组合 combos <- expand.grid(rep(list(c("H", "T")), k), stringsAsFactors = FALSE) # 将每行字符拼接为完整序列 patterns <- apply(combos, 1, paste, collapse = "") all_patterns <- c(all_patterns, patterns) }
2. 处理硬币翻转数据并统计条件概率
假设你的硬币翻转数据是字符向量(例如flips <- sample(c("H", "T"), 100, replace = TRUE)),以下函数可自动统计每个模式的出现次数、后续H/T的条件概率:
calc_pattern_probs <- function(flips, patterns) { # 初始化结果表格 result <- data.frame( Pattern = character(), Total_Count = integer(), P_H_given_Pattern = numeric(), P_T_given_Pattern = numeric(), stringsAsFactors = FALSE ) for (pattern in patterns) { k <- nchar(pattern) n_flips <- length(flips) if (k >= n_flips) { # 模式长度超过翻转次数,直接跳过 result <- rbind(result, data.frame( Pattern = pattern, Total_Count = 0, P_H_given_Pattern = NA, P_T_given_Pattern = NA, stringsAsFactors = FALSE )) next } # 提取所有长度为k的滑动窗口序列 window_patterns <- sapply(1:(n_flips - k), function(i) { paste(flips[i:(i + k - 1)], collapse = "") }) # 提取每个窗口后的下一个结果 next_outcomes <- flips[(k + 1):n_flips] # 统计当前模式的总出现次数 total <- sum(window_patterns == pattern) if (total == 0) { # 模式未出现,概率设为NA ph <- NA pt <- NA } else { # 统计后续出现H和T的次数 h_count <- sum(next_outcomes[window_patterns == pattern] == "H") t_count <- sum(next_outcomes[window_patterns == pattern] == "T") ph <- h_count / total pt <- t_count / total } # 添加到结果表格 result <- rbind(result, data.frame( Pattern = pattern, Total_Count = total, P_H_given_Pattern = round(ph, 3), P_T_given_Pattern = round(pt, 3), stringsAsFactors = FALSE )) } return(result) }
3. 运行并生成格式化表格
用你的硬币翻转数据调用函数,再通过knitr::kable生成美观表格:
# 示例:生成100次硬币翻转数据(固定种子方便复现) set.seed(123) flips <- sample(c("H", "T"), 100, replace = TRUE) # 计算所有模式的概率 pattern_probs <- calc_pattern_probs(flips, all_patterns) # 生成格式化表格(需先安装knitr包) library(knitr) kable(pattern_probs, caption = "各H/T序列的条件概率及出现次数")
说明
- 代码自动覆盖长度1到5的所有可能序列,无需手动录入
- 未出现的模式总次数标记为0,条件概率设为
NA - 结果表格包含模式、总出现次数、P(H|Pattern)、P(T|Pattern)四列,结构清晰
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

