Trabalho do Mestrado - Thiago Marques - Engenharia de produção - Tópicos Especiais em Mineração de dados - Prof. Eduardo Ogasawara

Implementação do método DBSCAN para detecção de anomalias e estratégias de melhoria

Carregando os banco de dados

load("har_examples.RData")

Selecionando o banco de dados 17 da base de dados Harbinger e transformando a variável em fator

dados = har_examples$example17
dados$event = factor(dados$event, labels=c("FALSE", "TRUE"))
head(dados)
##       serie event
## 1 1.0000000 FALSE
## 2 0.9689124 FALSE
## 3 0.8775826 FALSE
## 4 0.7316889 FALSE
## 5 0.5403023 FALSE
## 6 0.3153224 FALSE

Quantas anomalias tem anotadas na serie?

sum(dados$event=="TRUE")
## [1] 8

Plotando a série temporal original

plot_ts(x = 1:length(dados$serie), y = dados$serie )

Plotando as anomalias da série temporal

dados$indice = 1:length(dados$serie)
my_ts =  ts(dados$serie,dados$indice)
plot.ts(my_ts)
points(dados$indice[dados$event=="TRUE"],dados$serie[dados$event==TRUE], pch = 20, col = "red")

Pré-processamento da série - Criando janelas deslizantes de tamanho 10

data10 <- ts_data(dados$serie, 10)
ts_head(data10)
##             t9        t8         t7         t6         t5         t4         t3
## [1,] 1.0000000 0.9689124  0.8775826  0.7316889  0.5403023  0.3153224  0.0707372
## [2,] 0.9689124 0.8775826  0.7316889  0.5403023  0.3153224  0.0707372 -0.1782461
## [3,] 0.8775826 0.7316889  0.5403023  0.3153224  0.0707372 -0.1782461 -0.4161468
## [4,] 0.7316889 0.5403023  0.3153224  0.0707372 -0.1782461 -0.4161468 -0.6281736
## [5,] 0.5403023 0.3153224  0.0707372 -0.1782461 -0.4161468 -0.6281736 -0.8011436
## [6,] 0.3153224 0.0707372 -0.1782461 -0.4161468 -0.6281736 -0.8011436 -1.4555059
##              t2         t1         t0
## [1,] -0.1782461 -0.4161468 -0.6281736
## [2,] -0.4161468 -0.6281736 -0.8011436
## [3,] -0.6281736 -0.8011436 -1.4555059
## [4,] -0.8011436 -1.4555059 -0.9899925
## [5,] -1.4555059 -0.9899925 -0.9941297
## [6,] -0.9899925 -0.9941297 -0.9364567
#preproc <- ts_norm_an()
#preproc <- fit(preproc, data10)
#tst <- transform(preproc, data10)
#summary(tst[,10])
#plot_ts(y=tst[1,]) + theme(text = element_text(size=16))

Explicando e Aplicando o método de detecção de anomalia não supervisionado - Dbscan

  • Características do algoritmo:

    • Eps: Raio máximo em que dois pontos podem estar para serem considerados do mesmo cluster.
    • MinPts: Número mínimo de pontos em uma região necessários para garantir uma densidade desejada.
  • Existem três tipos de pontos:

- Núcleos: Um ponto é considerado núcleo quando possui MinPts pontos ou mais dentro de um raio de Eps de distância.
- Bordas: Um ponto é considerado borda quando não possui MinPts dentro de um raio Eps de distância, porém está inserido dentro de um raio Eps       de um outro ponto no qual é núcleo.
- Ruídos(ou Outliers): Um ponto é considerado um ruído quando este não está presente no raio Eps de um núcleo e nem possui MinPts dentro do seu raio Eps.
  • Passos para o algoritmo:
  1. Escolher um ponto arbitrário;
  2. Classificá-lo como Núcleo, Borda ou Ruído;
  3. Se o ponto do momento é um Núcleo, todos os pontos à sua volta com um raio de distância Eps formam um cluster. Reclassificações podem ocorrer;
  4. Depois de classificar todos os pontos da região do núcleo, volta-se à etapa 1;
  5. O algoritmo termina quando todos os pontos tiverem sido classificados corretamente;

  • Qualquer ponto x no conjunto de dados, com uma contagem de vizinhos maior ou igual a MinPts, é marcado como ponto central.
  • Dizemos que x é um ponto de Bordas, se o número de seus vizinhos for menor que MinPts, mas ele pertence à vizinhança de algum ponto central z.
  • Y é um ponto de Bordas.
  • Se um ponto não é um ponto central nem um ponto de fronteira, então ele é chamado de ponto de ruído ou outlier.

Escolha do eps ótimo por meio do k-nearest neighbor distances

datamatrix <- matrix(data10,nrow = 104,ncol = 10)

dbscan::kNNdistplot(datamatrix, k =  3)
abline(h = 0.53, lty = 2)

TESTE BINSEG

#library(changepoint)
#library(bcp)
#library(strucchange)
#
##ref:https://rpubs.com/narasimhagvl/change_point
#
#set.seed(1)
#dados = har_examples$example17
#dados$event = factor(dados$event, labels=c("FALSE", "TRUE"))
#
#data10 <- ts_data(dados$serie, 10)
##dados$indice = 1:length(dados$serie)
##my_ts =  ts(dados$serie,dados$indice)
#
#
##AMOC
##cpt1 = cpt.var(datamatrix, method = "AMOC")
##PELT
##cpt2  <- cpt.mean(datamatrix, method = "PELT", penalty = "CROPS", pen.value = c(1,25))
##pen.value=0.8,
##summary(pt2)
#
##plot(cpt2, diagnostic = TRUE)
#
##bcp
#
##bcp_x <- bcp(datamatrix, return.mcmc = TRUE)
##plot(bcp_x)
#
##bcp_sum <- as.data.frame(summary(bcp_x))
##bcp_sum
#
##bcp_sum$id <- 1:dim(datamatrix)[1]
##(sel <- bcp_sum[which(bcp_x$posterior.prob > 0.7), ])
#
## ref: https://stats.stackexchange.com/questions/611583/change-point-detection-of-time-series
#
#distancias = kNNdist(data10, k = 3, all = TRUE)
##tsdata <- ts_data(dados$serie, 10)
##tsdata = my_ts
##moc_cp <- cpt.var(cumsum(distancias), method = "AMOC")
##amoc_cp <- cpt.mean(cumsum(distancias), method = "AMOC")
##amoc_cp <- cpt.meanvar(cumsum(distancias), method = "AMOC")
#
# # Use the BinSeg method to detect change points in the time series using var , mean and meanvar
#Binseg_cp <- cpt.meanvar(cumsum(distancias), method = "BinSeg")
#
#
# # Print the location and value of each change point using the AMOC method
#for (i in 1:length(Binseg_cp@cpts))  {
#cat("Binseg change point for diff", i, "at location", Binseg_cp@cpts[i], "with value", #distancias[Binseg_cp@cpts[i] ], "\n")
#
#dbscan::kNNdistplot(datamatrix, k =  3)
#abline(h = distancias[Binseg_cp@cpts[i] ], lty = 2)
#}
library(dbscan)
#referências: 
#https://gabriellm.medium.com/entendendo-dbscan-770f680d9160
#http://www.sthda.com/english/wiki/wiki.php?id_contents=7940


dbscanResult <- dbscan::dbscan(datamatrix, eps=0.53, minPts=3) # clustering
#0.53
dbscanResult
## DBSCAN clustering for 104 objects.
## Parameters: eps = 0.53, minPts = 3
## Using euclidean distances and borderpoints = TRUE
## The clustering contains 20 cluster(s) and 8 noise points.
## 
##  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 
##  8 20  7  4  4  4  4  4  4  4  4  3  4  4  4  4  4  4  4  3  3 
## 
## Available fields: cluster, eps, minPts, dist, borderPoints
hullplot(datamatrix, dbscanResult, main="DBSCAN") 

library("fpc")

db <- fpc::dbscan(datamatrix, eps= 0.53, MinPts =3)
print(db)
## dbscan Pts=104 MinPts=3 eps=0.53
##        0  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## border 8  3 2 2 2 2 2 2 2 2  2  2  2  2  2  2  2  2  2  2  2
## seed   0 17 5 2 2 2 2 2 2 2  2  1  2  2  2  2  2  2  2  1  1
## total  8 20 7 4 4 4 4 4 4 4  4  3  4  4  4  4  4  4  4  3  3
plot(db, datamatrix, main = "DBSCAN", frame = FALSE)

library("factoextra")
fviz_cluster(db, datamatrix, stand = FALSE, frame = FALSE, geom = "point")

Clusters com Anomalia indicados pelo Dbscan

datamatrix_df = data.frame(datamatrix)

datamatrix_df$clusters =  dbscanResult$cluster

datamatrix_df_anomalias = datamatrix_df %>% filter(clusters==0)
datamatrix_df_anomalias
##           X1         X2          X3          X4           X5          X6
## 1  0.8775826  0.7316889  0.54030231  0.31532236  0.070737202 -0.17824606
## 2 -0.9364567 -0.8205594 -0.65364362 -0.44608749 -0.210795799  0.03760215
## 3 -0.8205594 -0.6536436 -0.44608749 -0.21079580  0.037602153  0.28366219
## 4 -0.8390715 -0.6783939 -0.47553693 -0.24311342  0.004425698  0.25168965
## 5 -0.7023971 -0.5044627 -0.27516334 -0.02875563  0.219439963  0.45399184
## 6 -1.4978881 -0.8733046 -0.72562681 -0.53283302 -0.306910254 -0.06190529
## 7 -0.7256268 -0.5328330 -0.30691025 -0.06190529  0.186948637  0.42417901
## 8 -0.5328330 -0.3069103 -0.06190529  0.18694864  0.424179007  0.63503598
##           X7         X8         X9        X10 clusters
## 1 -0.4161468 -0.6281736 -0.8011436 -1.4555059        0
## 2  0.2836622  0.5120855  0.7086698  1.3923959        0
## 3  0.5120855  0.7086698  1.3923959  0.9601703        0
## 4  0.4833048  0.6848703  0.8438540  1.4815744        0
## 5  0.6603167  0.8255863  0.9395249  1.5262519        0
## 6  0.1869486  0.4241790  0.6350360  0.8064095        0
## 7  0.6350360  0.8064095  0.9276444  0.9912028        0
## 8  0.8064095  0.9276444  0.9912028  1.5243366        0
datamatrix_df_anomalias_t = data.frame(t(datamatrix_df_anomalias))
datamatrix_df_anomalias_t = datamatrix_df_anomalias_t[-11,]
datamatrix_df_anomalias_t
##             X1          X2          X3           X4          X5          X6
## X1   0.8775826 -0.93645669 -0.82055936 -0.839071529 -0.70239706 -1.49788814
## X2   0.7316889 -0.82055936 -0.65364362 -0.678393850 -0.50446272 -0.87330464
## X3   0.5403023 -0.65364362 -0.44608749 -0.475536928 -0.27516334 -0.72562681
## X4   0.3153224 -0.44608749 -0.21079580 -0.243113423 -0.02875563 -0.53283302
## X5   0.0707372 -0.21079580  0.03760215  0.004425698  0.21943996 -0.30691025
## X6  -0.1782461  0.03760215  0.28366219  0.251689650  0.45399184 -0.06190529
## X7  -0.4161468  0.28366219  0.51208548  0.483304759  0.66031671  0.18694864
## X8  -0.6281736  0.51208548  0.70866977  0.684870318  0.82558628  0.42417901
## X9  -0.8011436  0.70866977  1.39239594  0.843853959  0.93952489  0.63503598
## X10 -1.4555059  1.39239594  0.96017029  1.481574372  1.52625193  0.80640949
##              X7          X8
## X1  -0.72562681 -0.53283302
## X2  -0.53283302 -0.30691025
## X3  -0.30691025 -0.06190529
## X4  -0.06190529  0.18694864
## X5   0.18694864  0.42417901
## X6   0.42417901  0.63503598
## X7   0.63503598  0.80640949
## X8   0.80640949  0.92764437
## X9   0.92764437  0.99120281
## X10  0.99120281  1.52433659

O boxplot detectaria as anomalias?

graphics::boxplot(datamatrix_df_anomalias_t)

Estrategias para detectar a anomalia dentre as linhas anômalas apontadas pelo método

#máximo do desvio médio absoluto 
max_mean = function(dados)  {
  a = which.max(abs(dados - mean(dados)))
  b = dados[a]
  #c = list(a,b)
  return( b )
}

max_median = function(dados)  {
  a = which.max(abs(dados - median(dados)))
  b = dados[a]
  #c = list(a,b)
  return( b )
}

max_log = function(dados)  {
  a = which.max(log(abs(dados) - median(dados)))
  b = dados[a]
  #c = list(a,b)
  return( b )
}
list_v_max_mean = apply(datamatrix_df_anomalias_t,2,max_mean) 
list_v_max_mean = unique(list_v_max_mean)
list_v_max_mean
## [1] -1.4555059  1.3923959  1.4815744  1.5262519 -1.4978881 -0.7256268  1.5243366
list_v_max_median = apply(datamatrix_df_anomalias_t,2,max_median) 
list_v_max_median = unique(list_v_max_median)
list_v_max_median
## [1] -1.4555059  1.3923959  1.4815744  1.5262519 -1.4978881 -0.7256268 -0.5328330
list_v_max_log = apply(datamatrix_df_anomalias_t,2,max_log) 
list_v_max_log = unique(list_v_max_log)
list_v_max_log
## [1] -1.4555059  1.3923959  1.4815744  1.5262519 -1.4978881  0.9912028  1.5243366
vetor_evento = dados$serie[dados$event=="TRUE"]

compara_anomalias = function (dados1,dados2){
  a = unique(round(dados1,6)) %in% unique(round(dados2,6))
  b = table(a)
  c = dados1[a == F]
  d = dados1[a == T]
  e = list(a,b,c,d)
  return(e)
}
c1 = compara_anomalias(list_v_max_mean,vetor_evento)
c1
## [[1]]
## [1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE
## 
## [[2]]
## a
## FALSE  TRUE 
##     1     6 
## 
## [[3]]
## [1] -0.7256268
## 
## [[4]]
## [1] -1.455506  1.392396  1.481574  1.526252 -1.497888  1.524337
c2 = compara_anomalias(list_v_max_median,vetor_evento)
c2
## [[1]]
## [1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE
## 
## [[2]]
## a
## FALSE  TRUE 
##     2     5 
## 
## [[3]]
## [1] -0.7256268 -0.5328330
## 
## [[4]]
## [1] -1.455506  1.392396  1.481574  1.526252 -1.497888
c3 = compara_anomalias(list_v_max_log,vetor_evento)
c3
## [[1]]
## [1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE
## 
## [[2]]
## a
## FALSE  TRUE 
##     1     6 
## 
## [[3]]
## [1] 0.9912028
## 
## [[4]]
## [1] -1.455506  1.392396  1.481574  1.526252 -1.497888  1.524337

Plotando as anomalias detectadas com max_mean

dados$event_max_mean = dados$serie %in% c1[[4]]  
plot.ts(my_ts)
points(dados$indice[dados$event_max_mean == "TRUE"],dados$serie[dados$event_max_mean == "TRUE"], pch = 20, col = "red")

Plotando as anomalias detectadas com max_median

dados$event_max_median =   dados$serie %in% c2[[4]]  
plot.ts(my_ts)
points(dados$indice[dados$event_max_median == "TRUE"],dados$serie[dados$event_max_median == "TRUE"], pch = 20, col = "red")

Plotando as anomalias detectadas com max_log

