2014-07-03 34 views
2

如何找到在下面的示例中以紅色表示VLIN指數:R:尋找(指數?)衰變的開始?

# Get the data as "tmpData" 
source("http://pastie.org/pastes/9350691/download") 

# Plot 
plot(tmpData,type="l") 
abline(v=49,col="red") 

First Plot

下面的方法是有希望的,但如何找到最大峯值?

library(RcppRoll) 
n <- 10 
smoothedTmpData <- roll_mean(tmpData,n) 
plot(-diff(smoothedTmpData),type="l") 
abline(v=49,col="red") 

Second Plot

回答

1

哪裏有單峯在梯度,如您的示例數據集,然後gwieshammer是正確的:你可以請使用which.max來查找。

對於存在多個可能的峯值的情況,您需要更復雜的方法。 R有很多峯值查找功能(質量不同)。一個適用於此數據的是。

library(RcppRoll) 
library(wmtsa) 

source("http://pastie.org/pastes/9350691/download") 

n <- 10 
smoothedTmpData <- roll_mean(tmpData, n) 

gradient <- -diff(smoothedTmpData) 

cwt <- wavCWT(gradient) 
tree <- wavCWTTree(cwt) 
(peaks <- wavCWTPeaks(tree)) 
## $x 
## [1] 4 52 
## 
## $y 
## [1] 302.6718 5844.3172 
## 
## attr(,"peaks") 
## branch itime iscale time scale extrema iendtime 
## 1  1  5  2 5  2 16620.58  4 
## 2  2 57  26 57 30 20064.64  52 
## attr(,"snr.min") 
## [1] 3 
## attr(,"scale.range") 
## [1] 1 28 
## attr(,"length.min") 
## [1] 10 
## attr(,"noise.span") 
## [1] 5 
## attr(,"noise.fun") 
## [1] "quantile" 
## attr(,"noise.min") 
## 5% 
## 4.121621 

因此,正確找到接近50的主峯,並且該程序在開始時拾取另一個較小的峯值。

+0

這確實是一個可以通用的方法。毆打我編輯這個問題,以反映非那麼簡單的情況...... – balin