在R中对分组数据框应用bcp实现贝叶斯变点检测
按组计算变点后验概率并追加到原数据框
你需要对分组数据框的每组应用bcp()函数,提取posterior.prob并追加到原数据中,以下是正确实现方式:
示例数据与包加载
# INSTALL PACMAN if (!require("pacman", character.only = TRUE)) { install.packages("pacman") } pacman::p_load(bcp,tidyverse) df <- data.frame( date = c(seq(Sys.Date(), by = -1, length.out = 1000), seq(Sys.Date(), by = -1, length.out = 1000)), value = c(rnorm(200, mean = 20, sd = 1), rnorm(800, mean = 17, sd = 2), rnorm(400, mean = 200, sd = 3), rnorm(600, mean = 150, sd = 4)), product = c(rep("A", 1000), rep("B", 1000)) )
正确实现代码
使用group_modify处理每组数据,确保返回与原组行数一致的tibble,从而保留原数据列并新增目标字段:
result_df <- df %>% group_by(product) %>% group_modify(~ { # 计算当前组的bcp结果 bcp_out <- bcp(.x$value) # 将posterior.prob作为新列追加到原组数据 .x %>% mutate(posterior_prob = bcp_out$posterior.prob) }) %>% ungroup()
错误原因说明
group_map默认返回列表而非数据框,无法直接得到带原列的结果- 之前的
group_modify尝试中,要么返回了enframe生成的长格式数据(行数与原组不匹配),要么仅返回posterior.prob向量,不符合group_modify需要返回同结构tibble的要求
内容的提问来源于stack exchange,提问作者TheGoat
相关产品推荐
相关产品推荐