dados$event_max_log =   dados$serie %in% c3[[4]]  
plot.ts(my_ts)
points(dados$indice[dados$event_max_log == "TRUE"],dados$serie[dados$event_max_log == "TRUE"], pch = 20, col = "red")

Tabela Comparativa

dados_comparativos_DBSCAN = dados %>% filter(event == "TRUE")
dados_comparativos_DBSCAN  %>% 
  kbl() %>%
  kable_styling()
serie event indice event_max_mean event_max_median event_max_log
-1.455506 TRUE 12 TRUE TRUE TRUE
1.392396 TRUE 24 TRUE TRUE TRUE
-1.515969 TRUE 38 FALSE FALSE FALSE
1.481574 TRUE 50 TRUE TRUE TRUE
-1.530320 TRUE 64 FALSE FALSE FALSE
1.526252 TRUE 76 TRUE TRUE TRUE
-1.497888 TRUE 90 TRUE TRUE TRUE
1.524337 TRUE 102 TRUE FALSE TRUE

Normalizando e padronizando

#padronização

#máximo do desvio médio absoluto modificada
max_mean_mod = function(dados)  {
  dados_scale = scale(dados)
  a = which.max(abs(dados_scale - mean(dados_scale)))
  b = dados[a]
  #c = list(a,b)
  return( b )
}

#máximo do desvio mediano absoluto modificada
max_median_mod = function(dados)  {
  dados_scale = scale(dados)
  a = which.max(abs(dados - median(dados)))
  b = dados[a]
  #c = list(a,b)
  return( b )
}

list_v_max_mod = apply(datamatrix_df_anomalias_t,2,max_mean_mod) 
list_v_max_mod
##         X1         X2         X3         X4         X5         X6         X7 
## -1.4555059  1.3923959  1.3923959  1.4815744  1.5262519 -1.4978881 -0.7256268 
##         X8 
##  1.5243366
compara_anomalias(list_v_max_mod,vetor_evento)
## [[1]]
## [1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE
## 
## [[2]]
## a
## FALSE  TRUE 
##     1     6 
## 
## [[3]]
##        X6 
## -1.497888 
## 
## [[4]]
##         X1         X2         X3         X4         X5         X7         X8 
## -1.4555059  1.3923959  1.3923959  1.4815744  1.5262519 -0.7256268  1.5243366
list_v_max_median_mod = apply(datamatrix_df_anomalias_t,2,max_median_mod) 
list_v_max_median_mod
##         X1         X2         X3         X4         X5         X6         X7 
## -1.4555059  1.3923959  1.3923959  1.4815744  1.5262519 -1.4978881 -0.7256268 
##         X8 
## -0.5328330
compara_anomalias(list_v_max_median_mod,vetor_evento)
## [[1]]
## [1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE
## 
## [[2]]
## a
## FALSE  TRUE 
##     2     5 
## 
## [[3]]
##         X6         X7 
## -1.4978881 -0.7256268 
## 
## [[4]]
##        X1        X2        X3        X4        X5        X8 
## -1.455506  1.392396  1.392396  1.481574  1.526252 -0.532833
#Normalização Min-max

#máximo do desvio médio absoluto modificada
max_mean_mod2 = function(dados)  {
  #preproc2 = preProcess(dados, method = c("range"))
  #dados_normalizado = predict(preproc2, dados)
  a = which.max(abs(dados - mean(dados)))
  ##b = dados[a]
  #c = list(a,b)
  return(a)
}

#máximo do desvio mediano absoluto modificada
max_median_mod2 = function(dados)  {
  #preproc2 = preProcess(dados, method=c("range"))
  #dados_normalizado = predict(preproc2, dados)
  a = which.max(abs(dados - median(dados)))
  #b = dados[a]
  #c = list(a,b)
  return( a )
}

preproc2 = preProcess(datamatrix_df_anomalias_t, method = c("range"))
dados_normalizado = predict(preproc2, datamatrix_df_anomalias_t)

list_v_max_mod2_posicoes = apply(dados_normalizado,2,max_mean_mod2) 
list_v_max_mod2_posicoes
## X1 X2 X3 X4 X5 X6 X7 X8 
## 10 10  9 10 10  1  1 10
list_v_max_mod2 = c()

for (i in 1:length(list_v_max_mod2_posicoes) ) {

  list_v_max_mod2[i] =  datamatrix_df_anomalias_t[i][[1]][ list_v_max_mod2_posicoes[[i]] ]

}

list_v_max_mod2
## [1] -1.4555059  1.3923959  1.3923959  1.4815744  1.5262519 -1.4978881 -0.7256268
## [8]  1.5243366
compara_anomalias(list_v_max_mod2,vetor_evento)
## [[1]]
## [1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE
## 
## [[2]]
## a
## FALSE  TRUE 
##     1     6 
## 
## [[3]]
## [1] -1.497888
## 
## [[4]]
## [1] -1.4555059  1.3923959  1.3923959  1.4815744  1.5262519 -0.7256268  1.5243366
list_v_max_median_mod2= apply(dados_normalizado,2,max_median_mod2) 
list_v_max_median_mod2
## X1 X2 X3 X4 X5 X6 X7 X8 
## 10 10  9 10 10  1  1  1
for (i in 1:length(list_v_max_median_mod2) ) {

  list_v_max_median_mod2[i] =  datamatrix_df_anomalias_t[i][[1]][ list_v_max_median_mod2[[i]] ]

}

compara_anomalias(list_v_max_median_mod2,vetor_evento)
## [[1]]
## [1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE
## 
## [[2]]
## a
## FALSE  TRUE 
##     2     5 
## 
## [[3]]
##         X6         X7 
## -1.4978881 -0.7256268 
## 
## [[4]]
##        X1        X2        X3        X4        X5        X8 
## -1.455506  1.392396  1.392396  1.481574  1.526252 -0.532833

Estudando as distribuições empíricas

#x1
descdist(datamatrix_df_anomalias_t$X1,discrete=F)

## summary statistics
## ------
## min:  -1.455506   max:  0.8775826 
## median:  -0.05375443 
## mean:  -0.09435827 
## estimated sd:  0.7433202 
## estimated skewness:  -0.4227883 
## estimated kurtosis:  2.46643
plotdist(datamatrix_df_anomalias_t$X1, histo = TRUE, demp = TRUE)

fit_x1 = fitdistrplus::fitdist(datamatrix_df_anomalias_t$X1,"unif")

ks.test(datamatrix_df_anomalias_t$X1, "punif", fit_x1$estimate[[1]],fit_x1$estimate[[2]] )
## 
##  Exact one-sample Kolmogorov-Smirnov test
## 
## data:  datamatrix_df_anomalias_t$X1
## D = 0.18047, p-value = 0.8451
## alternative hypothesis: two-sided
#x2
descdist(datamatrix_df_anomalias_t$X2,discrete=F)

## summary statistics
## ------
## min:  -0.9364567   max:  1.392396 
## median:  -0.08659682 
## mean:  -0.01331274 
## estimated sd:  0.7456738 
## estimated skewness:  0.5565226 
## estimated kurtosis:  2.625219
plotdist(datamatrix_df_anomalias_t$X2, histo = TRUE, demp = TRUE)

fit_x1 = fitdistrplus::fitdist(datamatrix_df_anomalias_t$X2,"unif")

ks.test(datamatrix_df_anomalias_t$X2, "punif", fit_x1$estimate[[1]],fit_x1$estimate[[2]] )
## 
##  Exact one-sample Kolmogorov-Smirnov test
## 
## data:  datamatrix_df_anomalias_t$X2
## D = 0.19359, p-value = 0.7815
## alternative hypothesis: two-sided

Estudando a distribuição dos 2 não detectados por ambos os métodos

datamatrix_df$indice = 1:dim(datamatrix_df)[1]
datamatrix_df_nao_detectados = datamatrix_df %>% filter ( indice %in% c(29:38) )
datamatrix_df_nao_detectados_t = data.frame(t(datamatrix_df_nao_detectados[-c(11,12)]))
datamatrix_df_nao_detectados_t
##             X1         X2         X3         X4         X5         X6
## X1   0.7539023  0.5679242  0.3466353  0.1037944 -0.1455000 -0.3857479
## X2   0.5679242  0.3466353  0.1037944 -0.1455000 -0.3857479 -0.6020119
## X3   0.3466353  0.1037944 -0.1455000 -0.3857479 -0.6020119 -0.7808457
## X4   0.1037944 -0.1455000 -0.3857479 -0.6020119 -0.7808457 -0.9111303
## X5  -0.1455000 -0.3857479 -0.6020119 -0.7808457 -0.9111303 -1.5159687
## X6  -0.3857479 -0.6020119 -0.7808457 -0.9111303 -1.5159687 -0.9971722
## X7  -0.6020119 -0.7808457 -0.9111303 -1.5159687 -0.9971722 -0.9475798
## X8  -0.7808457 -0.9111303 -1.5159687 -0.9971722 -0.9475798 -0.8390715
## X9  -0.9111303 -1.5159687 -0.9971722 -0.9475798 -0.8390715 -0.6783939
## X10 -1.5159687 -0.9971722 -0.9475798 -0.8390715 -0.6783939 -0.4755369
##             X7           X8           X9          X10
## X1  -0.6020119 -0.780845684 -0.911130262 -1.515968699
## X2  -0.7808457 -0.911130262 -1.515968699 -0.997172156
## X3  -0.9111303 -1.515968699 -0.997172156 -0.947579804
## X4  -1.5159687 -0.997172156 -0.947579804 -0.839071529
## X5  -0.9971722 -0.947579804 -0.839071529 -0.678393850
## X6  -0.9475798 -0.839071529 -0.678393850 -0.475536928
## X7  -0.8390715 -0.678393850 -0.475536928 -0.243113423
## X8  -0.6783939 -0.475536928 -0.243113423  0.004425698
## X9  -0.4755369 -0.243113423  0.004425698  0.251689650
## X10 -0.2431134  0.004425698  0.251689650  0.483304759

X3 segue uma normal e não uma uniforme, como desconfiávamos

#x3
descdist(datamatrix_df_nao_detectados_t$X3,discrete=F)

## summary statistics
## ------
## min:  -1.515969   max:  0.3466353 
## median:  -0.6914288 
## mean:  -0.5835527 
## estimated sd:  0.5664981 
## estimated skewness:  0.1901468 
## estimated kurtosis:  2.530191
plotdist(datamatrix_df_nao_detectados_t$X3, histo = TRUE, demp = TRUE)

fit_x3 = fitdistrplus::fitdist(datamatrix_df_nao_detectados_t$X3,"norm")

a=list()
a[[1]] = ks.test(datamatrix_df_nao_detectados_t$X3, "punif", fit_x3$estimate[[1]],fit_x3$estimate[[2]] )
a[[2]] = ks.test(datamatrix_df_nao_detectados_t$X3, "pnorm", fit_x3$estimate[[1]],fit_x3$estimate[[2]] )
a
## [[1]]
## 
##  Exact one-sample Kolmogorov-Smirnov test
## 
## data:  datamatrix_df_nao_detectados_t$X3
## D = 0.6, p-value = 0.0005682
## alternative hypothesis: two-sided
## 
## 
## [[2]]
## 
##  Exact one-sample Kolmogorov-Smirnov test
## 
## data:  datamatrix_df_nao_detectados_t$X3
## D = 0.14323, p-value = 0.9686
## alternative hypothesis: two-sided

X4 segue uma normal e não uma uniforme, como desconfiávamos

#x4
descdist(datamatrix_df_nao_detectados_t$X4,discrete=F)

## summary statistics
## ------
## min:  -1.515969   max:  0.1037944 
## median:  -0.8099586 
## mean:  -0.7021234 
## estimated sd:  0.4652038 
## estimated skewness:  0.188818 
## estimated kurtosis:  3.228361
plotdist(datamatrix_df_nao_detectados_t$X4, histo = TRUE, demp = TRUE)

fit_x4 = fitdistrplus::fitdist(datamatrix_df_nao_detectados_t$X4,"norm")

a=list()
a[[1]] = ks.test(datamatrix_df_nao_detectados_t$X4, "punif", fit_x4$estimate[[1]],fit_x4$estimate[[2]] )
a[[2]] = ks.test(datamatrix_df_nao_detectados_t$X4, "pnorm", fit_x4$estimate[[1]],fit_x4$estimate[[2]] )
a
## [[1]]
## 
##  Exact one-sample Kolmogorov-Smirnov test
## 
## data:  datamatrix_df_nao_detectados_t$X4
## D = 0.61245, p-value = 0.0003909
## alternative hypothesis: two-sided
## 
## 
## [[2]]
## 
##  Exact one-sample Kolmogorov-Smirnov test
## 
## data:  datamatrix_df_nao_detectados_t$X4
## D = 0.17079, p-value = 0.8868
## alternative hypothesis: two-sided

X5 segue uma logística e não uma uniforme, nem normal, como desconfiávamos

#x5
descdist(datamatrix_df_nao_detectados_t$X5,discrete=F)

## summary statistics
## ------
## min:  -1.515969   max:  -0.1455 
## median:  -0.8099586 
## mean:  -0.7803422 
## estimated sd:  0.3708263 
## estimated skewness:  -0.2488493 
## estimated kurtosis:  4.246206
plotdist(datamatrix_df_nao_detectados_t$X5, histo = TRUE, demp = TRUE)

fit_x5 = fitdistrplus::fitdist(datamatrix_df_nao_detectados_t$X5,"logis")

a=list()
a[[1]] = ks.test(datamatrix_df_nao_detectados_t$X5, "punif", fit_x5$estimate[[1]],fit_x5$estimate[[2]] )
a[[2]] = ks.test(datamatrix_df_nao_detectados_t$X5, "pnorm", fit_x5$estimate[[1]],fit_x5$estimate[[2]] )
a[[3]] = ks.test(datamatrix_df_nao_detectados_t$X5, "plogis", fit_x5$estimate[[1]],fit_x5$estimate[[2]] )
a
## [[1]]
## 
##  Exact one-sample Kolmogorov-Smirnov test
## 
## data:  datamatrix_df_nao_detectados_t$X5
## D = 0.61853, p-value = 0.0003243
## alternative hypothesis: two-sided
## 
## 
## [[2]]
## 
##  Exact one-sample Kolmogorov-Smirnov test
## 
## data:  datamatrix_df_nao_detectados_t$X5
## D = 0.17898, p-value = 0.8519
## alternative hypothesis: two-sided
## 
## 
## [[3]]
## 
##  Exact one-sample Kolmogorov-Smirnov test
## 
## data:  datamatrix_df_nao_detectados_t$X5
## D = 0.14348, p-value = 0.9681
## alternative hypothesis: two-sided

Comparando os ajustes pelo BIC E AIC

fit_x5.1 = fitdistrplus::fitdist(datamatrix_df_nao_detectados_t$X5,"unif")
fit_x5.2 = fitdistrplus::fitdist(datamatrix_df_nao_detectados_t$X5,"logis")
fit_x5.3 = fitdistrplus::fitdist(datamatrix_df_nao_detectados_t$X5,"norm")
#fit_x5.4 = fitdistrplus::fitdist(datamatrix_df_nao_detectados_t$X5,"lnorm")
#fit_x5.5 = fitdistrplus::fitdist(datamatrix_df_nao_detectados_t$X5,"exp")
#fit_x5.6 = fitdistrplus::fitdist(datamatrix_df_nao_detectados_t$X5,"gamma")
#fit_x5.7 = fitdistrplus::fitdist(datamatrix_df_nao_detectados_t$X5,"beta")


#teste = gofstat(list(fit_x5.1, fit_x5.2,fit_x5.3,fit_x5.4,fit_x5.5,fit_x5.6,fit_x5.7),fitnames = c("Uniforme", "logística","Normal","lognormal","Exponencial","Gamma","Beta"))
teste = gofstat(list(fit_x5.1, fit_x5.2,fit_x5.3),fitnames = c("Uniforme", "logística","Normal"))

