Find change points efficiently in mean variance change models
Source:R/fastcpd.R
fastcpd_meanvariance.Rd
fastcpd_meanvariance()
, fastcpd.meanvariance()
,
fastcpd_mv()
, fastcpd.mv()
are wrapper
functions of fastcpd()
to find the meanvariance change. The
function is similar to fastcpd()
except that the data is by
default a matrix or data frame or a vector with each row / element as an
observation and thus a formula is not required here.
Usage
fastcpd_meanvariance(data, ...)
fastcpd.meanvariance(data, ...)
fastcpd_mv(data, ...)
fastcpd.mv(data, ...)
Arguments
- data
A matrix, a data frame or a vector.
- ...
Other arguments passed to
fastcpd()
, for example,segment_count
.
Value
A fastcpd object.
Examples
set.seed(1)
data <- c(
rnorm(3000, 0, 1),
rnorm(1000, 10, 1),
rnorm(3000, 10, 20),
rnorm(1000, 0, 1)
)
system.time(result <- fastcpd.mv(data))
#> Warning: argument is not a function
#> user system elapsed
#> 0.005 0.000 0.005
summary(result)
#>
#> Call:
#> fastcpd.mv(data = data)
#>
#> Change points:
#> 3000 4000 7000
#>
#> Cost values:
#> 110.9701 44.33282 9001.941 7.441331
#>
#> Parameters:
#> segment 1 segment 2 segment 3 segment 4
#> 1 -0.00420034 10.016722 9.650309 -0.004211938
#> 2 1.07141035 1.078801 401.934668 1.002069791
plot(result)
set.seed(1)
p <- 3
data <- if (requireNamespace("mvtnorm", quietly = TRUE)) {
rbind(
mvtnorm::rmvnorm(2e+5, mean = rep(0, p), sigma = diag(1, p)),
mvtnorm::rmvnorm(1e+5, mean = rep(50, p), sigma = diag(1, p)),
mvtnorm::rmvnorm(2e+5, mean = rep(0, p), sigma = diag(100, p)),
mvtnorm::rmvnorm(2e+5, mean = rep(0, p), sigma = diag(1, p)),
mvtnorm::rmvnorm(1e+5, mean = rep(50, p), sigma = diag(1, p)),
mvtnorm::rmvnorm(2e+5, mean = rep(50, p), sigma = diag(100, p))
)
} else {
rbind(
matrix(rnorm(p * 2e+5, mean = 0, sd = 1), ncol = p),
matrix(rnorm(p * 1e+5, mean = 50, sd = 1), ncol = p),
matrix(rnorm(p * 2e+5, mean = 0, sd = 10), ncol = p),
matrix(rnorm(p * 2e+5, mean = 0, sd = 1), ncol = p),
matrix(rnorm(p * 1e+5, mean = 50, sd = 1), ncol = p),
matrix(rnorm(p * 2e+5, mean = 50, sd = 10), ncol = p)
)
}
system.time(result <- fastcpd.mv(data))
#> Warning: argument is not a function
#> user system elapsed
#> 0.710 0.167 0.877
summary(result)
#>
#> Call:
#> fastcpd.mv(data = data)
#>
#> Change points:
#> 2e+05 3e+05 500408 7e+05 8e+05
#>
#> Cost values:
#> 108.8674 -43.02536 1385124 -50.71083 377.4763 1381660
#>
#> Parameters:
#> segment 1 segment 2 segment 3 segment 4 segment 5
#> 1 0.001011082 50.0003528125 -0.016501485 0.0033379848 49.995348620
#> 2 -0.001572291 50.0047380197 0.027308617 -0.0002731255 49.995608790
#> 3 -0.001048280 49.9949663194 -0.000285863 -0.0022305825 50.004925725
#> 4 1.001716184 1.0053160771 99.837900270 1.0049251320 1.011184355
#> 5 0.003146441 -0.0061509213 0.155411984 0.0033208418 0.002837378
#> 6 0.001702982 -0.0009432632 -0.174243448 -0.0030404684 -0.001092170
#> 7 0.003146441 -0.0061509213 0.155411984 0.0033208418 0.002837378
#> 8 0.998570871 0.9954591727 100.257688784 0.9940791908 0.999139034
#> 9 0.001008951 -0.0062795529 0.070720757 0.0006369845 -0.001649613
#> 10 0.001702982 -0.0009432632 -0.174243448 -0.0030404684 -0.001092170
#> 11 0.001008951 -0.0062795529 0.070720757 0.0006369845 -0.001649613
#> 12 1.000100554 0.9971197656 100.588745799 0.9998191884 0.995957111
#> segment 6
#> 1 50.00765767
#> 2 49.97689987
#> 3 50.01812646
#> 4 100.43738403
#> 5 0.09929858
#> 6 0.04291338
#> 7 0.09929858
#> 8 99.71858356
#> 9 -0.09614237
#> 10 0.04291338
#> 11 -0.09614237
#> 12 99.88324093
result@thetas[seq_len(p), ]
#> segment 1 segment 2 segment 3 segment 4 segment 5 segment 6
#> 1 0.001011082 50.00035 -0.016501485 0.0033379848 49.99535 50.00766
#> 2 -0.001572291 50.00474 0.027308617 -0.0002731255 49.99561 49.97690
#> 3 -0.001048280 49.99497 -0.000285863 -0.0022305825 50.00493 50.01813
lapply(result@thetas[seq_len(p^2) + p, ], function(thetas) matrix(thetas, p))
#> $`segment 1`
#> [,1] [,2] [,3]
#> [1,] 1.001716184 0.003146441 0.001702982
#> [2,] 0.003146441 0.998570871 0.001008951
#> [3,] 0.001702982 0.001008951 1.000100554
#>
#> $`segment 2`
#> [,1] [,2] [,3]
#> [1,] 1.0053160771 -0.006150921 -0.0009432632
#> [2,] -0.0061509213 0.995459173 -0.0062795529
#> [3,] -0.0009432632 -0.006279553 0.9971197656
#>
#> $`segment 3`
#> [,1] [,2] [,3]
#> [1,] 99.8379003 0.15541198 -0.17424345
#> [2,] 0.1554120 100.25768878 0.07072076
#> [3,] -0.1742434 0.07072076 100.58874580
#>
#> $`segment 4`
#> [,1] [,2] [,3]
#> [1,] 1.004925132 0.0033208418 -0.0030404684
#> [2,] 0.003320842 0.9940791908 0.0006369845
#> [3,] -0.003040468 0.0006369845 0.9998191884
#>
#> $`segment 5`
#> [,1] [,2] [,3]
#> [1,] 1.011184355 0.002837378 -0.001092170
#> [2,] 0.002837378 0.999139034 -0.001649613
#> [3,] -0.001092170 -0.001649613 0.995957111
#>
#> $`segment 6`
#> [,1] [,2] [,3]
#> [1,] 100.43738403 0.09929858 0.04291338
#> [2,] 0.09929858 99.71858356 -0.09614237
#> [3,] 0.04291338 -0.09614237 99.88324093
#>