# Looking for a time-series jump test package

**URL:** <https://discourse.julialang.org/t/looking-for-a-time-series-jump-test-package/56773>\
**Category:** General Usage\
**Tags:** question\
**Created:** [March 9, 2021, 12:12am UTC](https://discourse.julialang.org/t/looking-for-a-time-series-jump-test-package/56773 "2021-03-09T00:12:22Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Yifan\_Liu](https://avatars.discourse-cdn.com/v4/letter/y/4da419/32.png) [@Yifan\_Liu](https://discourse.julialang.org/u/Yifan_Liu)\
**Post date:** [March 9, 2021, 12:12am UTC](https://discourse.julialang.org/t/looking-for-a-time-series-jump-test-package/56773/1 "2021-03-09T00:12:22Z")

</div>

Are there any Julia packages that can detect time-series jumps?

---

<div class="post-metadata">

**Author:** ![baggepinnen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/baggepinnen/32/693_2.png) [@baggepinnen](https://discourse.julialang.org/u/baggepinnen)\
**Post date:** [March 9, 2021, 5:23am UTC](https://discourse.julialang.org/t/looking-for-a-time-series-jump-test-package/56773/2 "2021-03-09T05:23:03Z")

</div>

There are many packages that do this, this being one

> **[GitHub - mfalt/EllZeroTrendFiltering.jl: ℓ0 Trend Filtering - Continuous,...](https://github.com/mfalt/EllZeroTrendFiltering.jl)**
>
> ℓ0 Trend Filtering - Continuous, Piecewise Linear Approximations with few segments. - GitHub - mfalt/EllZeroTrendFiltering.jl: ℓ0 Trend Filtering - Continuous, Piecewise Linear Approximations with ...

If your time series has some known structure or model, you might be able to exploit that as well.

---

<div class="post-metadata">

**Author:** ![Yifan\_Liu](https://avatars.discourse-cdn.com/v4/letter/y/4da419/32.png) [@Yifan\_Liu](https://discourse.julialang.org/u/Yifan_Liu)\
**Post date:** [March 9, 2021, 5:34am UTC](https://discourse.julialang.org/t/looking-for-a-time-series-jump-test-package/56773/3 "2021-03-09T05:34:18Z")

</div>

Thanks so much for pointing this out. Could show some other similar packages as well?

---

<div class="post-metadata">

**Author:** ![baggepinnen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/baggepinnen/32/693_2.png) [@baggepinnen](https://discourse.julialang.org/u/baggepinnen)\
**Post date:** [March 9, 2021, 5:50am UTC](https://discourse.julialang.org/t/looking-for-a-time-series-jump-test-package/56773/4 "2021-03-09T05:50:35Z")

</div>

If your signal has structure

> **[GitHub - baggepinnen/LTVModels.jl: Tools to estimate Linear Time-Varying...](https://github.com/baggepinnen/LTVModels.jl)**
>
> Tools to estimate Linear Time-Varying models in Julia - GitHub - baggepinnen/LTVModels.jl: Tools to estimate Linear Time-Varying models in Julia

If it has no particular structure, but repeats itself

> **[GitHub - baggepinnen/MatrixProfile.jl: Time-series analysis using the Matrix...](https://github.com/baggepinnen/MatrixProfile.jl)**
>
> Time-series analysis using the Matrix profile in Julia - GitHub - baggepinnen/MatrixProfile.jl: Time-series analysis using the Matrix profile in Julia

There are probably a lot of packages doing this in the economic organisation’s as well

---

<div class="post-metadata">

**Author:** ![baggepinnen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/baggepinnen/32/693_2.png) [@baggepinnen](https://discourse.julialang.org/u/baggepinnen)\
**Post date:** [March 9, 2021, 7:40am UTC](https://discourse.julialang.org/t/looking-for-a-time-series-jump-test-package/56773/5 "2021-03-09T07:40:37Z")

</div>

I had an old example laying around using LTVModels

```julia
using LTVModels, TotalLeastSquares
using LTVModels: matrices, seg_bellman, cost_lin, argmin_lin, cost_ss, argmin_ss
y0 = randn(100) # random input
# construct signal that changes nature after 100 samples
y = [filt(1, [1, 0.9], y0); filt(1, [1, 0.2, 0.6], y0 .+ 5)]
M = 1 # number of change points, computation time for this particular algorithm scales poorly with this choice

# construct input data to alg
x = hankel(y, 10)'
u = ones(1,size(x,2)) # this can be left as ones, not really important.
dn = iddata(x,u,x)
input = matrices(SimpleLTVModel(dn), dn)

@time V,t,a = seg_bellman(input,M, u, cost_ss, argmin_ss, doplot=false)
plot(y, layout=2, title="Signal")
plot!(V, sp=2, title="Change-point cost")

```

 ![changepointdetection](https://global.discourse-cdn.com/julialang/original/3X/a/a/aa3c5bcae5180b0383370a10d7019692764a1a51.png)
