## ---- include = FALSE--------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ---- echo = FALSE, message = FALSE------------------------------------------- knitr::opts_chunk$set(collapse = T, comment = "#>") options(tibble.print_min = 4L, tibble.print_max = 4L) library(SNSeg) ## ----echo=TRUE, eval=FALSE---------------------------------------------------- # # Please run the following function before running examples: # mix_GauGPD <- function(u,p,trunc_r,gpd_scale,gpd_shape){ # indicator <- u
0] <- qtruncnorm(u[indicator>0]/p,a=-Inf,b=trunc_r) # rv[indicator<=0] <- qgpd((u[indicator<=0]-p)/(1-p), loc=trunc_r, scale=gpd_scale,shape=gpd_shape) # return(rv) # } ## ----------------------------------------------------------------------------- set.seed(7) n <- 2000 reptime <- 2 cp_sets <- round(n*c(0,cumsum(c(0.5,0.25)),1)) mean_shift <- c(0.4,0,0.4) rho <- -0.7 ts <- MAR(n, reptime, rho) no_seg <- length(cp_sets)-1 for(index in 1:no_seg){ # Mean shift tau1 <- cp_sets[index]+1 tau2 <- cp_sets[index+1] ts[tau1:tau2,] <- ts[tau1:tau2,] + mean_shift[index] } ts <- ts[,2] # grid_size undefined result <- SNSeg_Uni(ts, paras_to_test = "mean", confidence = 0.9, grid_size_scale = 0.05, grid_size = NULL, plot_SN = FALSE, est_cp_loc = FALSE) # grid_size defined & generate time series segmentation plot result <- SNSeg_Uni(ts, paras_to_test = "mean", confidence = 0.9, grid_size_scale = 0.05, grid_size = 116, plot_SN = TRUE, est_cp_loc = TRUE) # Estimated change-point locations result$est_cp # Parameter estimates (mean) of each segment SNSeg_estimate(result) # plot the SN-based test statistic SN_stat <- max_SNsweep(result, plot_SN = TRUE, est_cp_loc = TRUE, critical_loc = TRUE) ## ----------------------------------------------------------------------------- summary(result) ## ----------------------------------------------------------------------------- print(result) ## ----------------------------------------------------------------------------- plot(result, cpts.col = 'red') ## ----echo=TRUE, eval=FALSE---------------------------------------------------- # set.seed(7) # ts <- MAR_Variance(2, "V1") # ts <- ts[,2] # # grid_size defined # result <- SNSeg_Uni(ts, paras_to_test = "variance", confidence = 0.9, # grid_size_scale = 0.05, grid_size = NULL, # plot_SN = FALSE, est_cp_loc = TRUE) # # Estimated change-point locations # result$est_cp # # Parameter estimates (variance) of each segment # SNSeg_estimate(result) # # plot the SN-based test statistic # SN_stat <- max_SNsweep(result, plot_SN = TRUE, est_cp_loc = TRUE, # critical_loc = TRUE) ## ----echo=TRUE, eval=FALSE---------------------------------------------------- # # built-in functions # # summary statistic # summary(result) # # print # print(result) # # plot # plot(result, cpts.col = 'red') ## ----echo=TRUE, eval=FALSE---------------------------------------------------- # set.seed(7) # ts <- MAR_Variance(2, "A3") # ts <- ts[,2] # # grid_size defined # result <- SNSeg_Uni(ts, paras_to_test = "acf", confidence = 0.9, # grid_size_scale = 0.05, grid_size = 92, plot_SN = FALSE, # est_cp_loc = TRUE) # # Estimated change-point locations # result$est_cp # # Parameter estimates (acf) of each segment # SNSeg_estimate(result) # # plot the SN-based test statistic # SN_stat <- max_SNsweep(result, plot_SN = TRUE, est_cp_loc = TRUE, # critical_loc = TRUE) ## ----echo=TRUE, eval=FALSE---------------------------------------------------- # # built-in functions # # summary statistic # summary(result) # # print # print(result) # # plot # plot(result, cpts.col = 'red') ## ----echo=TRUE, eval=FALSE---------------------------------------------------- # library(mvtnorm) # set.seed(7) # n <- 1000 # sigma_cross <- list(4*matrix(c(1,0.8,0.8,1), nrow=2), # matrix(c(1,0.2,0.2,1), nrow=2), # matrix(c(1,0.8,0.8,1), nrow=2)) # cp_sets <- round(c(0,n/3,2*n/3,n)) # noCP <- length(cp_sets)-2 # rho_sets <- rep(0.5, noCP+1) # ts <- MAR_MTS_Covariance(n, 2, rho_sets, cp_sets, sigma_cross) # ts <- ts[1][[1]] # # grid_size defined # result <- SNSeg_Uni(ts, paras_to_test = "bivcor", confidence = 0.9, # grid_size_scale = 0.05, grid_size = 77, # plot_SN = FALSE, est_cp_loc = TRUE) # # Estimated change-point locations # result$est_cp # # Parameter estimates (bivariate correlation) of each segment # SNSeg_estimate(result) # # plot the SN-based test statistic # SN_stat <- max_SNsweep(result, plot_SN = TRUE, est_cp_loc = TRUE, # critical_loc = TRUE) ## ----echo=TRUE, eval=FALSE---------------------------------------------------- # # built-in functions # # summary statistic # summary(result) # # print # print(result) # # plot # plot(result, cpts.col = 'red') ## ----echo=TRUE, eval=FALSE---------------------------------------------------- # library(truncnorm) # library(evd) # set.seed(7) # n <- 1000 # cp_sets <- c(0,n/2,n) # noCP <- length(cp_sets)-2 # reptime <- 2 # rho <- 0.2 # # AR time series with no change-point (mean, var)=(0,1) # ts <- MAR(n, reptime, rho)*sqrt(1-rho^2) # trunc_r <- 0 # p <- pnorm(trunc_r) # gpd_scale <- 2 # gpd_shape <- 0.125 # for(ts_index in 1:reptime){ # ts[(cp_sets[2]+1):n, ts_index] <- mix_GauGPD(pnorm(ts[(cp_sets[2]+1):n, ts_index]), # p,trunc_r,gpd_scale,gpd_shape) # } # ts <- ts[,2] # # grid_size undefined # # test in 90% quantile # result <- SNSeg_Uni(ts, paras_to_test = 0.9, confidence = 0.9, # grid_size_scale = 0.066, grid_size = NULL, # plot_SN = FALSE, est_cp_loc = TRUE) # # Estimated change-point locations # result$est_cp # # Parameter estimates (90th quantile) of each segment # SNSeg_estimate(result) # # plot the SN-based test statistic # SN_stat <- max_SNsweep(result, plot_SN = TRUE, est_cp_loc = TRUE, # critical_loc = TRUE) ## ----echo=TRUE, eval=FALSE---------------------------------------------------- # # built-in functions # # summary statistic # summary(result) # # print # print(result) # # plot # plot(result, cpts.col = 'red') ## ----echo=TRUE, eval=FALSE---------------------------------------------------- # set.seed(7) # n <- 500 # reptime <- 2 # cp_sets <- round(n*c(0,cumsum(c(0.5,0.25)),1)) # mean_shift <- c(0.4,0,0.4) # rho <- -0.7 # ts <- MAR(n, reptime, rho) # no_seg <- length(cp_sets)-1 # for(index in 1:no_seg){ # Mean shift # tau1 <- cp_sets[index]+1 # tau2 <- cp_sets[index+1] # ts[tau1:tau2,] <- ts[tau1:tau2,] + mean_shift[index] # } # ts <- ts[,2] # # Define a general functional for the input 'paras_to_test' # paras_to_test = function(ts){ # mean(ts) # } # result.SNCP.general <- SNSeg_Uni(ts, paras_to_test = paras_to_test, # confidence = 0.9, grid_size_scale = 0.05, # grid_size = NULL, plot_SN = FALSE, # est_cp_loc = TRUE) # # Estimated change-point locations # result.SNCP.general$est_cp # # Parameter estimates (general functional) of each segment # SNSeg_estimate(result.SNCP.general) # # plot the SN-based test statistic # SN_stat <- max_SNsweep(result.SNCP.general, plot_SN = TRUE, est_cp_loc = TRUE, # critical_loc = TRUE) ## ----echo=TRUE, eval=FALSE---------------------------------------------------- # # built-in functions # # summary statistic # summary(result) # # print # print(result) # # plot # plot(result, cpts.col = 'red') ## ----echo=TRUE, eval=FALSE---------------------------------------------------- # set.seed(7) # n <- 1000 # cp_sets <- c(0,333,667,1000) # no_seg <- length(cp_sets)-1 # rho <- 0 # # AR time series with no change-point (mean, var)=(0,1) # ts <- MAR(n, 2, rho)*sqrt(1-rho^2) # no_seg <- length(cp_sets)-1 # sd_shift <- c(1,1.6,1) # for(index in 1:no_seg){ # Mean shift # tau1 <- cp_sets[index]+1 # tau2 <- cp_sets[index+1] # ts[tau1:tau2,] <- ts[tau1:tau2,]*sd_shift[index] # } # d <- 2 # ts <- ts[,2] # # # Test in 90th and 95th quantile with grid_size undefined # result <- SNSeg_Uni(ts, paras_to_test = c(0.9, 0.95), confidence = 0.9, # grid_size_scale = 0.05, grid_size = NULL, # plot_SN = FALSE, est_cp_loc = FALSE) # # # Test in 90th quantile and the variance with grid_size undefined # result <- SNSeg_Uni(ts, paras_to_test = c(0.9, 'variance'), # confidence = 0.95, grid_size_scale = 0.078, # grid_size = NULL, plot_SN = FALSE, # est_cp_loc = FALSE) # # # Test in 90th quantile, variance and acf with grid_size undefined # result <- SNSeg_Uni(ts, paras_to_test = c(0.9,'variance', "acf"), # confidence = 0.9, grid_size_scale = 0.064, # grid_size = NULL, plot_SN = TRUE, # est_cp_loc = TRUE) # # Estimated change-point locations # result$est_cp ## ----echo=TRUE, eval=FALSE---------------------------------------------------- # # Test in 60th quantile, mean, variance and acf with grid_size defined # result.last <- SNSeg_Uni(ts, paras_to_test = c(0.6, 'mean', "variance", # "acf"), confidence = 0.9, grid_size_scale = 0.05, # grid_size = 83, plot_SN = FALSE, est_cp_loc = TRUE) # # Estimated change-point locations # result.last$est_cp # # Parameter estimates (of the last example) of each segment # SNSeg_estimate(result.last) # # SN-based test statistic segmentation plot # SN_stat <- max_SNsweep(result.last, plot_SN = TRUE, est_cp_loc = TRUE, # critical_loc = TRUE) ## ----echo=TRUE, eval=FALSE---------------------------------------------------- # # built-in functions # # summary statistic # summary(result) # # print # print(result) # # plot # plot(result, cpts.col = 'red') ## ----echo=TRUE, eval=FALSE---------------------------------------------------- # # Please run this function before running examples: # exchange_cor_matrix <- function(d, rho){ # tmp <- matrix(rho, d, d) # diag(tmp) <- 1 # return(tmp) # } ## ----echo=TRUE, eval=FALSE---------------------------------------------------- # library(mvtnorm) # set.seed(10) # d <- 5 # n <- 1000 # cp_sets <- round(n*c(0,cumsum(c(0.075,0.3,0.05,0.1,0.05)),1)) # mean_shift <- c(-3,0,3,0,-3,0)/sqrt(d) # mean_shift <- sign(mean_shift)*ceiling(abs(mean_shift)*10)/10 # rho_sets <- 0.5 # sigma_cross <- list(exchange_cor_matrix(d,0)) # ts <- MAR_MTS_Covariance(n, 2, rho_sets, cp_sets=c(0,n), sigma_cross) # noCP <- length(cp_sets)-2 # no_seg <- length(cp_sets)-1 # for(rep_index in 1:2){ # for(index in 1:no_seg){ # Mean shift # tau1 <- cp_sets[index]+1 # tau2 <- cp_sets[index+1] # ts[[rep_index]][,tau1:tau2] <- ts[[rep_index]][,tau1:tau2] + mean_shift[index] # } # } # ts <- ts[1][[1]] # # # grid_size undefined # result <- SNSeg_Multi(ts, paras_to_test = "mean", confidence = 0.95, # grid_size_scale = 0.079, grid_size = NULL, # plot_SN = FALSE, est_cp_loc = TRUE) # # grid_size defined # result <- SNSeg_Multi(ts, paras_to_test = "mean", confidence = 0.99, # grid_size_scale = 0.05, grid_size = 65, # plot_SN = FALSE, est_cp_loc = TRUE) # # Estimated change-point locations # result$est_cp # # Parameter estimates (multivariate mean) of each segment # SNSeg_estimate(result) # # SN-based test statistic segmentation plot # SN_stat <- max_SNsweep(result, plot_SN = TRUE, est_cp_loc = TRUE, # critical_loc = TRUE) ## ----echo=TRUE, eval=FALSE---------------------------------------------------- # # built-in functions # # summary statistic # summary(result) # # print # print(result) # # plot # par(mfrow=c(2,3)) # plot(result, cpts.col = 'red') ## ----echo=TRUE, eval=FALSE---------------------------------------------------- # library(mvtnorm) # set.seed(10) # reptime <- 2 # d <- 4 # n <- 1000 # sigma_cross <- list(exchange_cor_matrix(d,0.2), # 2*exchange_cor_matrix(d,0.5), # 4*exchange_cor_matrix(d,0.5)) # rho_sets <- c(0.3,0.3,0.3) # mean_shift <- c(0,0,0) # with mean change # cp_sets <- round(c(0,n/3,2*n/3,n)) # ts <- MAR_MTS_Covariance(n, reptime, rho_sets, cp_sets, sigma_cross) # noCP <- length(cp_sets)-2 # no_seg <- length(cp_sets)-1 # for(rep_index in 1:reptime){ # for(index in 1:no_seg){ # Mean shift # tau1 <- cp_sets[index]+1 # tau2 <- cp_sets[index+1] # ts[[rep_index]][,tau1:tau2] <- ts[[rep_index]][,tau1:tau2] + # mean_shift[index] # } # } # ts <- ts[[1]] # # # grid_size undefined # result <- SNSeg_Multi(ts, paras_to_test = "covariance", # confidence = 0.9, grid_size_scale = 0.05, # grid_size = NULL, plot_SN = FALSE, est_cp_loc = FALSE) # # grid_size defined # result <- SNSeg_Multi(ts, paras_to_test = "covariance", # confidence = 0.9, grid_size_scale = 0.05, # grid_size = 81, plot_SN = FALSE, # est_cp_loc = TRUE) # # Estimated change-point locations # result$est_cp # # Parameter estimates (covariance estimate) of each segment # SNSeg_estimate(result) # # SN-based test statistic segmentation plot # SN_stat <- max_SNsweep(result, plot_SN = TRUE, est_cp_loc = TRUE, # critical_loc = TRUE) ## ----echo=TRUE, eval=FALSE---------------------------------------------------- # # built-in functions # # summary statistic # summary(result) # # print # print(result) # # plot # par(mfrow=c(1,1)) # plot(result, cpts.col = 'red') ## ----echo=TRUE, eval=FALSE---------------------------------------------------- # n <- 600 # p <- 100 # nocp <- 5 # cp_sets <- round(seq(0,nocp+1,1)/(nocp+1)*n) # num_entry <- 5 # kappa <- sqrt(4/5) # Wang et al(2020) # mean_shift <- rep(c(0,kappa),100)[1:(length(cp_sets)-1)] # set.seed(1) # ts <- matrix(rnorm(n*p,0,1),n,p) # no_seg <- length(cp_sets)-1 # for(index in 1:no_seg){ # Mean shift # tau1 <- cp_sets[index]+1 # tau2 <- cp_sets[index+1] # ts[tau1:tau2,1:num_entry] <- ts[tau1:tau2,1:num_entry] + # mean_shift[index] # sparse change # } # # SN segmentation plot # # grid_size undefined (plot the first 3 time series) # result <- SNSeg_HD(ts, confidence = 0.9, grid_size_scale = 0.05, # grid_size = NULL, plot_SN = FALSE, est_cp_loc = TRUE, # ts_index = c(1:3)) # # grid_size defined (plot the 1st, 3rd and 5th time series) # result <- SNSeg_HD(ts, confidence = 0.9, grid_size_scale = 0.05, # grid_size = 52, plot_SN = FALSE, est_cp_loc = TRUE, # ts_index = c(1,3,5)) # # Estimated change-point locations # result$est_cp # # Parameter estimates (high-dimensional means) of each segment # summary.stat <- SNSeg_estimate(result) # # SN-based test statistic segmentation plot # SN_stat <- max_SNsweep(result, plot_SN = TRUE, est_cp_loc = TRUE, # critical_loc = TRUE) ## ----echo=TRUE, eval=FALSE---------------------------------------------------- # # built-in functions # # summary statistic # summary(result) # # print # print(result) # # plot # plot(result, cpts.col = 'red', ts_index = c(1:3))