Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ErrInvalidInitialValues = errors.New("the initial values provided are invalid")
ErrInvalidInitialValues indicates that the initial values provided are not valid to initialize a PeakDetector.
Functions ¶
Types ¶
type PeakDetector ¶
type PeakDetector interface {
// Initialize initializes the PeakDetector with its configuration and initialValues. The initialValues are the first
// values to be processed by the PeakDetector. The length of these values are used to configure the PeakDetector's
// lag (see description below). The PeakDetector will never return any signals for the initialValues.
//
// influence determines the influence of signals on the algorithm's detection threshold. If put at 0, signals have
// no influence on the threshold, such that future signals are detected based on a threshold that is calculated with
// a mean and standard deviation that is not influenced by past signals. If put at 0.5, signals have half the
// influence of normal data points. Another way to think about this is that if you put the influence at 0, you
// implicitly assume stationary (i.e. no matter how many signals there are, you always expect the time series to
// return to the same average over the long term). If this is not the case, you should put the influence parameter
// somewhere between 0 and 1, depending on the extent to which signals can systematically influence the time-varying
// trend of the data. E.g., if signals lead to a structural break of the long-term average of the time series, the
// influence parameter should be put high (close to 1) so the threshold can react to structural breaks quickly.
//
// threshold is the number of standard deviations from the moving mean above which the algorithm will classify a new
// datapoint as being a signal. For example, if a new datapoint is 4.0 standard deviations above the moving mean and
// the threshold parameter is set as 3.5, the algorithm will identify the datapoint as a signal. This parameter
// should be set based on how many signals you expect. For example, if your data is normally distributed, a
// threshold (or: z-score) of 3.5 corresponds to a signaling probability of 0.00047 (from this table), which implies
// that you expect a signal once every 2128 datapoints (1/0.00047). The threshold therefore directly influences how
// sensitive the algorithm is and thereby also determines how often the algorithm signals. Examine your own data and
// choose a sensible threshold that makes the algorithm signal when you want it to (some trial-and-error might be
// needed here to get to a good threshold for your purpose).
//
// lag determines how much your data will be smoothed and how adaptive the algorithm is to change in the long-term
// average of the data. The more stationary your data is, the more lags you should include (this should improve the
// robustness of the algorithm). If your data contains time-varying trends, you should consider how quickly you want
// the algorithm to adapt to these trends. I.e., if you put lag at 10, it takes 10 'periods' before the algorithm's
// threshold is adjusted to any systematic changes in the long-term average. So choose the lag parameter based on
// the trending behavior of your data and how adaptive you want the algorithm to be.
Initialize(influence, threshold float64, initialValues []float64) error
// Next processes the next value and determines its signal.
Next(value float64) Signal
// NextBatch processes the next values and determines their signals. Their signals will be returned in a slice equal
// to the length of the input.
NextBatch(values []float64) []Signal
}
PeakDetector detects peaks in realtime timeseries data using z-scores.
This is a Golang interface for the algorithm described by this StackOverflow answer: https://stackoverflow.com/a/22640362/14797322
Brakel, J.P.G. van (2014). "Robust peak detection algorithm using z-scores". Stack Overflow. Available at: https://stackoverflow.com/questions/22583391/peak-signal-detection-in-realtime-timeseries-data/22640362#22640362 (version: 2020-11-08). Deprecated: 原理需要设置阀值, 不推荐使用 [wangfeng on 2024/2/7 11:20]
func NewPeakDetector ¶
func NewPeakDetector() PeakDetector
NewPeakDetector creates a new PeakDetector. It must be initialized before use.
type PeeksAndValleys ¶
type PeeksAndValleys struct {
Data []float64 // 原始数据
Diff []float64 // 一阶差分
PosPeak []int // 波峰位置存储
PosValley []int // 波谷位置存储
Pcnt int // 所识别的波峰计数
Vcnt int // 所识别的波谷计数
}
PeeksAndValleys 波峰波谷
func (*PeeksAndValleys) String ¶
func (this *PeeksAndValleys) String() string