teste
## Goodness-of-fit statistics
##                               Uniforme  logística     Normal
## Kolmogorov-Smirnov statistic 0.2785541 0.14347851 0.16883171
## Cramer-von Mises statistic   0.1122213 0.02691184 0.03584558
## Anderson-Darling statistic         Inf 0.20734582 0.25846406
## 
## Goodness-of-fit criteria
##                                Uniforme logística   Normal
## Akaike's Information Criterion 10.30306  11.30462 11.48473
## Bayesian Information Criterion 10.90823  11.90979 12.08990
names(which.min(teste$aic))
## [1] "Uniforme"
# versao do histograma que nao deu certo

#load("har_examples.RData")
#dados = har_examples$example17
#dados$event = factor(dados$event, labels=c("FALSE", "TRUE"))
#head(dados)
#
#data10 <- ts_data(dados$serie, 10)
#data10_df = data.frame(data10)
#
## Create a histogram of the time series data
#
#teste=list()
#dados_anomalia_hist = list()
#anomalies <- numeric(dim(data10_df)[1])
#for (i in 1:dim(data10_df)[1]) {
#
#  for (j in 1:dim(data10_df)[2]) {
#
#  hist_data <- hist(data10_df[[j]], plot = FALSE)
#  
#  # Calculate bin edges and midpoints
#  bin_edges <- hist_data$breaks
#
#  bin_index <- findInterval(data10_df[[j]][i], bin_edges)
#
#  if (bin_index < 1)
#    bin_index <- 1
#  lower_bound <- bin_edges[bin_index]
#  if (bin_index < length(bin_edges))
#    upper_bound <- bin_edges[bin_index+1]
#  else
#    upper_bound <- bin_edges[bin_index]
#  
#if ( data10_df[[j]][i] < lower_bound || data10_df[[j]][i] > upper_bound || hist_data$density[bin_index] < 0.5) {
#  
#  #anomalies[j] <- 1  
#    fit_x.1 = fitdistrplus::fitdist(data10_df[[j]],"unif")
#    fit_x.2 = fitdistrplus::fitdist(data10_df[[j]],"logis")
#    fit_x.3 = fitdistrplus::fitdist(data10_df[[j]],"norm")
#    teste[[j]] = gofstat(list(fit_x.1, fit_x.2,fit_x.3),fitnames = c("Uniforme", "logística","Normal"))
#    cat("Pelo método do histograma, essa janela foi considerada anomalia :", data10_df[[j]], "\n")
#    cat("---------------------------------------------------------------------------------------","\n")
#    cat("Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao:", names(which.min(teste[[j]]$bic)), "\n")
#    cat("---------------------------------------------------------------------------------------")
#    cat("Pela métrica AIC, A distribuicao melhor se ajustou a distribuicao:", names(which.min(teste[[j]]$aic)), "\n")
#    cat("Observação",c(i,j),"\n")
#    dados_anomalia_hist[[j]] = list(data10_df[[j]])
#    dados_anomalia_hist[[j]] = c(i,j)
#    #anomalies[i] <- 1 
#  }  
# }
#}

#anomaly_indices <- which(anomalies == 1)
#anomaly_indices

# if (all(between(as.numeric(data10_df[i, ]), 0, 1))) {
  #
  #   fit_x3 = fitdistrplus::fitdist(as.numeric(data10_df[i, ]), "gamma")
  #   fit_x7 = fitdistrplus::fitdist(as.numeric(data10_df[i, ]), "beta")
  #
  #   teste[[i]] = gofstat(list(fit_x3,fit_x7),
  #                        fitnames = c("Gamma","Beta"))
  # }
#load("har_examples.RData")
##dados = har_examples$example15
##dados = har_examples$example16
#dados = har_examples$example17
##dados = har_examples$example18
##dados = rexp(100)
#
##dados$event = factor(dados$event, labels=c("FALSE", "TRUE"))
##head(dados)
#
#data10 <- ts_data(dados$serie, 10)
##data10 <- ts_data(dados, 10)
#
#datamatrix <- matrix(data10,nrow = 104,ncol = 10)
#
#dbscanResult <- dbscan::dbscan(datamatrix, eps=0.53 , minPts=3) # clustering
#
#dbscanResult
#
#datamatrix_df = data.frame(datamatrix)
#
#datamatrix_df$clusters =  dbscanResult$cluster
#
#datamatrix_df_anomalias = datamatrix_df %>% filter(clusters==0)
#datamatrix_df_anomalias = datamatrix_df_anomalias[,-11]
#
#data10_df = datamatrix_df_anomalias
#
#teste = list()
#dados_anomalia = list()
#nomes_dist_aic = list()
#nomes_dist_bic = list()
#
#for (i in 1:dim(data10_df)[1]) {
#  if (all(data10_df[i,] > 0)) {
#    fit_x1 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "lnorm")
#    fit_x2 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "exp")
#    fit_x3 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "gamma")
#    fit_x4 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "unif")
#    fit_x5 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "logis")
#    fit_x6 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "norm")
#    
#    teste[[i]] = gofstat(
#      list(fit_x1, fit_x2, fit_x3, fit_x4, fit_x5, fit_x6),
#      fitnames = c(
#        "lognormal",
#        "Exponencial",
#        "Gamma",
#        "Uniforme",
#        "logística",
#        "Normal"
#      )
#    )
#    nomes_dist_aic[[i]] = names(which.min(teste[[i]]$bic))
#    nomes_dist_bic[[i]] = names(which.min(teste[[i]]$aic)) 
#    cat(
#      "Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao:",
#      nomes_dist_aic[[i]],
#      "\n"
#    )
#    cat(
#      "---------------------------------------------------------------------------------------"
#    )
#    cat(
#      "Pela métrica AIC, A distribuicao melhor se ajustou a distribuicao:",
#    nomes_dist_bic[[i]],
#      "\n"
#    )
#  }
#  
#  # if (all(between(as.numeric(data10_df[i, ]), 0, 1))) {
#  #
#  #   fit_x3 = fitdistrplus::fitdist(as.numeric(data10_df[i, ]), "gamma")
#  #   fit_x7 = fitdistrplus::fitdist(as.numeric(data10_df[i, ]), "beta")
#  #
#  #   teste[[i]] = gofstat(list(fit_x3,fit_x7),
#  #                        fitnames = c("Gamma","Beta"))
#  # }
#  
#  else {
#    fit_x4 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "unif")
#    fit_x5 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "logis")
#    fit_x6 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "norm")
#    teste[[i]] = gofstat(list(fit_x4, fit_x5, fit_x6),
#                         fitnames = c("Uniforme", "logística", "Normal"))
#    
#    nomes_dist_aic[[i]] = names(which.min(teste[[i]]$bic))
#    nomes_dist_bic[[i]] = names(which.min(teste[[i]]$aic)) 
#    cat(
#      "Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao:",
#      nomes_dist_aic[[i]],
#      "\n"
#    )
#    cat(
#      "---------------------------------------------------------------------------------------"
#    )
#    cat(
#      "Pela métrica AIC, A distribuicao melhor se ajustou a distribuicao:",
#      nomes_dist_bic[[i]],
#      "\n"
#    )
#  }
#  
#  #cat(
#  #  "Pelo método da distribuição, essa janela foi considerada anomalia :",
#  #  as.numeric(data10_df[i, ]),
#  #  "\n"
#  #)
#  #cat(
#  #  "---------------------------------------------------------------------------------------",
#  #  "\n"
#  #)
#  
#  dados_anomalia[[i]] = list(as.numeric(data10_df[i,]))
#  
#  #anomalies[i] <- 1
#}

#ok

V.final2

#load("har_examples.RData")
##dados = har_examples$example15
##dados = har_examples$example16
#dados = har_examples$example17
##dados = har_examples$example18
##dados = rexp(100)
#
##dados$event = factor(dados$event, labels=c("FALSE", "TRUE"))
##head(dados)
#
#data10 <- ts_data(dados$serie, 10)
##data10 <- ts_data(dados, 10)
#
#datamatrix <- matrix(data10,nrow = 104,ncol = 10)
#
#dbscanResult <- dbscan::dbscan(datamatrix, eps=0.53 , minPts=3) # clustering
#
#dbscanResult
#
#datamatrix_df = data.frame(datamatrix)
#
#datamatrix_df$clusters =  dbscanResult$cluster
#
#datamatrix_df_anomalias = datamatrix_df %>% filter(clusters==0)
#datamatrix_df_anomalias = datamatrix_df_anomalias[,-11]
#
#data10_df = datamatrix_df_anomalias
#
#
#teste = list()
#dados_anomalia = list()
#nomes_dist_aic = list()
#nomes_dist_bic = list()
#probab_anomalias_bic = list()
#
#
#for (i in 1:dim(data10_df)[1]) {
#  if (all(data10_df[i,] > 0)) {
#    fit_x1 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "lnorm")
#    fit_x2 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "exp")
#    fit_x3 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "gamma")
#    fit_x4 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "unif")
#    fit_x5 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "logis")
#    fit_x6 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "norm")
#    
#    teste[[i]] = gofstat(
#      list(fit_x1, fit_x2, fit_x3, fit_x4, fit_x5, fit_x6),
#      fitnames = c(
#        "lognormal",
#        "Exponencial",
#        "Gamma",
#        "Uniforme",
#        "logística",
#        "Normal"
#      )
#    )
#    nomes_dist_aic[[i]] = names(which.min(teste[[i]]$bic))
#    nomes_dist_bic[[i]] = names(which.min(teste[[i]]$aic))
#    cat(
#      "Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao:",
#      nomes_dist_aic[[i]],
#      "\n"
#    )
#    cat(
#      "---------------------------------------------------------------------------------------"
#    )
#    cat(
#      "Pela métrica AIC, A distribuicao melhor se ajustou a distribuicao:",
#      nomes_dist_bic[[i]],
#      "\n"
#    )
#    
#  }
#  
#  else {
#    fit_x4 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "unif")
#    fit_x5 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "logis")
#    fit_x6 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "norm")
#    teste[[i]] = gofstat(list(fit_x4, fit_x5, fit_x6),
#                         fitnames = c("Uniforme", "logística", "Normal"))
#    
#    nomes_dist_aic[[i]] = names(which.min(teste[[i]]$bic))
#    nomes_dist_bic[[i]] = names(which.min(teste[[i]]$aic))
#    cat(
#      "Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao:",
#      nomes_dist_aic[[i]],
#      "\n"
#    )
#    cat(
#      "---------------------------------------------------------------------------------------"
#    )
#    cat(
#      "Pela métrica AIC, A distribuicao melhor se ajustou a distribuicao:",
#      nomes_dist_bic[[i]],
#      "\n"
#    )
#  }
#  
#  dados_anomalia[[i]] = as.numeric(data10_df[i,])
#
#  
#  if (nomes_dist_aic[[i]] == "lognormal") {
#    probab_anomalias_bic[[i]] =  dlnorm(dados_anomalia[[i]],
#                                        meanlog = fit_x1$estimate[[1]],
#                                        sdlog = fit_x1$estimate[[2]]) [dlnorm(dados_anomalia[[i]],
#                                                                              meanlog = #fit_x1$estimate[[1]],
#                                                                              sdlog = #fit_x1$estimate[[2]]) < 0.5]
#  }
#  if (nomes_dist_aic[[i]] == "exp") {
#    probab_anomalias_bic[[i]] =  dexp(dados_anomalia[[i]],
#                                      rate = fit_x2$estimate[[1]]) [dexp(dados_anomalia[[i]],
#                                                                         rate = fit_x2$estimate[[1]]) #< 0.5]
#  }
#  if (nomes_dist_aic[[i]] == "gamma") {
#    probab_anomalias_bic[[i]] =  dgamma(dados_anomalia[[i]],
#                                        shape = fit_x3$estimate[[1]],
#                                        rate = fit_x3$estimate[[2]]) [dgamma(dados_anomalia[[i]],
#                                                                             shape = #fit_x3$estimate[[1]],
#                                                                             rate = #fit_x3$estimate[[2]]) < 0.5]
#  }
#  
#  if (nomes_dist_aic[[i]] == "unif") {
#    probab_anomalias_bic[[i]] =  dunif(dados_anomalia[[i]],
#                                       min = fit_x4$estimate[[1]],
#                                       max = fit_x4$estimate[[2]]) [dunif(dados_anomalia[[i]],
#                                                                          min = fit_x4$estimate[[1]],
#                                                                          max = fit_x4$estimate[[2]]) #< 0.5]
#  }
#  
#  if (nomes_dist_aic[[i]] == "logística") {
#    probab_anomalias_bic[[i]] =  dlogis(dados_anomalia[[i]],
#                                        location  = fit_x5$estimate[[1]],
#                                        scale = fit_x5$estimate[[2]]) [dlogis(dados_anomalia[[i]],
#                                                                              location = #fit_x5$estimate[[1]],
#                                                                              scale = #fit_x5$estimate[[2]]) < 0.5]
#    
#  } else {
#    probab_anomalias_bic[[i]] =  dnorm(dados_anomalia[[i]],
#                                       mean  = fit_x6$estimate[[1]],
#                                       sd = fit_x6$estimate[[2]]) [dnorm(dados_anomalia[[i]],
#                                                                         mean = fit_x6$estimate[[1]],
#                                                                         sd = fit_x6$estimate[[2]]) < #0.5]
#    
#  }
#  
#  
#  
#  
#  #cat(
#  #  "Pelo método da distribuição, essa janela foi considerada anomalia :",
#  #  as.numeric(data10_df[i, ]),
#  #  "\n"
#  #)
#  #cat(
#  #  "---------------------------------------------------------------------------------------",
#  #  "\n"
#  #)
#  
#  
#}
#


#ok

V.final3

