在变化点分析中反映均方误差估计器的 Dplyr 工作流

Dplyr workflow reflecting Mean Square Error estimator in change point analysis

背景

您好,我想查询是否提供dplyr workflow reflects the calculation of Mean Square Error estimator as descried by Taylor (2010)

问题

我希望工作流反映以下等式:

其中:

数据

使用的数据相当简单,类似于摘录:

set.seed(123)
dta <- data.frame(group = rep(LETTERS[1:3], 10),
                  year = rep(2001:2010, 3),
                  value = round(runif(30),2))

建议的工作流程

草稿工作流对应代码:

# Pkgs
Vectorize(require)(package = c("dplyr", "magrittr"),
                               char = TRUE)

# Workflow
dta %<>%
  arrange(group, year) %>% 
  group_by(group) %>% 
  mutate(X1 = cumsum(value) / row_number()) %>% 
  mutate(X2 = cumsum(lead(value)) / (length(value) - row_number())) %>% 
  mutate(MSEe = cumsum((value - X1) ^ 2  + (value - X2) ^ 2))

参考

Taylor,2010 年,变化点分析:检测变化的强大新工具 可用:http://www.variation.com/cpa/tech/changepoint.html

这就是我目前的...希望学习更好的方法

dta %>%
    arrange(group, year) %>% 
    group_by(group) %>% 
    mutate(cmX1=cummean(value), cmX2=(sum(value)-cumsum(value)) / (length(value) - row_number())) %>%
    do(data.frame(m=1:nrow(.), 
        MSE=sapply(1:nrow(.), function(n) sum((.$value[1:n] - .$cmX1[n])^2) + 
                sum((.$value[(n+1):length(.$value)] - .$cmX2[n])^2)))) %>% 
    ungroup()

数值检查:

mse <- function(x, m) { 
    meanX1 <- sum(x[1:m]) / m 
    meanX2 <- sum(x[(m+1):length(x)]) / (length(x)-m) 
    sum((x[1:m] - meanX1)^2) + sum((x[(m+1):length(x)] - meanX2)^2) 
} #mse 

dta <- dta[order(dta$group, dta$year),]
sapply(1:10, function(n) mse(dta$value[dta$group=="A"], n))