在变化点分析中反映均方误差估计器的 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)。
问题
我希望工作流反映以下等式:
其中:
- 24反映了泰勒数据集中观测的总数。在提供的数据的情况下,这将对应于每组 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
这就是我目前的...希望学习更好的方法
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))
背景
您好,我想查询是否提供dplyr
workflow reflects the calculation of Mean Square Error estimator as descried by Taylor (2010)。
问题
我希望工作流反映以下等式:
其中:
- 24反映了泰勒数据集中观测的总数。在提供的数据的情况下,这将对应于每组 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
这就是我目前的...希望学习更好的方法
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))