【问题标题】:Dplyr workflow reflecting Mean Square Error estimator in change point analysisDplyr 工作流反映变化点分析中的均方误差估计器
【发布时间】:2016-07-25 08:45:24
【问题描述】:

背景

您好,我想检查提供的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

【问题讨论】:

  • 嗨康拉德,它似乎缺少 m?如果我没记错的话,你需要分成上m组和下m组
  • @chinsoon12 感谢您的关注。抱歉,我应该在他的原始示例中更详细地解释 Taylor 使用月度数据,因此 m 值对应于每个月。在提供的数据是年度数据的情况下,m 将反映每年。由于每个组中的数据按年份排序,因此我正在考虑使用 row_number() 调用来引用当前行。在拆分方面,我希望工作流能够拆分每一行的数据并返回 MSE(m) 以找到最小值,因此会调用 cumsum()
  • mse
  • @chinsoon12 非常感谢您的贡献。如果您愿意,请随时提出建议作为答案,可能没有人会评论代码的dplyr 方面。
  • 它并没有真正回答你的问题,所以我宁愿不把它作为答案发布。

标签: r time-series dplyr panel-data mean-square-error


【解决方案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))

【讨论】:

  • 非常感谢,这是一个开始。我也在考虑在RcppRoll 中嵌入一个函数。理想情况下,我认为问题可以归结为在dplyr 中使用window functions
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
  • 1970-01-01
  • 2018-12-27
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多