R中的LOF(包dbscan)的Inf结果

时间:2017-12-25 21:12:56

标签: r

在我的研究中,我用几种方法检测时间序列异常值。其中一个是本地离群值因子 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

你能解释一下,为什么会这样?

0 个答案:

没有答案