在我的研究中,我用几种方法检测时间序列异常值。其中一个是本地离群值因子( LOF )。为此,我使用 R 语言中 dbscan 包中的 lof 方法。 Description说:
如果数据中有多个 k 重复点,那么 lof 会因无限局部密度而变成NaN。在这种情况下,我们将lof设置为1。
但我没有看到1 lof,只有这种情况的Inf值(超过 k 数据中的重复点)。另外,我有总异常值的Inf值(例如,我在大气压的时间序列中有0值),而 k < 4。
代码示例:
library("fpc")
#Simulation of atmospheric pressure
for (i in 1:700) {
P__[i]<-1024
if (i%%4 == 0) {
rn<-runif(1, 0.5, 10.5)
P__[i]<-P__[i] + rn
}
}
#Simulated outlier
P__[150]<-0
P__<-as.matrix(P__)
lof_local<-as.matrix(dbscan::lof(x = P__,k = 4))
print (lof_local[150]) #Inf
print (lof_local[108]) #1.04278
lof_local<-as.matrix(dbscan::lof(x = P__,k = 10))
print (lof_local[150]) #Inf
print (lof_local[108]) #1.167718
lof_local<-as.matrix(dbscan::lof(x = P__,k = 20))
print (lof_local[150]) #Inf
print (lof_local[108]) #1.009134
lof_local<-as.matrix(dbscan::lof(x = P__,k = 50))
print (lof_local[150]) #Inf
print (lof_local[108]) #Inf. So, we have more than two Inf values
你能解释一下,为什么会这样?