##backup
### introduzindo o cálculo das probabilidades
#
#load("har_examples.RData")
##dados = har_examples$example15
##dados = har_examples$example16
#dados = har_examples$example17
##dados = har_examples$example18
##dados = rexp(100)
#
#data10 <- ts_data(dados$serie, 10)
#
#data10_df = data.frame(data10)
#
#teste = list()
#dados_anomalia = list()
#nomes_dist_aic = list()
#nomes_dist_bic = list()
#probab_anomalias_bic = list()
#
#
#for (i in 1:dim(data10_df)[1]) {
#  if (all(data10_df[i,] > 0)) {
#    fit_x1 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "lnorm")
#    fit_x2 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "exp")
#    fit_x3 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "gamma")
#    fit_x4 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "unif")
#    fit_x5 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "logis")
#    fit_x6 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "norm")
#    
#    teste[[i]] = gofstat(
#      list(fit_x1, fit_x2, fit_x3, fit_x4, fit_x5, fit_x6),
#      fitnames = c(
#        "lognormal",
#        "Exponencial",
#        "Gamma",
#        "Uniforme",
#        "logística",
#        "Normal"
#      )
#    )
#    nomes_dist_aic[[i]] = names(which.min(teste[[i]]$bic))
#    nomes_dist_bic[[i]] = names(which.min(teste[[i]]$aic))
#    cat(
#      "Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao:",
#      nomes_dist_aic[[i]],
#      "\n"
#    )
#    cat(
#      "---------------------------------------------------------------------------------------"
#    )
#    cat(
#      "Pela métrica AIC, A distribuicao melhor se ajustou a distribuicao:",
#      nomes_dist_bic[[i]],
#      "\n"
#    )
#    
#  }
#  
#  else {
#    fit_x4 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "unif")
#    fit_x5 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "logis")
#    fit_x6 = fitdistrplus::fitdist(as.numeric(data10_df[i,]), "norm")
#    teste[[i]] = gofstat(list(fit_x4, fit_x5, fit_x6),
#                         fitnames = c("Uniforme", "logística", "Normal"))
#    
#    nomes_dist_aic[[i]] = names(which.min(teste[[i]]$bic))
#    nomes_dist_bic[[i]] = names(which.min(teste[[i]]$aic))
#    cat(
#      "Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao:",
#      nomes_dist_aic[[i]],
#      "\n"
#    )
#    cat(
#      "---------------------------------------------------------------------------------------"
#    )
#    cat(
#      "Pela métrica AIC, A distribuicao melhor se ajustou a distribuicao:",
#      nomes_dist_bic[[i]],
#      "\n"
#    )
#  }
#  
#  dados_anomalia[[i]] = as.numeric(data10_df[i,])
#
#  limiar = 0.2
#  
#  if (nomes_dist_aic[[i]] == "lognormal") {
#    probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [ (dlnorm(dados_anomalia[[i]],
#                                                                              meanlog = #fit_x1$estimate[[1]],
#                                                                              sdlog = #fit_x1$estimate[[2]]) < limiar)=="TRUE"]
#  }
#  if (nomes_dist_aic[[i]] == "exp") {
#    probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [ (dexp(dados_anomalia[[i]],
#                                                                         rate = fit_x2$estimate[[1]]) #< limiar)=="TRUE" ]
#  }
#  if (nomes_dist_aic[[i]] == "gamma") {
#    probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [ (dgamma(dados_anomalia[[i]],
#                                                                             shape = #fit_x3$estimate[[1]],
#                                                                             rate = #fit_x3$estimate[[2]]) < limiar)=="TRUE"]
#  }
#  
#  if (nomes_dist_aic[[i]] == "unif") {
#    probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [ ( dunif(dados_anomalia[[i]],
#                                                                          min = fit_x4$estimate[[1]],
#                                                                          max = fit_x4$estimate[[2]]) #< limiar )=="TRUE" ]
#  }
#  
#  if (nomes_dist_aic[[i]] == "logística") {
#    probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [ (dlogis(dados_anomalia[[i]],
#                                                                              location = #fit_x5$estimate[[1]],
#                                                                              scale = #fit_x5$estimate[[2]]) < limiar )=="TRUE" ]
#    
#  } else {
#    probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [ (dnorm(dados_anomalia[[i]],
#                                                                         mean = fit_x6$estimate[[1]],
#                                                                         sd = fit_x6$estimate[[2]]) < #limiar)=="TRUE"]
#    
#  }
#  
#  
#  
#  
#  #cat(
#  #  "Pelo método da distribuição, essa janela foi considerada anomalia :",
#  #  as.numeric(data10_df[i, ]),
#  #  "\n"
#  #)
#  #cat(
#  #  "---------------------------------------------------------------------------------------",
#  #  "\n"
#  #)
#  
#  
#}
#
##probab_anomalias_bic[probab_anomalias_bic == dados$serie[dados$event==TRUE] == "FALSE"]
#
##unlist(probab_anomalias_bic) [ unlist(probab_anomalias_bic) %in%  dados$serie[dados$event==TRUE] == #"FALSE" ]
##dados$serie[dados$event==TRUE] [ dados$serie[dados$event==TRUE] %in% unlist(probab_anomalias_bic) == #"FALSE"]
##table(unlist(probab_anomalias_bic) %in% dados$serie[dados$event==TRUE])
#
#ok

V.final4 Para distribuições contínuas

#backup
## introduzindo o cálculo das probabilidades

#load("har_examples.RData")
##dados = har_examples$example15
##dados = har_examples$example16
#dados = har_examples$example17
##dados = har_examples$example18
##dados = rexp(100)
#
#teste = list()
#dados_anomalia = list()
##nomes_dist_aic = list()
#nomes_dist_bic = list()
#probab_anomalias_bic = list()
#
#
#dbscan_dist_prob_ts = function(vetor_serie, tamanho_janela, eps, minPts,limiar) {
#  
#  data_ts_janela <- ts_data(vetor_serie, tamanho_janela)
#  
#  datamatrix <-
#    matrix(data_ts_janela,
#           nrow = dim(data_ts_janela)[1],
#           ncol = tamanho_janela)
#  
#  dbscanResult <-
#    dbscan::dbscan(datamatrix, eps = eps , minPts = minPts) # clustering
#  
#  datamatrix_df = data.frame(datamatrix)
#  
#  datamatrix_df$clusters =  dbscanResult$cluster
#  
#  datamatrix_df_anomalias = datamatrix_df %>% filter(clusters == 0)
#  
#  datamatrix_df_anomalias = subset(datamatrix_df_anomalias, select = -c(clusters))
#  
#  for (i in 1:dim(datamatrix_df_anomalias)[1]) {
#    if (all(datamatrix_df_anomalias[i, ] > 0)) {
#      fit_x1 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i, ]), "lnorm")
#      fit_x2 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i, ]), "exp")
#      fit_x3 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i, ]), "gamma")
#      fit_x4 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i, ]), "unif")
#      fit_x5 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i, ]), "logis")
#      fit_x6 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i, ]), "norm")
#      
#      teste[[i]] = gofstat(
#        list(fit_x1, fit_x2, fit_x3, fit_x4, fit_x5, fit_x6),
#        fitnames = c(
#          "lognormal",
#          "Exponencial",
#          "Gamma",
#          "Uniforme",
#          "logística",
#          "Normal"
#        )
#      )
#      nomes_dist_bic[[i]] = names(which.min(teste[[i]]$bic))
#      #nomes_dist_bic[[i]] = names(which.min(teste[[i]]$aic))
#      #cat(
#      #  "Pela métrica AIC, A distribuicao melhor se ajustou a distribuicao:",
#      #  nomes_dist_aic[[i]],
#      #  "\n"
#      #)
#      #cat(
#      #  "---------------------------------------------------------------------------------------"
#      #)
#      cat(
#        "Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao:",
#        nomes_dist_bic[[i]],
#        "\n"
#      )
#      
#    }
#    
#    else {
#      fit_x4 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i, ]), "unif")
#      fit_x5 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i, ]), "logis")
#      fit_x6 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i, ]), "norm")
#      teste[[i]] = gofstat(list(fit_x4, fit_x5, fit_x6),
#                           fitnames = c("Uniforme", "logística", "Normal"))
#      
#      #nomes_dist_aic[[i]] = names(which.min(teste[[i]]$aic))
#      nomes_dist_bic[[i]] = names(which.min(teste[[i]]$bic))
#      #cat(
#      #  "Pela métrica AIC, A distribuicao melhor se ajustou a distribuicao:",
#      #  nomes_dist_aic[[i]],
#      #  "\n"
#      #)
#      #cat(
#      #  "---------------------------------------------------------------------------------------"
#      #)
#      cat(
#        "Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao:",
#        nomes_dist_bic[[i]],
#        "\n"
#      )
#    }
#    
#    dados_anomalia[[i]] = as.numeric(datamatrix_df_anomalias[i, ])
#    
#    if (nomes_dist_bic[[i]] == "lognormal") {
#      probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(
#        dlnorm(
#          dados_anomalia[[i]],
#          meanlog = fit_x1$estimate[[1]],
#          sdlog = fit_x1$estimate[[2]]
#        ) < limiar
#      ) == "TRUE"]
#    }
#    if (nomes_dist_bic[[i]] == "exp") {
#      probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(dexp(dados_anomalia[[i]],
#                                                              rate = fit_x2$estimate[[1]]) < limiar) ==
#                                                          "TRUE"]
#    }
#    if (nomes_dist_bic[[i]] == "gamma") {
#      probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(
#        dgamma(
#          dados_anomalia[[i]],
#          shape = fit_x3$estimate[[1]],
#          rate = fit_x3$estimate[[2]]
#        ) < limiar
#      ) == "TRUE"]
#    }
#    
#    if (nomes_dist_bic[[i]] == "unif") {
#      probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(dunif(
#        dados_anomalia[[i]],
#        min = fit_x4$estimate[[1]],
#        max = fit_x4$estimate[[2]]
#      ) < limiar) == "TRUE"]
#    }
#    
#    if (nomes_dist_bic[[i]] == "logística") {
#      probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(
#        dlogis(
#          dados_anomalia[[i]],
#          location = fit_x5$estimate[[1]],
#          scale = fit_x5$estimate[[2]]
#        ) < limiar
#      ) == "TRUE"]
#      
#    } else {
#      probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(dnorm(
#        dados_anomalia[[i]],
#        mean = fit_x6$estimate[[1]],
#        sd = fit_x6$estimate[[2]]
#      ) < limiar) == "TRUE"]
#      
#    }
#    
#    
#    
#    
#    #cat(
#    #  "Pelo método da distribuição, essa janela foi considerada anomalia :",
#    #  as.numeric(datamatrix_df_anomalias[i, ]),
#    #  "\n"
#    #)
#    #cat(
#    #  "---------------------------------------------------------------------------------------",
#    #  "\n"
#    #)
#    
#    
#  }
#  
#  vetor_anomalias_unicas_detectadas = unique(unlist(probab_anomalias_bic))  
#  
#  grafico_dbscan = dbscan::hullplot(datamatrix, dbscanResult, main="DBSCAN")
#    
#  grafico_boxplot = boxplot(data.frame(t(datamatrix_df_anomalias)),plot = "TRUE")
#    
#  grafico_knn = dbscan::kNNdistplot(datamatrix, k =  minPts)
#  
#  assign("datamatrix_df_anomalias",datamatrix_df_anomalias,envir = .GlobalEnv)
#  assign("probab_anomalias_bic_por_janela",probab_anomalias_bic,envir = .GlobalEnv)
#  assign("nomes_dist_bic",nomes_dist_bic,envir = .GlobalEnv)
#  assign("dados_anomalia",dados_anomalia,envir = .GlobalEnv)
#  assign("grafico_knn",grafico_knn,envir = .GlobalEnv)
#  assign("grafico_dbscan",grafico_dbscan,envir = .GlobalEnv)
#  assign("grafico_boxplot",grafico_boxplot,envir = .GlobalEnv)
#  assign("dbscanresult",dbscanResult,envir = .GlobalEnv)
#  assign("vetor_anomalias_unicas_detectadas",vetor_anomalias_unicas_detectadas,envir = .GlobalEnv)
#  
#  return(
#    list(
#      #datamatrix_df_anomalias,
#      probab_anomalias_bic,
#      vetor_anomalias_unicas_detectadas,
#      nomes_dist_bic,
#      dados_anomalia,
#      dbscanResult
#    )
#  )
#    
#}
#
#dbscan_dist_prob_ts(dados$serie,tamanho_janela=10,eps=0.53,minPts=3,limiar = 0.25)  
#
#table(vetor_anomalias_unicas_detectadas %in% dados$serie[dados$event==TRUE])


#ok
#c1 = compara_anomalias(vetor_anomalias_unicas_detectadas,dados$serie)
#
#dados$event_dbscan_dist_prob_ts = dados$serie %in% c1[[4]]  
#
#dados$indice = 1:length(dados$serie)
#my_ts =  ts(dados$serie,dados$indice)
#plot.ts(my_ts)
#points(dados$indice[dados$event=="TRUE"],dados$serie[dados$event], pch = 20, col = "red")
#plot.ts(my_ts)
#points(dados$indice[dados$event_dbscan_dist_prob_ts=="TRUE"],dados$serie[dados$event_dbscan_dist_prob_ts], #pch = 20, col = "red")

V.final4 Para distribuições contínuas Binseg eps automático

## introduzindo o binseg

load("har_examples.RData")
#dados = har_examples$example15
#dados = har_examples$example16
dados = har_examples$example17
#dados = har_examples$example18
#dados = rexp(100)

teste = list()
dados_anomalia = list()
#nomes_dist_aic = list()
nomes_dist_bic = list()
probab_anomalias_bic = list()
distancias = matrix()
lista_anomalias_unicas_detectadas = list()
lista_dbscanresult = list()

