2

背景

嗨,我想检查提供的dplyr工作流程是否反映了 Taylor (2010) 所描述的均误差估计器的计算。

问题

我希望工作流程能够反映以下等式: 方程

在哪里:

  • 24反映了 Taylor 数据集中的观察总数。在提供数据的情况下,这将对应于每组10 个观察值。

数据

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

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

4

1 回答 1

1

这是我到目前为止所拥有的......希望学习更好的方法

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))
于 2016-04-06T09:41:15.200 回答