dbscan_dist_prob_ts = function(vetor_serie,
                               tamanho_janela,
                               eps = NULL,
                               minPts,
                               limiar) {
  #list(missing(eps), eps)
  
  data_ts_janela <- ts_data(vetor_serie, tamanho_janela)
  
  datamatrix <-
    matrix(data_ts_janela,
           nrow = dim(data_ts_janela)[1],
           ncol = tamanho_janela)
  
  distancias = kNNdist(data_ts_janela, k = minPts, all = TRUE)
  
  Binseg_cp <- cpt.meanvar(cumsum(distancias), method = "BinSeg")
  
  for (i in 1:length(Binseg_cp@cpts))  {
    dbscanResult <-
      dbscan::dbscan(datamatrix, eps = distancias[Binseg_cp@cpts[i]], minPts = minPts) # clustering
    
    datamatrix_df = data.frame(datamatrix)
    
    if (any(dbscanResult$cluster == 0)) {
      datamatrix_df$clusters =  dbscanResult$cluster
      
      datamatrix_df_anomalias = datamatrix_df %>% filter(clusters == 0)
      
      datamatrix_df_anomalias = subset(datamatrix_df_anomalias, select = -c(clusters))
      
      
      cat(
        "Binseg change point for diff",
        i,
        "at location",
        Binseg_cp@cpts[i],
        "with value",
        distancias[Binseg_cp@cpts[i]],
        "\n"
      )
      
      lista_dbscanresult[[i]] = dbscanResult
      
      #x11()
      
      grafico_knn = dbscan::kNNdistplot(datamatrix, k =  minPts)
      abline(h = distancias[Binseg_cp@cpts[i]], lty = 2)
      
      #x11()
      
      grafico_boxplot = boxplot(data.frame(t(datamatrix_df_anomalias)), plot = "TRUE")
      
      #x11()
      
      grafico_dbscan = dbscan::hullplot(datamatrix, dbscanResult, main = "DBSCAN")
      
      for (i in 1:dim(datamatrix_df_anomalias)[1]) {
        if (all(datamatrix_df_anomalias[i,] > 0)) {
          fit_x1 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i,]), "lnorm")
          fit_x2 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i,]), "exp")
          fit_x3 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i,]), "gamma")
          fit_x4 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i,]), "unif")
          fit_x5 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i,]), "logis")
          fit_x6 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i,]), "norm")
          
          teste[[i]] = gofstat(
            list(fit_x1, fit_x2, fit_x3, fit_x4, fit_x5, fit_x6),
            fitnames = c(
              "lognormal",
              "Exponencial",
              "Gamma",
              "Uniforme",
              "logística",
              "Normal"
            )
          )
          nomes_dist_bic[[i]] = names(which.min(teste[[i]]$bic))
          #nomes_dist_bic[[i]] = names(which.min(teste[[i]]$aic))
          #cat(
          #  "Pela métrica AIC, A distribuicao melhor se ajustou a distribuicao:",
          #  nomes_dist_aic[[i]],
          #  "\n"
          #)
          #cat(
          #  "---------------------------------------------------------------------------------------"
          #)
          cat(
            "Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao:",
            nomes_dist_bic[[i]],
            "\n"
          )
          
        }
        
        else {
          fit_x4 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i,]), "unif")
          fit_x5 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i,]), "logis")
          fit_x6 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i,]), "norm")
          teste[[i]] = gofstat(
            list(fit_x4, fit_x5, fit_x6),
            fitnames = c("Uniforme", "logística", "Normal")
          )
          
          #nomes_dist_aic[[i]] = names(which.min(teste[[i]]$aic))
          nomes_dist_bic[[i]] = names(which.min(teste[[i]]$bic))
          #cat(
          #  "Pela métrica AIC, A distribuicao melhor se ajustou a distribuicao:",
          #  nomes_dist_aic[[i]],
          #  "\n"
          #)
          #cat(
          #  "---------------------------------------------------------------------------------------"
          #)
          cat(
            "Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao:",
            nomes_dist_bic[[i]],
            "\n"
          )
        }
        
        dados_anomalia[[i]] = as.numeric(datamatrix_df_anomalias[i,])
        
        if (nomes_dist_bic[[i]] == "lognormal") {
          probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(
            dlnorm(
              dados_anomalia[[i]],
              meanlog = fit_x1$estimate[[1]],
              sdlog = fit_x1$estimate[[2]]
            ) < limiar
          ) == "TRUE"]
        }
        if (nomes_dist_bic[[i]] == "exp") {
          probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(dexp(dados_anomalia[[i]],
                                                                  rate = fit_x2$estimate[[1]]) < limiar) ==
                                                              "TRUE"]
        }
        if (nomes_dist_bic[[i]] == "gamma") {
          probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(
            dgamma(
              dados_anomalia[[i]],
              shape = fit_x3$estimate[[1]],
              rate = fit_x3$estimate[[2]]
            ) < limiar
          ) == "TRUE"]
        }
        
        if (nomes_dist_bic[[i]] == "unif") {
          probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(
            dunif(
              dados_anomalia[[i]],
              min = fit_x4$estimate[[1]],
              max = fit_x4$estimate[[2]]
            ) < limiar
          ) == "TRUE"]
        }
        
        if (nomes_dist_bic[[i]] == "logística") {
          probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(
            dlogis(
              dados_anomalia[[i]],
              location = fit_x5$estimate[[1]],
              scale = fit_x5$estimate[[2]]
            ) < limiar
          ) == "TRUE"]
          
        } else {
          probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(
            dnorm(
              dados_anomalia[[i]],
              mean = fit_x6$estimate[[1]],
              sd = fit_x6$estimate[[2]]
            ) < limiar
          ) == "TRUE"]
          
        }
        
        
        
        
        #cat(
        #  "Pelo método da distribuição, essa janela foi considerada anomalia :",
        #  as.numeric(datamatrix_df_anomalias[i, ]),
        #  "\n"
        #)
        #cat(
        #  "---------------------------------------------------------------------------------------",
        #  "\n"
        #)
        
      }
      
      lista_anomalias_unicas_detectadas[[i]] = unique(unlist(probab_anomalias_bic))
      
    } else {
      cat("Não foram detectadas anomalias")
    }
  }

  
  
  #grafico_knn = dbscan::kNNdistplot(datamatrix, k =  minPts)
  
  # Print the location and value of each change point using the AMOC method
  
  assign("datamatrix_df_anomalias", datamatrix_df_anomalias, envir = .GlobalEnv)
  assign("probab_anomalias_bic_por_janela",probab_anomalias_bic,envir = .GlobalEnv)
  assign("nomes_dist_bic", nomes_dist_bic, envir = .GlobalEnv)
  assign("dados_anomalia", dados_anomalia, envir = .GlobalEnv)
  assign("grafico_knn", grafico_knn, envir = .GlobalEnv)
  assign("grafico_dbscan", grafico_dbscan, envir = .GlobalEnv)
  assign("grafico_boxplot", grafico_boxplot, envir = .GlobalEnv)
  assign("lista_dbscanresult", lista_dbscanresult, envir = .GlobalEnv)
  assign("lista_anomalias_unicas_detectadas",lista_anomalias_unicas_detectadas,envir = .GlobalEnv)
  
  return(
    list(
      #datamatrix_df_anomalias,
      lista_anomalias_unicas_detectadas,
      lista_anomalias_unicas_detectadas,
      nomes_dist_bic,
      dados_anomalia,
      lista_dbscanresult
    )
  )
}

  

dbscan_dist_prob_ts(dados$serie,tamanho_janela=8, minPts=3,limiar = 0.20)  
## Binseg change point for diff 1 at location 62 with value 0.3422411

## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Não foram detectadas anomaliasBinseg change point for diff 3 at location 176 with value 0.4421227

## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Não foram detectadas anomaliasNão foram detectadas anomaliasBinseg change point for diff 6 at location 318 with value 0.3497361

## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme
## [[1]]
## [[1]][[1]]
## NULL
## 
## [[1]][[2]]
## NULL
## 
## [[1]][[3]]
## NULL
## 
## [[1]][[4]]
## NULL
## 
## [[1]][[5]]
## NULL
## 
## [[1]][[6]]
## NULL
## 
## [[1]][[7]]
## NULL
## 
## [[1]][[8]]
## NULL
## 
## [[1]][[9]]
## NULL
## 
## [[1]][[10]]
## NULL
## 
## [[1]][[11]]
## NULL
## 
## [[1]][[12]]
## NULL
## 
## [[1]][[13]]
## NULL
## 
## [[1]][[14]]
## NULL
## 
## [[1]][[15]]
## [1] -1.455506  1.392396 -1.515969  1.481574 -1.530320  1.526252 -1.497888
## [8]  1.524337
## 
## [[1]][[16]]
## NULL
## 
## [[1]][[17]]
## NULL
## 
## [[1]][[18]]
## NULL
## 
## [[1]][[19]]
## NULL
## 
## [[1]][[20]]
## NULL
## 
## [[1]][[21]]
## NULL
## 
## [[1]][[22]]
## NULL
## 
## [[1]][[23]]
## NULL
## 
## [[1]][[24]]
## NULL
## 
## [[1]][[25]]
## NULL
## 
## [[1]][[26]]
## NULL
## 
## [[1]][[27]]
## NULL
## 
## [[1]][[28]]
## NULL
## 
## [[1]][[29]]
## NULL
## 
## [[1]][[30]]
## NULL
## 
## [[1]][[31]]
## NULL
## 
## [[1]][[32]]
## NULL
## 
## [[1]][[33]]
## NULL
## 
## [[1]][[34]]
## NULL
## 
## [[1]][[35]]
## NULL
## 
## [[1]][[36]]
## NULL
## 
## [[1]][[37]]
## NULL
## 
## [[1]][[38]]
## NULL
## 
## [[1]][[39]]
## NULL
## 
## [[1]][[40]]
## NULL
## 
## [[1]][[41]]
## NULL
## 
## [[1]][[42]]
## NULL
## 
## [[1]][[43]]
## NULL
## 
## [[1]][[44]]
## NULL
## 
## [[1]][[45]]
## NULL
## 
## [[1]][[46]]
## NULL
## 
## [[1]][[47]]
## NULL
## 
## [[1]][[48]]
## NULL
## 
## [[1]][[49]]
## NULL
## 
## [[1]][[50]]
## NULL
## 
## [[1]][[51]]
## NULL
## 
## [[1]][[52]]
## [1] -1.455506  1.392396 -1.515969  1.481574 -1.530320  1.526252 -1.497888
## [8]  1.524337
## 
## [[1]][[53]]
## NULL
## 
## [[1]][[54]]
## NULL
## 
## [[1]][[55]]
## [1] -1.455506  1.392396 -1.515969  1.481574 -1.530320  1.526252 -1.497888
## [8]  1.524337
## 
## 
## [[2]]
## [[2]][[1]]
## NULL
## 
## [[2]][[2]]
## NULL
## 
## [[2]][[3]]
## NULL
## 
## [[2]][[4]]
## NULL
## 
## [[2]][[5]]
## NULL
## 
## [[2]][[6]]
## NULL
## 
## [[2]][[7]]
## NULL
## 
## [[2]][[8]]
## NULL
## 
## [[2]][[9]]
## NULL
## 
## [[2]][[10]]
## NULL
## 
## [[2]][[11]]
## NULL
## 
## [[2]][[12]]
## NULL
## 
## [[2]][[13]]
## NULL
## 
## [[2]][[14]]
## NULL
## 
## [[2]][[15]]
## [1] -1.455506  1.392396 -1.515969  1.481574 -1.530320  1.526252 -1.497888
## [8]  1.524337
## 
## [[2]][[16]]
## NULL
## 
## [[2]][[17]]
## NULL
## 
## [[2]][[18]]
## NULL
## 
## [[2]][[19]]
## NULL
## 
## [[2]][[20]]
## NULL
## 
## [[2]][[21]]
## NULL
## 
## [[2]][[22]]
## NULL
## 
## [[2]][[23]]
## NULL
## 
## [[2]][[24]]
## NULL
## 
## [[2]][[25]]
## NULL
## 
## [[2]][[26]]
## NULL
## 
## [[2]][[27]]
## NULL
## 
## [[2]][[28]]
## NULL
## 
## [[2]][[29]]
## NULL
## 
## [[2]][[30]]
## NULL
## 
## [[2]][[31]]
## NULL
## 
## [[2]][[32]]
## NULL
## 
## [[2]][[33]]
## NULL
## 
## [[2]][[34]]
## NULL
## 
## [[2]][[35]]
## NULL
## 
## [[2]][[36]]
## NULL
## 
## [[2]][[37]]
## NULL
## 
## [[2]][[38]]
## NULL
## 
## [[2]][[39]]
## NULL
## 
## [[2]][[40]]
## NULL
## 
## [[2]][[41]]
## NULL
## 
## [[2]][[42]]
## NULL
## 
## [[2]][[43]]
## NULL
## 
## [[2]][[44]]
## NULL
## 
## [[2]][[45]]
## NULL
## 
## [[2]][[46]]
## NULL
## 
## [[2]][[47]]
## NULL
## 
## [[2]][[48]]
## NULL
## 
## [[2]][[49]]
## NULL
## 
## [[2]][[50]]
## NULL
## 
## [[2]][[51]]
## NULL
## 
## [[2]][[52]]
## [1] -1.455506  1.392396 -1.515969  1.481574 -1.530320  1.526252 -1.497888
## [8]  1.524337
## 
## [[2]][[53]]
## NULL
## 
## [[2]][[54]]
## NULL
## 
## [[2]][[55]]
## [1] -1.455506  1.392396 -1.515969  1.481574 -1.530320  1.526252 -1.497888
## [8]  1.524337
## 
## 
## [[3]]
## [[3]][[1]]
## [1] "Uniforme"
## 
## [[3]][[2]]
## [1] "Uniforme"
## 
## [[3]][[3]]
## [1] "Uniforme"
## 
## [[3]][[4]]
## [1] "Uniforme"
## 
## [[3]][[5]]
## [1] "Uniforme"
## 
## [[3]][[6]]
## [1] "Uniforme"
## 
## [[3]][[7]]
## [1] "Uniforme"
## 
## [[3]][[8]]
## [1] "Uniforme"
## 
## [[3]][[9]]
## [1] "Uniforme"
## 
## [[3]][[10]]
## [1] "Uniforme"
## 
## [[3]][[11]]
## [1] "Uniforme"
## 
## [[3]][[12]]
## [1] "Uniforme"
## 
## [[3]][[13]]
## [1] "Uniforme"
## 
## [[3]][[14]]
## [1] "Uniforme"
## 
## [[3]][[15]]
## [1] "Uniforme"
## 
## [[3]][[16]]
## [1] "Uniforme"
## 
## [[3]][[17]]
## [1] "Uniforme"
## 
## [[3]][[18]]
## [1] "Uniforme"
## 
## [[3]][[19]]
## [1] "Uniforme"
## 
## [[3]][[20]]
## [1] "Uniforme"
## 
## [[3]][[21]]
## [1] "Uniforme"
## 
## [[3]][[22]]
## [1] "Uniforme"
## 
## [[3]][[23]]
## [1] "Uniforme"
## 
## [[3]][[24]]
## [1] "Uniforme"
## 
## [[3]][[25]]
## [1] "Uniforme"
## 
## [[3]][[26]]
## [1] "Uniforme"
## 
## [[3]][[27]]
## [1] "Uniforme"
## 
## [[3]][[28]]
## [1] "Uniforme"
## 
## [[3]][[29]]
## [1] "Uniforme"
## 
## [[3]][[30]]
## [1] "Uniforme"
## 
## [[3]][[31]]
## [1] "Uniforme"
## 
## [[3]][[32]]
## [1] "Uniforme"
## 
## [[3]][[33]]
## [1] "Uniforme"
## 
## [[3]][[34]]
## [1] "Uniforme"
## 
## [[3]][[35]]
## [1] "Uniforme"
## 
## [[3]][[36]]
## [1] "Uniforme"
## 
## [[3]][[37]]
## [1] "Uniforme"
## 
## [[3]][[38]]
## [1] "Uniforme"
## 
## [[3]][[39]]
## [1] "Uniforme"
## 
## [[3]][[40]]
## [1] "Uniforme"
## 
## [[3]][[41]]
## [1] "Uniforme"
## 
## [[3]][[42]]
## [1] "Uniforme"
## 
## [[3]][[43]]
## [1] "Uniforme"
## 
## [[3]][[44]]
## [1] "Uniforme"
## 
## [[3]][[45]]
## [1] "Uniforme"
## 
## [[3]][[46]]
## [1] "Uniforme"
## 
## [[3]][[47]]
## [1] "Uniforme"
## 
## [[3]][[48]]
## [1] "Uniforme"
## 
## [[3]][[49]]
## [1] "Uniforme"
## 
## [[3]][[50]]
## [1] "Uniforme"
## 
## [[3]][[51]]
## [1] "Uniforme"
## 
## [[3]][[52]]
## [1] "Uniforme"
## 
## [[3]][[53]]
## [1] "Uniforme"
## 
## [[3]][[54]]
## [1] "Uniforme"
## 
## [[3]][[55]]
## [1] "Uniforme"
## 
## 
## [[4]]
## [[4]][[1]]
## [1]  0.5403023  0.3153224  0.0707372 -0.1782461 -0.4161468 -0.6281736 -0.8011436
## [8] -1.4555059
## 
## [[4]][[2]]
## [1]  0.3153224  0.0707372 -0.1782461 -0.4161468 -0.6281736 -0.8011436 -1.4555059
## [8] -0.9899925
## 
## [[4]][[3]]
## [1]  0.0707372 -0.1782461 -0.4161468 -0.6281736 -0.8011436 -1.4555059 -0.9899925
## [8] -0.9941297
## 
## [[4]][[4]]
## [1] -0.1782461 -0.4161468 -0.6281736 -0.8011436 -1.4555059 -0.9899925 -0.9941297
## [8] -0.9364567
## 
## [[4]][[5]]
## [1] -0.8011436 -1.4555059 -0.9899925 -0.9941297 -0.9364567 -0.8205594 -0.6536436
## [8] -0.4460875
## 
## [[4]][[6]]
## [1] -1.4555059 -0.9899925 -0.9941297 -0.9364567 -0.8205594 -0.6536436 -0.4460875
## [8] -0.2107958
## 
## [[4]][[7]]
## [1] -0.98999250 -0.99412968 -0.93645669 -0.82055936 -0.65364362 -0.44608749
## [7] -0.21079580  0.03760215
## 
## [[4]][[8]]
## [1] -0.99412968 -0.93645669 -0.82055936 -0.65364362 -0.44608749 -0.21079580
## [7]  0.03760215  0.28366219
## 
## [[4]][[9]]
## [1] -0.65364362 -0.44608749 -0.21079580  0.03760215  0.28366219  0.51208548
## [7]  0.70866977  1.39239594
## 
## [[4]][[10]]
## [1] -0.44608749 -0.21079580  0.03760215  0.28366219  0.51208548  0.70866977
## [7]  1.39239594  0.96017029
## 
## [[4]][[11]]
## [1] -0.21079580  0.03760215  0.28366219  0.51208548  0.70866977  1.39239594
## [7]  0.96017029  0.99944942
## 
## [[4]][[12]]
## [1] 0.03760215 0.28366219 0.51208548 0.70866977 1.39239594 0.96017029 0.99944942
## [8] 0.97658763
## 
## [[4]][[13]]
## [1] 0.7086698 1.3923959 0.9601703 0.9994494 0.9765876 0.8930063 0.7539023
## [8] 0.5679242
## 
## [[4]][[14]]
## [1] 1.3923959 0.9601703 0.9994494 0.9765876 0.8930063 0.7539023 0.5679242
## [8] 0.3466353
## 
## [[4]][[15]]
## [1] 0.9601703 0.9994494 0.9765876 0.8930063 0.7539023 0.5679242 0.3466353
## [8] 0.1037944
## 
## [[4]][[16]]
## [1]  0.3466353  0.1037944 -0.1455000 -0.3857479 -0.6020119 -0.7808457 -0.9111303
## [8] -1.5159687
## 
## [[4]][[17]]
## [1]  0.1037944 -0.1455000 -0.3857479 -0.6020119 -0.7808457 -0.9111303 -1.5159687
## [8] -0.9971722
## 
## [[4]][[18]]
## [1] -0.1455000 -0.3857479 -0.6020119 -0.7808457 -0.9111303 -1.5159687 -0.9971722
## [8] -0.9475798
## 
## [[4]][[19]]
## [1] -0.9111303 -1.5159687 -0.9971722 -0.9475798 -0.8390715 -0.6783939 -0.4755369
## [8] -0.2431134
## 
## [[4]][[20]]
## [1] -1.515968699 -0.997172156 -0.947579804 -0.839071529 -0.678393850
## [6] -0.475536928 -0.243113423  0.004425698
## 
## [[4]][[21]]
## [1] -0.997172156 -0.947579804 -0.839071529 -0.678393850 -0.475536928
## [6] -0.243113423  0.004425698  0.251689650
## 
## [[4]][[22]]
## [1] -0.475536928 -0.243113423  0.004425698  0.251689650  0.483304759
## [6]  0.684870318  0.843853959  1.481574372
## 
## [[4]][[23]]
## [1] -0.243113423  0.004425698  0.251689650  0.483304759  0.684870318
## [6]  0.843853959  1.481574372  0.997798279
## 
## [[4]][[24]]
## [1] 0.004425698 0.251689650 0.483304759 0.684870318 0.843853959 1.481574372
## [7] 0.997798279 0.983187447
## 
## [[4]][[25]]
## [1] 0.8438540 1.4815744 0.9977983 0.9831874 0.9074468 0.7752855 0.5949207
## [8] 0.3775666
## 
## [[4]][[26]]
## [1] 1.4815744 0.9977983 0.9831874 0.9074468 0.7752855 0.5949207 0.3775666
## [8] 0.1367372
## 
## [[4]][[27]]
## [1]  0.1367372 -0.1125938 -0.3549243 -0.5751873 -0.7596879 -0.8969548 -0.9784535
## [8] -1.5303201
## 
## [[4]][[28]]
## [1] -0.1125938 -0.3549243 -0.5751873 -0.7596879 -0.8969548 -0.9784535 -1.5303201
## [8] -0.9576595
## 
## [[4]][[29]]
## [1] -0.3549243 -0.5751873 -0.7596879 -0.8969548 -0.9784535 -1.5303201 -0.9576595
## [8] -0.8566597
## 
## [[4]][[30]]
## [1] -0.97845346 -1.53032011 -0.95765948 -0.85665975 -0.70239706 -0.50446272
## [7] -0.27516334 -0.02875563
## 
## [[4]][[31]]
## [1] -1.53032011 -0.95765948 -0.85665975 -0.70239706 -0.50446272 -0.27516334
## [7] -0.02875563  0.21943996
## 
## [[4]][[32]]
## [1] -0.50446272 -0.27516334 -0.02875563  0.21943996  0.45399184  0.66031671
## [7]  0.82558628  0.93952489
## 
## [[4]][[33]]
## [1] -0.27516334 -0.02875563  0.21943996  0.45399184  0.66031671  0.82558628
## [7]  0.93952489  1.52625193
## 
## [[4]][[34]]
## [1] -0.02875563  0.21943996  0.45399184  0.66031671  0.82558628  0.93952489
## [7]  1.52625193  0.98870462
## 
## [[4]][[35]]
## [1] 0.2194400 0.4539918 0.6603167 0.8255863 0.9395249 1.5262519 0.9887046
## [8] 0.9208880
## 
## [[4]][[36]]
## [1] 0.9395249 1.5262519 0.9887046 0.9208880 0.7958150 0.6212620 0.4080821
## [8] 0.1695295
## 
## [[4]][[37]]
## [1]  1.52625193  0.98870462  0.92088797  0.79581497  0.62126205  0.40808206
## [7]  0.16952951 -0.07956357
## 
## [[4]][[38]]
## [1]  0.16952951 -0.07956357 -0.32370977 -0.54772926 -0.73769360 -0.88179173
## [7] -0.97106431 -0.99996083
## 
## [[4]][[39]]
## [1] -0.07956357 -0.32370977 -0.54772926 -0.73769360 -0.88179173 -0.97106431
## [7] -0.99996083 -1.49788814
## 
## [[4]][[40]]
## [1] -0.3237098 -0.5477293 -0.7376936 -0.8817917 -0.9710643 -0.9999608 -1.4978881
## [8] -0.8733046
## 
## [[4]][[41]]
## [1] -0.5477293 -0.7376936 -0.8817917 -0.9710643 -0.9999608 -1.4978881 -0.8733046
## [8] -0.7256268
## 
## [[4]][[42]]
## [1] -0.97106431 -0.99996083 -1.49788814 -0.87330464 -0.72562681 -0.53283302
## [7] -0.30691025 -0.06190529
## 
## [[4]][[43]]
## [1] -0.99996083 -1.49788814 -0.87330464 -0.72562681 -0.53283302 -0.30691025
## [7] -0.06190529  0.18694864
## 
## [[4]][[44]]
## [1] -1.49788814 -0.87330464 -0.72562681 -0.53283302 -0.30691025 -0.06190529
## [7]  0.18694864  0.42417901
## 
## [[4]][[45]]
## [1] -0.53283302 -0.30691025 -0.06190529  0.18694864  0.42417901  0.63503598
## [7]  0.80640949  0.92764437
## 
## [[4]][[46]]
## [1] -0.30691025 -0.06190529  0.18694864  0.42417901  0.63503598  0.80640949
## [7]  0.92764437  0.99120281
## 
## [[4]][[47]]
## [1] -0.06190529  0.18694864  0.42417901  0.63503598  0.80640949  0.92764437
## [7]  0.99120281  1.52433659
## 
## [[4]][[48]]
## [1] 0.1869486 0.4241790 0.6350360 0.8064095 0.9276444 0.9912028 1.5243366
## [8] 0.9333151
## 
## [[4]][[49]]
## [1] 0.4241790 0.6350360 0.8064095 0.9276444 0.9912028 1.5243366 0.9333151
## [8] 0.8154681
## 
## [[4]][[50]]
## [1] 0.9276444 0.9912028 1.5243366 0.9333151 0.8154681 0.6469193 0.4381482
## [8] 0.2021351
## 
## [[4]][[51]]
## [1]  0.99120281  1.52433659  0.93331511  0.81546815  0.64691932  0.43814819
## [7]  0.20213512 -0.04644573
## 
## [[4]][[52]]
## [1]  1.52433659  0.93331511  0.81546815  0.64691932  0.43814819  0.20213512
## [7] -0.04644573 -0.29213881
## 
## [[4]][[53]]
## [1] 0.9276444 0.9912028 1.5243366 0.9333151 0.8154681 0.6469193 0.4381482
## [8] 0.2021351
## 
## [[4]][[54]]
## [1]  0.99120281  1.52433659  0.93331511  0.81546815  0.64691932  0.43814819
## [7]  0.20213512 -0.04644573
## 
## [[4]][[55]]
## [1]  1.52433659  0.93331511  0.81546815  0.64691932  0.43814819  0.20213512
## [7] -0.04644573 -0.29213881
## 
## 
## [[5]]
## [[5]][[1]]
## DBSCAN clustering for 106 objects.
## Parameters: eps = 0.342241063719983, minPts = 3
## Using euclidean distances and borderpoints = TRUE
## The clustering contains 10 cluster(s) and 55 noise points.
## 
##  0  1  2  3  4  5  6  7  8  9 10 
## 55 21  3  4  4  3  3  4  3  3  3 
## 
## Available fields: cluster, eps, minPts, dist, borderPoints
## 
## [[5]][[2]]
## NULL
## 
## [[5]][[3]]
## DBSCAN clustering for 106 objects.
## Parameters: eps = 0.442122712193792, minPts = 3
## Using euclidean distances and borderpoints = TRUE
## The clustering contains 16 cluster(s) and 15 noise points.
## 
##  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 
## 15 25 14  4  4  4  4  4  3  4  4  4  4  4  3  3  3 
## 
## Available fields: cluster, eps, minPts, dist, borderPoints
## 
## [[5]][[4]]
## NULL
## 
## [[5]][[5]]
## NULL
## 
## [[5]][[6]]
## DBSCAN clustering for 106 objects.
## Parameters: eps = 0.349736076179323, minPts = 3
## Using euclidean distances and borderpoints = TRUE
## The clustering contains 10 cluster(s) and 52 noise points.
## 
##  0  1  2  3  4  5  6  7  8  9 10 
## 52 24  3  4  4  3  3  4  3  3  3 
## 
## Available fields: cluster, eps, minPts, dist, borderPoints
#eps=0.53

#table( lista_anomalias_unicas_detectadas[[55]] %in% dados$serie[dados$event==TRUE])


#ok
c1 = compara_anomalias(lista_anomalias_unicas_detectadas[[55]],dados$serie)

dados$event_dbscan_dist_prob_ts = dados$serie %in% c1[[4]]  

dados$indice = 1:length(dados$serie)
my_ts =  ts(dados$serie,dados$indice)
plot.ts(my_ts)
points(dados$indice[dados$event=="TRUE"],dados$serie[dados$event], pch = 20, col = "red")

plot.ts(my_ts)
points(dados$indice[dados$event_dbscan_dist_prob_ts=="TRUE"],dados$serie[dados$event_dbscan_dist_prob_ts], pch = 20, col = "red")

V.final4 Para distribuições contínuas Binseg eps automático e distribuições discretas

## introduzindo o binseg discretas

#load("har_examples.RData")
#dados = har_examples$example2
#dados = har_examples$example15
#dados = har_examples$example16
#dados = har_examples$example17
#dados = har_examples$example18
#dados$series = rpois(100,lambda = 3)
dados = rnbinom(100, size=10, prob=.5)


teste = list()
dados_anomalia = list()
#nomes_dist_aic = list()
nomes_dist_bic = list()
lista_nomes_dist_bic = list()
probab_anomalias_bic = list()
distancias = matrix()
lista_anomalias_unicas_detectadas = list()
lista_dbscanresult = list()

dbscan_dist_prob_ts = function(vetor_serie,
                               tamanho_janela,
                               eps = NULL,
                               minPts,
                               limiar) {
  #list(missing(eps), eps)
  
  data_ts_janela <- ts_data(vetor_serie, tamanho_janela)
  
  datamatrix <-
    matrix(data_ts_janela,
           nrow = dim(data_ts_janela)[1],
           ncol = tamanho_janela)
  
  distancias = kNNdist(data_ts_janela, k = minPts, all = TRUE)
  
  Binseg_cp <- cpt.meanvar(cumsum(distancias), method = "BinSeg")
  
  for (i in 1:length(Binseg_cp@cpts))  {
    dbscanResult <-
      dbscan::dbscan(datamatrix, eps = distancias[Binseg_cp@cpts[i]], minPts = minPts) # clustering
    
    datamatrix_df = data.frame(datamatrix)
    
    if (any(dbscanResult$cluster == 0)) {
      datamatrix_df$clusters =  dbscanResult$cluster
      
      datamatrix_df_anomalias = datamatrix_df %>% filter(clusters == 0)
      
      datamatrix_df_anomalias = subset(datamatrix_df_anomalias, select = -c(clusters))
      
      
      cat(
        "Binseg change point for diff",
        i,
        "at location",
        Binseg_cp@cpts[i],
        "with value",
        distancias[Binseg_cp@cpts[i]],
        "\n"
      )
      
      lista_dbscanresult[[i]] = dbscanResult
      
      #x11()
      
      grafico_knn = dbscan::kNNdistplot(datamatrix, k =  minPts)
      abline(h = distancias[Binseg_cp@cpts[i]], lty = 2)
      
      #x11()
      
      grafico_boxplot = boxplot(data.frame(t(datamatrix_df_anomalias)), plot = "TRUE")
      
      #x11()
      
      grafico_dbscan = dbscan::hullplot(datamatrix, dbscanResult, main = "DBSCAN")
      
      
      
      
      for (i in 1:dim(datamatrix_df_anomalias)[1]) {
        if (class(unlist(datamatrix_df_anomalias[i,])) == "integer") {
          #fit_x.1 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i, ]), "binom")
          fit_x.2 = fitdistrplus::fitdist(unlist(datamatrix_df_anomalias[i,]), "nbinom")
          fit_x.3 = fitdistrplus::fitdist(unlist(datamatrix_df_anomalias[i,]), "geom")
          #fit_x.4 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i, ]), "hyper")
          fit_x.5 = fitdistrplus::fitdist(unlist(datamatrix_df_anomalias[i,]), "pois")
          
          teste[[i]] = gofstat(
            list(fit_x.2, fit_x.3, fit_x.5),
            #fit_x.1,, fit_x.4,
            fitnames = c(#"Binomial",
              "Multinomial",
              "Geométrica",
              #"Hypergeom�trica",
              "Poisson")
          )
          nomes_dist_bic[[i]] = names(which.min(teste[[i]]$bic))
          #nomes_dist_bic[[i]] = names(which.min(teste[[i]]$aic))
          #cat(
          #  "Pela m�trica AIC, A distribuicao melhor se ajustou a distribuicao:",
          #  nomes_dist_aic[[i]],
          #  "\n"
          #)
          #cat(
          #  "---------------------------------------------------------------------------------------"
          #)
          cat(
            "Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao:",
            nomes_dist_bic[[i]],
            "\n"
          )
          
        }
        
        
       if (all(datamatrix_df_anomalias[i,] > 0)) {
          fit_x1 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i,]), "lnorm")
          fit_x2 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i,]), "exp")
          fit_x3 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i,]), "gamma")
          fit_x4 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i,]), "unif")
          fit_x5 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i,]), "logis")
          fit_x6 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i,]), "norm")
          
          teste[[i]] = gofstat(
            list(fit_x1, fit_x2, fit_x3, fit_x4, fit_x5, fit_x6),
            fitnames = c(
              "lognormal",
              "Exponencial",
              "Gamma",
              "Uniforme",
              "logística",
              "Normal"
            )
          )
          nomes_dist_bic[[i]] = names(which.min(teste[[i]]$bic))
          #nomes_dist_bic[[i]] = names(which.min(teste[[i]]$aic))
          #cat(
          #  "Pela métrica AIC, A distribuicao melhor se ajustou a distribuicao:",
          #  nomes_dist_aic[[i]],
          #  "\n"
          #)
          #cat(
          #  "---------------------------------------------------------------------------------------"
          #)
          cat(
            "Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao:",
            nomes_dist_bic[[i]],
            "\n"
          )
          
        }
        
        else {
          fit_x4 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i, ]), "unif")
          fit_x5 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i, ]), "logis")
          fit_x6 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i, ]), "norm")
          teste[[i]] = gofstat(
            list(fit_x4, fit_x5, fit_x6),
            fitnames = c("Uniforme", "logística", "Normal")
          )
          
          #nomes_dist_aic[[i]] = names(which.min(teste[[i]]$aic))
          nomes_dist_bic[[i]] = names(which.min(teste[[i]]$bic))
          #cat(
          #  "Pela métrica AIC, A distribuicao melhor se ajustou a distribuicao:",
          #  nomes_dist_aic[[i]],
          #  "\n"
          #)
          #cat(
          #  "---------------------------------------------------------------------------------------"
          #)
          cat(
            "Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao:",
            nomes_dist_bic[[i]],
            "\n"
          )
        }
        
        dados_anomalia[[i]] = as.numeric(datamatrix_df_anomalias[i, ])
          
        if (nomes_dist_bic[[i]] == "lognormal") {
          probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(
            dlnorm(
              dados_anomalia[[i]],
              meanlog = fit_x1$estimate[[1]],
              sdlog = fit_x1$estimate[[2]]
            ) < limiar
          ) == "TRUE"]
        }
        if (nomes_dist_bic[[i]] == "exp") {
          probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(dexp(dados_anomalia[[i]],
                                                                  rate = fit_x2$estimate[[1]]) < limiar) ==
                                                              "TRUE"]
        }
        if (nomes_dist_bic[[i]] == "gamma") {
          probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(
            dgamma(
              dados_anomalia[[i]],
              shape = fit_x3$estimate[[1]],
              rate = fit_x3$estimate[[2]]
            ) < limiar
          ) == "TRUE"]
        }
        
        if (nomes_dist_bic[[i]] == "unif") {
          probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(
            dunif(
              dados_anomalia[[i]],
              min = fit_x4$estimate[[1]],
              max = fit_x4$estimate[[2]]
            ) < limiar
          ) == "TRUE"]
        }
        
        if (nomes_dist_bic[[i]] == "logística") {
          probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(
            dlogis(
              dados_anomalia[[i]],
              location = fit_x5$estimate[[1]],
              scale = fit_x5$estimate[[2]]
            ) < limiar
          ) == "TRUE"]
          
        } else {
          probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(
            dnorm(
              dados_anomalia[[i]],
              mean = fit_x6$estimate[[1]],
              sd = fit_x6$estimate[[2]]
            ) < limiar
          ) == "TRUE"]
          
        }
        
        
        
        
        #cat(
        #  "Pelo método da distribuição, essa janela foi considerada anomalia :",
        #  as.numeric(datamatrix_df_anomalias[i, ]),
        #  "\n"
        #)
        #cat(
        #  "---------------------------------------------------------------------------------------",
        #  "\n"
        #)
        
      }
      #lista_nomes_dist_bic[[i]] =  nomes_dist_bic
      lista_anomalias_unicas_detectadas[[i]] = unique(unlist(probab_anomalias_bic))
      
    } else {
      cat("Não foram detectadas anomalias")
    }
  }
  
  
  
  #grafico_knn = dbscan::kNNdistplot(datamatrix, k =  minPts)
  
  # Print the location and value of each change point using the AMOC method
  
  assign("datamatrix_df_anomalias", datamatrix_df_anomalias, envir = .GlobalEnv)
  assign("probab_anomalias_bic_por_janela",
         probab_anomalias_bic,
         envir = .GlobalEnv)
  assign("lista_nomes_dist_bic", lista_nomes_dist_bic, envir = .GlobalEnv)
  assign("dados_anomalia", dados_anomalia, envir = .GlobalEnv)
  assign("grafico_knn", grafico_knn, envir = .GlobalEnv)
  assign("grafico_dbscan", grafico_dbscan, envir = .GlobalEnv)
  assign("grafico_boxplot", grafico_boxplot, envir = .GlobalEnv)
  assign("lista_dbscanresult", lista_dbscanresult, envir = .GlobalEnv)
  assign("lista_anomalias_unicas_detectadas",
         lista_anomalias_unicas_detectadas,
         envir = .GlobalEnv)
  
  return(
    list(
      #datamatrix_df_anomalias,
      lista_anomalias_unicas_detectadas,
      #lista_nomes_dist_bic,
      dados_anomalia,
      lista_dbscanresult
    )
  )
}



dbscan_dist_prob_ts(
  dados,
  tamanho_janela = 19,
  minPts = 3,
  limiar = 0.10
)
## Binseg change point for diff 1 at location 62 with value 21.9089

## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Binseg change point for diff 2 at location 94 with value 21.47091

## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Poisson 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: lognormal 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: lognormal 
## Binseg change point for diff 3 at location 126 with value 19.26136

## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Normal 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Normal 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Poisson 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Normal 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Poisson 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Normal 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: lognormal 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: lognormal 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: lognormal 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Poisson 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Poisson 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Poisson 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Poisson 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Poisson 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Poisson 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Poisson 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Poisson 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Poisson 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Poisson 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Poisson 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: lognormal 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Poisson 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: lognormal 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: lognormal 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: lognormal 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Poisson 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Poisson 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Poisson 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Poisson 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Poisson 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Poisson 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Binseg change point for diff 4 at location 185 with value 21.51743

## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Poisson 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: lognormal 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: lognormal 
## Binseg change point for diff 5 at location 216 with value 21.67948

## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Poisson 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: lognormal 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: lognormal 
## Binseg change point for diff 6 at location 246 with value 21.47091

## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: Uniforme 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Poisson 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: lognormal 
## Pela m�trica BIC, A distribuicao melhor se ajustou a distribuicao: Multinomial 
## Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao: lognormal
## [[1]]
## [[1]][[1]]
## NULL
## 
## [[1]][[2]]
## NULL
## 
## [[1]][[3]]
##  [1] 11 20  7 10  8 15  2 12 18 14  4  5 17 19 13  6 23  9 21
## 
## [[1]][[4]]
## NULL
## 
## [[1]][[5]]
## NULL
## 
## [[1]][[6]]
## NULL
## 
## [[1]][[7]]
## NULL
## 
## [[1]][[8]]
## NULL
## 
## [[1]][[9]]
## NULL
## 
## [[1]][[10]]
## NULL
## 
## [[1]][[11]]
## NULL
## 
## [[1]][[12]]
## NULL
## 
## [[1]][[13]]
##  [1] 11 20  7 10  8 15  2 12 18 14  4  5  9  6 17 19 13 23 21 16
## 
## [[1]][[14]]
## NULL
## 
## [[1]][[15]]
## NULL
## 
## [[1]][[16]]
## NULL
## 
## [[1]][[17]]
## NULL
## 
## [[1]][[18]]
## NULL
## 
## [[1]][[19]]
## NULL
## 
## [[1]][[20]]
## NULL
## 
## [[1]][[21]]
## NULL
## 
## [[1]][[22]]
## NULL
## 
## [[1]][[23]]
## NULL
## 
## [[1]][[24]]
## NULL
## 
## [[1]][[25]]
## NULL
## 
## [[1]][[26]]
## NULL
## 
## [[1]][[27]]
## NULL
## 
## [[1]][[28]]
## NULL
## 
## [[1]][[29]]
## NULL
## 
## [[1]][[30]]
## NULL
## 
## [[1]][[31]]
## NULL
## 
## [[1]][[32]]
## NULL
## 
## [[1]][[33]]
## NULL
## 
## [[1]][[34]]
## NULL
## 
## [[1]][[35]]
## NULL
## 
## [[1]][[36]]
## NULL
## 
## [[1]][[37]]
## NULL
## 
## [[1]][[38]]
## NULL
## 
## [[1]][[39]]
## NULL
## 
## [[1]][[40]]
## NULL
## 
## [[1]][[41]]
## NULL
## 
## [[1]][[42]]
## NULL
## 
## [[1]][[43]]
## NULL
## 
## [[1]][[44]]
## NULL
## 
## [[1]][[45]]
## NULL
## 
## [[1]][[46]]
## NULL
## 
## [[1]][[47]]
## NULL
## 
## [[1]][[48]]
## NULL
## 
## [[1]][[49]]
## NULL
## 
## [[1]][[50]]
## NULL
## 
## [[1]][[51]]
## NULL
## 
## [[1]][[52]]
## NULL
## 
## [[1]][[53]]
## NULL
## 
## [[1]][[54]]
## NULL
## 
## [[1]][[55]]
## NULL
## 
## [[1]][[56]]
## NULL
## 
## [[1]][[57]]
## NULL
## 
## [[1]][[58]]
## NULL
## 
## [[1]][[59]]
## NULL
## 
## [[1]][[60]]
## NULL
## 
## [[1]][[61]]
## NULL
## 
## [[1]][[62]]
## NULL
## 
## [[1]][[63]]
## NULL
## 
## [[1]][[64]]
## NULL
## 
## [[1]][[65]]
## NULL
## 
## [[1]][[66]]
## NULL
## 
## [[1]][[67]]
## NULL
## 
## [[1]][[68]]
##  [1] 11  3  9 15  8 12 20  7 10  2 18 14  4  5  6 13 17 19 23 21 16
## 
## 
## [[2]]
## [[2]][[1]]
##  [1] 11 20  7 10  8 11  7  8 15  2 15 12 18 10 14 10  4 18  5
## 
## [[2]][[2]]
##  [1]  8 15  2 15 12 18 10 14 10  4 18  5  9  4  7  7  9  4  5
## 
## [[2]][[3]]
##  [1] 15  2 15 12 18 10 14 10  4 18  5  9  4  7  7  9  4  5  5
## 
## [[2]][[4]]
##  [1]  2 15 12 18 10 14 10  4 18  5  9  4  7  7  9  4  5  5  9
## 
## [[2]][[5]]
##  [1]  6 17 19 13 10 15 14 14  6 11 10 13 13 15  6 10 20  6 23
## 
## [[2]][[6]]
##  [1] 17 19 13 10 15 14 14  6 11 10 13 13 15  6 10 20  6 23  5
## 
## [[2]][[7]]
##  [1] 10 13 13 15  6 10 20  6 23  5 14  9 14 11 18 10 14 11 21
## 
## [[2]][[8]]
##  [1] 15  6 10 20  6 23  5 14  9 14 11 18 10 14 11 21 10 10 12
## 
## [[2]][[9]]
##  [1]  6 10 20  6 23  5 14  9 14 11 18 10 14 11 21 10 10 12  4
## 
## [[2]][[10]]
##  [1] 20  6 23  5 14  9 14 11 18 10 14 11 21 10 10 12  4  6 14
## 
## [[2]][[11]]
##  [1] 23  5 14  9 14 11 18 10 14 11 21 10 10 12  4  6 14  6 14
## 
## [[2]][[12]]
##  [1] 14 11 21 10 10 12  4  6 14  6 14  7 18 10  8  7  9  8  8
## 
## [[2]][[13]]
##  [1] 21 10 10 12  4  6 14  6 14  7 18 10  8  7  9  8  8 16 14
## 
## [[2]][[14]]
##  [1]  7  8 15  2 15 12 18 10 14 10  4 18  5  9  4  7  7  9  4
## 
## [[2]][[15]]
##  [1]  8 15  2 15 12 18 10 14 10  4 18  5  9  4  7  7  9  4  5
## 
## [[2]][[16]]
##  [1] 15  2 15 12 18 10 14 10  4 18  5  9  4  7  7  9  4  5  5
## 
## [[2]][[17]]
##  [1]  2 15 12 18 10 14 10  4 18  5  9  4  7  7  9  4  5  5  9
## 
## [[2]][[18]]
##  [1] 15 12 18 10 14 10  4 18  5  9  4  7  7  9  4  5  5  9 11
## 
## [[2]][[19]]
##  [1] 12 18 10 14 10  4 18  5  9  4  7  7  9  4  5  5  9 11  6
## 
## [[2]][[20]]
##  [1] 18 10 14 10  4 18  5  9  4  7  7  9  4  5  5  9 11  6  2
## 
## [[2]][[21]]
##  [1] 10 14 10  4 18  5  9  4  7  7  9  4  5  5  9 11  6  2  4
## 
## [[2]][[22]]
##  [1]  4 18  5  9  4  7  7  9  4  5  5  9 11  6  2  4 15  6  4
## 
## [[2]][[23]]
##  [1] 18  5  9  4  7  7  9  4  5  5  9 11  6  2  4 15  6  4  9
## 
## [[2]][[24]]
##  [1]  4  7  7  9  4  5  5  9 11  6  2  4 15  6  4  9 14 13 14
## 
## [[2]][[25]]
##  [1]  4  5  5  9 11  6  2  4 15  6  4  9 14 13 14  6 17 19 13
## 
## [[2]][[26]]
##  [1]  9 11  6  2  4 15  6  4  9 14 13 14  6 17 19 13 10 15 14
## 
## [[2]][[27]]
##  [1] 11  6  2  4 15  6  4  9 14 13 14  6 17 19 13 10 15 14 14
## 
## [[2]][[28]]
##  [1]  4 15  6  4  9 14 13 14  6 17 19 13 10 15 14 14  6 11 10
## 
## [[2]][[29]]
##  [1] 15  6  4  9 14 13 14  6 17 19 13 10 15 14 14  6 11 10 13
## 
## [[2]][[30]]
##  [1]  6  4  9 14 13 14  6 17 19 13 10 15 14 14  6 11 10 13 13
## 
## [[2]][[31]]
##  [1]  4  9 14 13 14  6 17 19 13 10 15 14 14  6 11 10 13 13 15
## 
## [[2]][[32]]
##  [1] 14 13 14  6 17 19 13 10 15 14 14  6 11 10 13 13 15  6 10
## 
## [[2]][[33]]
##  [1] 13 14  6 17 19 13 10 15 14 14  6 11 10 13 13 15  6 10 20
## 
## [[2]][[34]]
##  [1] 14  6 17 19 13 10 15 14 14  6 11 10 13 13 15  6 10 20  6
## 
## [[2]][[35]]
##  [1]  6 17 19 13 10 15 14 14  6 11 10 13 13 15  6 10 20  6 23
## 
## [[2]][[36]]
##  [1] 17 19 13 10 15 14 14  6 11 10 13 13 15  6 10 20  6 23  5
## 
## [[2]][[37]]
##  [1] 19 13 10 15 14 14  6 11 10 13 13 15  6 10 20  6 23  5 14
## 
## [[2]][[38]]
##  [1] 13 10 15 14 14  6 11 10 13 13 15  6 10 20  6 23  5 14  9
## 
## [[2]][[39]]
##  [1] 10 15 14 14  6 11 10 13 13 15  6 10 20  6 23  5 14  9 14
## 
## [[2]][[40]]
##  [1] 15 14 14  6 11 10 13 13 15  6 10 20  6 23  5 14  9 14 11
## 
## [[2]][[41]]
##  [1] 14 14  6 11 10 13 13 15  6 10 20  6 23  5 14  9 14 11 18
## 
## [[2]][[42]]
##  [1] 14  6 11 10 13 13 15  6 10 20  6 23  5 14  9 14 11 18 10
## 
## [[2]][[43]]
##  [1]  6 11 10 13 13 15  6 10 20  6 23  5 14  9 14 11 18 10 14
## 
## [[2]][[44]]
##  [1] 11 10 13 13 15  6 10 20  6 23  5 14  9 14 11 18 10 14 11
## 
## [[2]][[45]]
##  [1] 10 13 13 15  6 10 20  6 23  5 14  9 14 11 18 10 14 11 21
## 
## [[2]][[46]]
##  [1] 13 13 15  6 10 20  6 23  5 14  9 14 11 18 10 14 11 21 10
## 
## [[2]][[47]]
##  [1] 13 15  6 10 20  6 23  5 14  9 14 11 18 10 14 11 21 10 10
## 
## [[2]][[48]]
##  [1] 15  6 10 20  6 23  5 14  9 14 11 18 10 14 11 21 10 10 12
## 
## [[2]][[49]]
##  [1]  6 10 20  6 23  5 14  9 14 11 18 10 14 11 21 10 10 12  4
## 
## [[2]][[50]]
##  [1] 10 20  6 23  5 14  9 14 11 18 10 14 11 21 10 10 12  4  6
## 
## [[2]][[51]]
##  [1] 20  6 23  5 14  9 14 11 18 10 14 11 21 10 10 12  4  6 14
## 
## [[2]][[52]]
##  [1]  6 23  5 14  9 14 11 18 10 14 11 21 10 10 12  4  6 14  6
## 
## [[2]][[53]]
##  [1] 23  5 14  9 14 11 18 10 14 11 21 10 10 12  4  6 14  6 14
## 
## [[2]][[54]]
##  [1] 14  9 14 11 18 10 14 11 21 10 10 12  4  6 14  6 14  7 18
## 
## [[2]][[55]]
##  [1]  9 14 11 18 10 14 11 21 10 10 12  4  6 14  6 14  7 18 10
## 
## [[2]][[56]]
##  [1] 14 11 18 10 14 11 21 10 10 12  4  6 14  6 14  7 18 10  8
## 
## [[2]][[57]]
##  [1] 11 18 10 14 11 21 10 10 12  4  6 14  6 14  7 18 10  8  7
## 
## [[2]][[58]]
##  [1] 18 10 14 11 21 10 10 12  4  6 14  6 14  7 18 10  8  7  9
## 
## [[2]][[59]]
##  [1] 10 14 11 21 10 10 12  4  6 14  6 14  7 18 10  8  7  9  8
## 
## [[2]][[60]]
##  [1] 14 11 21 10 10 12  4  6 14  6 14  7 18 10  8  7  9  8  8
## 
## [[2]][[61]]
##  [1] 11 21 10 10 12  4  6 14  6 14  7 18 10  8  7  9  8  8 16
## 
## [[2]][[62]]
##  [1] 21 10 10 12  4  6 14  6 14  7 18 10  8  7  9  8  8 16 14
## 
## [[2]][[63]]
##  [1] 10 10 12  4  6 14  6 14  7 18 10  8  7  9  8  8 16 14  9
## 
## [[2]][[64]]
##  [1] 10 12  4  6 14  6 14  7 18 10  8  7  9  8  8 16 14  9 13
## 
## [[2]][[65]]
##  [1] 12  4  6 14  6 14  7 18 10  8  7  9  8  8 16 14  9 13  5
## 
## [[2]][[66]]
##  [1]  4  6 14  6 14  7 18 10  8  7  9  8  8 16 14  9 13  5  8
## 
## [[2]][[67]]
##  [1]  6 14  6 14  7 18 10  8  7  9  8  8 16 14  9 13  5  8 11
## 
## [[2]][[68]]
##  [1] 14  6 14  7 18 10  8  7  9  8  8 16 14  9 13  5  8 11 20
## 
## 
## [[3]]
## [[3]][[1]]
## DBSCAN clustering for 82 objects.
## Parameters: eps = 21.9089023002066, minPts = 3
## Using euclidean distances and borderpoints = TRUE
## The clustering contains 1 cluster(s) and 3 noise points.
## 
##  0  1 
##  3 79 
## 
## Available fields: cluster, eps, minPts, dist, borderPoints
## 
## [[3]][[2]]
## DBSCAN clustering for 82 objects.
## Parameters: eps = 21.4709105535839, minPts = 3
## Using euclidean distances and borderpoints = TRUE
## The clustering contains 1 cluster(s) and 13 noise points.
## 
##  0  1 
## 13 69 
## 
## Available fields: cluster, eps, minPts, dist, borderPoints
## 
## [[3]][[3]]
## DBSCAN clustering for 82 objects.
## Parameters: eps = 19.2613602842582, minPts = 3
## Using euclidean distances and borderpoints = TRUE
## The clustering contains 4 cluster(s) and 68 noise points.
## 
##  0  1  2  3  4 
## 68  5  3  3  3 
## 
## Available fields: cluster, eps, minPts, dist, borderPoints
## 
## [[3]][[4]]
## DBSCAN clustering for 82 objects.
## Parameters: eps = 21.51743479135, minPts = 3
## Using euclidean distances and borderpoints = TRUE
## The clustering contains 1 cluster(s) and 13 noise points.
## 
##  0  1 
## 13 69 
## 
## Available fields: cluster, eps, minPts, dist, borderPoints
## 
## [[3]][[5]]
## DBSCAN clustering for 82 objects.
## Parameters: eps = 21.6794833886788, minPts = 3
## Using euclidean distances and borderpoints = TRUE
## The clustering contains 1 cluster(s) and 13 noise points.
## 
##  0  1 
## 13 69 
## 
## Available fields: cluster, eps, minPts, dist, borderPoints
## 
## [[3]][[6]]
## DBSCAN clustering for 82 objects.
## Parameters: eps = 21.4709105535839, minPts = 3
## Using euclidean distances and borderpoints = TRUE
## The clustering contains 1 cluster(s) and 13 noise points.
## 
##  0  1 
## 13 69 
## 
## Available fields: cluster, eps, minPts, dist, borderPoints
#eps=0.53

#table( lista_anomalias_unicas_detectadas[[41]] %in% dados$serie[dados$event==TRUE])
#c1 = compara_anomalias(lista_anomalias_unicas_detectadas[[20]],dados$serie)
#
#dados$event_dbscan_dist_prob_ts = dados$serie %in% c1[[4]]  
#
#dados$indice = 1:length(dados$serie)
#my_ts =  ts(dados$serie,dados$indice)
#plot.ts(my_ts)
#points(dados$indice[dados$event=="TRUE"],dados$serie[dados$event], pch = 20, col = "red")
#plot.ts(my_ts)
#points(dados$indice[dados$event_dbscan_dist_prob_ts=="TRUE"],dados$serie[dados$event_dbscan_dist_prob_ts], pch = #20, col = "red")

V.final5

##backup
### introduzindo o cálculo das probabilidades
#
#load("har_examples.RData")
##dados = har_examples$example15
##dados = har_examples$example16
#dados = har_examples$example17
##dados = har_examples$example18
#dados = rexp(100)
#dados = rpois(100,lambda = 3)
#dados = rbinom(1000,size=10,prob=0.5)
#
#
#
#teste = list()
#dados_anomalia = list()
##nomes_dist_aic = list()
#nomes_dist_bic = list()
#probab_anomalias_bic = list()
#
#
#dbscan_dist_prob_ts2 = function(vetor_serie, tamanho_janela, eps, minPts,limiar) {
#  data_ts_janela <- ts_data(vetor_serie, tamanho_janela)
#  
#  datamatrix <-
#    matrix(data_ts_janela,
#           nrow = dim(data_ts_janela)[1],
#           ncol = tamanho_janela)
#  
#  dbscanResult <-
#    dbscan::dbscan(datamatrix, eps = eps , minPts = minPts) # clustering
#  
#  datamatrix_df = data.frame(datamatrix)
#  
#  datamatrix_df$clusters =  dbscanResult$cluster
#  
#  datamatrix_df_anomalias = datamatrix_df %>% filter(clusters == 0)
#  
#  datamatrix_df_anomalias = subset(datamatrix_df_anomalias, select = -c(clusters))
#  
#  for (i in 1:dim(datamatrix_df_anomalias)[1]) {
#    
#    if (class(unlist(datamatrix_df_anomalias[3, ] )) == "integer" ) {
#      #fit_x.1 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i, ]), "binom")
#      fit_x.2 = fitdistrplus::fitdist(unlist(datamatrix_df_anomalias[i, ]), "nbinom")
#      fit_x.3 = fitdistrplus::fitdist(unlist(datamatrix_df_anomalias[i, ]), "geom")
#      #fit_x.4 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i, ]), "hyper")
#      fit_x.5 = fitdistrplus::fitdist(unlist(datamatrix_df_anomalias[i, ]), "pois")
#
#      teste[[i]] = gofstat(
#        list( fit_x.2, fit_x.3, fit_x.5),
#        #fit_x.1,, fit_x.4,
#        fitnames = c(
#          #"Binomial", 
#          "Multinomial", 
#          "Geométrica", 
#          #"Hypergeométrica",
#          "Poisson" 
#        )
#      )
#      nomes_dist_bic[[i]] = names(which.min(teste[[i]]$bic))
#      #nomes_dist_bic[[i]] = names(which.min(teste[[i]]$aic))
#      #cat(
#      #  "Pela métrica AIC, A distribuicao melhor se ajustou a distribuicao:",
#      #  nomes_dist_aic[[i]],
#      #  "\n"
#      #)
#      #cat(
#      #  "---------------------------------------------------------------------------------------"
#      #)
#      cat(
#        "Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao:",
#        nomes_dist_bic[[i]],
#        "\n"
#      )
#      
#    }
#
#    if (all(datamatrix_df_anomalias[i, ] > 0)) {
#      fit_x1 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i, ]), "lnorm")
#      fit_x2 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i, ]), "exp")
#      fit_x3 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i, ]), "gamma")
#      fit_x4 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i, ]), "unif")
#      fit_x5 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i, ]), "logis")
#      fit_x6 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i, ]), "norm")
#      
#      teste[[i]] = gofstat(
#        list(fit_x1, fit_x2, fit_x3, fit_x4, fit_x5, fit_x6),
#        fitnames = c(
#          "lognormal",
#          "Exponencial",
#          "Gamma",
#          "Uniforme",
#          "logística",
#          "Normal"
#        )
#      )
#      nomes_dist_bic[[i]] = names(which.min(teste[[i]]$bic))
#      #nomes_dist_bic[[i]] = names(which.min(teste[[i]]$aic))
#      #cat(
#      #  "Pela métrica AIC, A distribuicao melhor se ajustou a distribuicao:",
#      #  nomes_dist_aic[[i]],
#      #  "\n"
#      #)
#      #cat(
#      #  "---------------------------------------------------------------------------------------"
#      #)
#      cat(
#        "Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao:",
#        nomes_dist_bic[[i]],
#        "\n"
#      )
#      
#    }
#    
#    else {
#      fit_x4 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i, ]), "unif")
#      fit_x5 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i, ]), "logis")
#      fit_x6 = fitdistrplus::fitdist(as.numeric(datamatrix_df_anomalias[i, ]), "norm")
#      teste[[i]] = gofstat(list(fit_x4, fit_x5, fit_x6),
#                           fitnames = c("Uniforme", "logística", "Normal"))
#      
#      #nomes_dist_aic[[i]] = names(which.min(teste[[i]]$aic))
#      nomes_dist_bic[[i]] = names(which.min(teste[[i]]$bic))
#      #cat(
#      #  "Pela métrica AIC, A distribuicao melhor se ajustou a distribuicao:",
#      #  nomes_dist_aic[[i]],
#      #  "\n"
#      #)
#      #cat(
#      #  "---------------------------------------------------------------------------------------"
#      #)
#      cat(
#        "Pela métrica BIC, A distribuicao melhor se ajustou a distribuicao:",
#        nomes_dist_bic[[i]],
#        "\n"
#      )
#    }
#    
#    dados_anomalia[[i]] = unlist(datamatrix_df_anomalias[i, ])
#    
#    #"Binomial",
#    #"Hypergeométrica"
#    
#     if (nomes_dist_bic[[i]] == "Multinomial") {
#      probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(
#        dnbinom(
#          dados_anomalia[[i]],
#          size = fit_x.2$estimate[[1]],
#          mu = fit_x.2$estimate[[2]]
#        ) < limiar
#      ) == "TRUE"]
#    }
#    
#     if (nomes_dist_bic[[i]] == "Geométrica") {
#      probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(
#        dgeom(
#          dados_anomalia[[i]],
#          prob = fit_x.3$estimate[[1]]
#        ) < limiar
#      ) == "TRUE"]
#    }
#    
#     if (nomes_dist_bic[[i]] == "Poisson") {
#      probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(
#        dpois(
#          dados_anomalia[[i]],
#          lambda = fit_x.5$estimate[[1]]
#        ) < limiar
#      ) == "TRUE"]
#    }
#    
##--    
#    if (nomes_dist_bic[[i]] == "lognormal") {
#      probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(
#        dlnorm(
#          dados_anomalia[[i]],
#          meanlog = fit_x1$estimate[[1]],
#          sdlog = fit_x1$estimate[[2]]
#        ) < limiar
#      ) == "TRUE"]
#    }
#    if (nomes_dist_bic[[i]] == "exp") {
#      probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(dexp(dados_anomalia[[i]],
#                                                              rate = fit_x2$estimate[[1]]) < limiar) ==
#                                                          "TRUE"]
#    }
#    if (nomes_dist_bic[[i]] == "gamma") {
#      probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(
#        dgamma(
#          dados_anomalia[[i]],
#          shape = fit_x3$estimate[[1]],
#          rate = fit_x3$estimate[[2]]
#        ) < limiar
#      ) == "TRUE"]
#    }
#    
#    if (nomes_dist_bic[[i]] == "unif") {
#      probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(dunif(
#        dados_anomalia[[i]],
#        min = fit_x4$estimate[[1]],
#        max = fit_x4$estimate[[2]]
#      ) < limiar) == "TRUE"]
#    }
#    
#    if (nomes_dist_bic[[i]] == "logística") {
#      probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(
#        dlogis(
#          dados_anomalia[[i]],
#          location = fit_x5$estimate[[1]],
#          scale = fit_x5$estimate[[2]]
#        ) < limiar
#      ) == "TRUE"]
#      
#    } else {
#      probab_anomalias_bic[[i]] =  dados_anomalia[[i]] [(dnorm(
#        dados_anomalia[[i]],
#        mean = fit_x6$estimate[[1]],
#        sd = fit_x6$estimate[[2]]
#      ) < limiar) == "TRUE"]
#      
#    }
#    
#    
#    
#    
#    #cat(
#    #  "Pelo método da distribuição, essa janela foi considerada anomalia :",
#    #  as.numeric(datamatrix_df_anomalias[i, ]),
#    #  "\n"
#    #)
#    #cat(
#    #  "---------------------------------------------------------------------------------------",
#    #  "\n"
#    #)
#    
#    
#  }
#  
#  grafico_dbscan = dbscan::hullplot(datamatrix, dbscanResult, main="DBSCAN")
#    
#  grafico_boxplot = boxplot(data.frame(t(datamatrix_df_anomalias)),plot = "TRUE")
#    
#  grafico_knn = dbscan::kNNdistplot(datamatrix, k =  minPts)
#  
#  assign("datamatrix_df_anomalias",datamatrix_df_anomalias,envir = .GlobalEnv)
#  assign("probab_anomalias_bic",probab_anomalias_bic,envir = .GlobalEnv)
#  assign("nomes_dist_bic",nomes_dist_bic,envir = .GlobalEnv)
#  assign("dados_anomalia",dados_anomalia,envir = .GlobalEnv)
#  assign("grafico_knn",grafico_knn,envir = .GlobalEnv)
#  assign("grafico_dbscan",grafico_dbscan,envir = .GlobalEnv)
#  assign("grafico_boxplot",grafico_boxplot,envir = .GlobalEnv)
#  assign("dbscanresult",dbscanResult,envir = .GlobalEnv)
#  
#  return(
#    list(
#      #datamatrix_df_anomalias,
#      probab_anomalias_bic,
#      nomes_dist_bic,
#      dados_anomalia,
#      dbscanResult
#    )
#  )
#    
#}
#
#dbscan_dist_prob_ts2(dados,tamanho_janela=10,eps=2.2,minPts=3,limiar = 0.05)  
#