Análise da Série


In [1]:
library(repr)
library(forecast)
options(warn=-1)
options(repr.plot.width=10, repr.plot.height=5)

source("/home/petronio/dados/Dropbox/Doutorado/Disciplinas/AdvancedFuzzyTimeSeriesModels/rfts/FTS.r")


Loading required package: zoo

Attaching package: ‘zoo’

The following objects are masked from ‘package:base’:

    as.Date, as.Date.numeric

Loading required package: timeDate
This is forecast 7.0 

Data Manipulation


In [2]:
mat <- read.table("/home/petronio/dados/Dropbox/Doutorado/Disciplinas/AdvancedFuzzyTimeSeriesModels/DataSets/CEMIGMatriz.csv",
                     header=FALSE, sep=";")
col <- read.table("/home/petronio/dados/Dropbox/Doutorado/Disciplinas/AdvancedFuzzyTimeSeriesModels/DataSets/CEMIGColunas.csv",
                     header=FALSE, sep=";")
row <- read.table("/home/petronio/dados/Dropbox/Doutorado/Disciplinas/AdvancedFuzzyTimeSeriesModels/DataSets/CEMIGLinhas.csv",
                     header=FALSE, sep=";")

In [18]:
d = dim(row)
linhas = d[1]
colunas = length(col)

#dados <- matrix( c(0,0,0), nrow=linhas*colunas, ncol=3 )

datas <- c()
horas <- c()
valores <- c()

for(k in 1:colunas){
    for(i in 1:linhas){
        ind <- (k-1)*linhas + i
        datas[ind] =  paste(col[[k]], row[i,1])  #as.POSIXct(paste(col[[k]], row[i,1]), format="%d/%m/%Y %H:%M")
        valores[ind] = mat[i,k]
    }
}

dados <- data.frame( datas, valores)
names(dados) <- c("Data","Valor")
#dados$Data <- as.POSIXct(strptime(dados$Data, "%d/%m/%Y %H:%M"), "%d/%m/%Y %H:%M")
#dados
write.table(dados, file="/home/petronio/dados/Dropbox/Doutorado/Disciplinas/AdvancedFuzzyTimeSeriesModels/DataSets/CEMIG.csv",
            sep=";",row.names = FALSE, col.names = TRUE,)

Serial Data Load


In [2]:
dados <- read.table("/home/petronio/dados/Dropbox/Doutorado/Disciplinas/AdvancedFuzzyTimeSeriesModels/DataSets/CEMIG.csv",
                     header=TRUE, sep=";")
#names(dados) <- c("ID","Data","Valor")
dados$Data <- as.POSIXct(strptime(dados$Data, "%d/%m/%Y %H:%M"), "%d/%m/%Y %H:%M")
#dados

In [3]:
plot(dados, type="h")
dev.copy(png,filename="/home/petronio/Pictures/cemig.jpg");
dev.off ();


Out[3]:
png: 3
Out[3]:
pdf: 2

In [80]:
acf(dados$Valor, lagmax=300)



In [81]:
pacf(dados$Valor, lagmax=300)



In [ ]:
## Partitioning Study - By

In [16]:
source("/home/petronio/dados/Dropbox/Doutorado/Disciplinas/AdvancedFuzzyTimeSeriesModels/rfts/FTS.r")
explorePartitioning(FitChenFTS,dados,1,2,c(30, 40, 50, 70, 80, 90),trimf,NULL,0.5)


Out[16]:
RMSEMAPE
3013.86240.07471047
4012.820340.06463778
5012.226280.06247462
7011.727910.05981522
8011.282970.05398116
9011.10560.05226411

In [17]:
source("/home/petronio/dados/Dropbox/Doutorado/Disciplinas/AdvancedFuzzyTimeSeriesModels/rfts/FTS.r")
explorePartitioning(FitYuFTS,dados,1,2,c(30, 40, 50, 70, 80, 90),trimf,NULL,0.5)


Out[17]:
RMSEMAPE
3010.888450.0493428
4010.477740.04537506
5010.35710.04378158
7010.252590.04225607
8010.180870.04165554
9010.140710.04106492

In [18]:
source("/home/petronio/dados/Dropbox/Doutorado/Disciplinas/AdvancedFuzzyTimeSeriesModels/rfts/FTS.r")
explorePartitioning(FitEfendiFTS,dados,1,2,c(30, 40, 50, 70, 80, 90),trimf,NULL,0.5)


Out[18]:
RMSEMAPE
3010.89390.04943357
4010.443320.04533812
5010.305370.04361885
7010.202890.04203582
8010.147570.04154035
9010.073820.04086746

In [19]:
source("/home/petronio/dados/Dropbox/Doutorado/Disciplinas/AdvancedFuzzyTimeSeriesModels/rfts/FTS.r")
explorePartitioning(FitSadaeiFTS,dados,1,2,c(30, 40, 50, 70, 80, 90),trimf,1.1,0.5)


Out[19]:
RMSEMAPE
3010.973580.04922934
4010.709370.04592069
5010.655420.04544757
7010.384680.04320225
8010.33880.04260038
9010.264990.04187044

In [112]:
source("/home/petronio/dados/Dropbox/Doutorado/Disciplinas/AdvancedFuzzyTimeSeriesModels/rfts/FTS.r")
explorePartitioning(FitHOFTS,dados,1,2,c(30, 40, 50, 70, 80, 90),trimf,15,0.5)


Out[112]:
RMSEMAPE
3011.270760.05354037
4010.543920.04693609
5010.425530.04666149
7010.151530.0419751
8010.109640.04155458
9010.064610.04095059

Daily Average


In [4]:
Ano <- strftime(dados$Data, "%Y")
Hora <- strftime(dados$Data, "%H:%M")
Valor <- dados$Valor
dadosHorario <- data.frame(Ano, Hora, Valor)

In [14]:
dadosHorario <- aggregate(dadosHorario, by=list(dadosHorario$Ano, dadosHorario$Hora), FUN=mean, na.rm=TRUE)

dadosHorario <- data.frame(dadosHorario$Group.1, dadosHorario$Group.2, dadosHorario$Valor)

names(dadosHorario) <- c("Ano","Hora","Valor")

dadosHorario <- dadosHorario[with(dadosHorario, order(Ano, Hora)),]

write.table(dadosHorario, file="/home/petronio/dados/Dropbox/Doutorado/Disciplinas/AdvancedFuzzyTimeSeriesModels/DataSets/CEMIGHorario.csv",
            sep=";",row.names = FALSE, col.names = TRUE)

In [3]:
dadosHorario <- read.table(file="/home/petronio/dados/Dropbox/Doutorado/Disciplinas/AdvancedFuzzyTimeSeriesModels/DataSets/CEMIGHorario.csv",
            header=TRUE, sep=";")
#dadosHorario

plot(dadosHorario$Hora, dadosHorario$Valor, type="l")



In [13]:
source("/home/petronio/dados/Dropbox/Doutorado/Disciplinas/AdvancedFuzzyTimeSeriesModels/rfts/FTS.r")
explorePartitioning(FitChenFTS,dadosHorario,2,3,c(30, 40, 50, 70, 80, 90),trimf,NULL,0.5)


Out[13]:
RMSEMAPE
307.6487230.03849546
407.4794320.03812566
507.1896810.03442569
706.7361790.03032986
807.1335960.03124743
906.7985160.03131317

In [14]:
source("/home/petronio/dados/Dropbox/Doutorado/Disciplinas/AdvancedFuzzyTimeSeriesModels/rfts/FTS.r")
explorePartitioning(FitYuFTS,dadosHorario,2,3,c(30, 40, 50, 70, 80, 90),trimf,NULL,0.5)


Out[14]:
RMSEMAPE
307.57380.03315257
407.4745420.03360314
507.2258270.03149178
706.7123620.02838278
807.2142290.03041514
906.7893970.02923874

In [15]:
source("/home/petronio/dados/Dropbox/Doutorado/Disciplinas/AdvancedFuzzyTimeSeriesModels/rfts/FTS.r")
explorePartitioning(FitEfendiFTS,dadosHorario,2,3,c(30, 40, 50, 70, 80, 90),trimf,NULL,0.5)


Out[15]:
RMSEMAPE
307.3854090.03278135
407.3516490.03473859
507.1183680.03183169
706.6966470.02865873
807.142990.03042982
906.7660730.02927078

In [25]:
source("/home/petronio/dados/Dropbox/Doutorado/Disciplinas/AdvancedFuzzyTimeSeriesModels/rfts/FTS.r")
explorePartitioning(FitSadaeiFTS,dadosHorario,2,3,c(30, 40, 50, 70, 80, 90),trimf,1.2,0.5)


Out[25]:
RMSEMAPE
307.3983030.03235395
407.3509380.03386833
507.1214990.03136226
706.6807990.02843969
807.1576370.03025806
906.7595180.02915208

In [118]:
source("/home/petronio/dados/Dropbox/Doutorado/Disciplinas/AdvancedFuzzyTimeSeriesModels/rfts/FTS.r")
explorePartitioning(FitHOFTS,dadosHorario,2,3,c(30, 40, 50, 70, 80, 90),trimf,3,0.5)


Out[118]:
RMSEMAPE
306.2954740.03312927
405.9437270.03036291
506.2889440.0304848
705.9988160.02811137
806.0061660.02845206
906.0469880.0292541

In [106]:
source("/home/petronio/dados/Dropbox/Doutorado/Disciplinas/AdvancedFuzzyTimeSeriesModels/rfts/FTS.r")
explorePartitioning(FitSeasonalFTS,dadosHorario,2,3,c(30, 40, 50, 70, 80, 90),trimf,96,0.5)


Out[106]:
RMSEMAPE
308.3725790.038392
408.2919750.0390392
508.1698960.03867595
708.1302560.03806607
807.9308750.03684776
908.0754260.03764115

In [119]:
source("/home/petronio/dados/Dropbox/Doutorado/Disciplinas/AdvancedFuzzyTimeSeriesModels/rfts/FTS.r")
fit <- FitHOFTS(dados$Valor[1:4992],70,trimf,30)
hofts <- fit$train()

In [114]:
hofts$forecastAhead(dados$Valor[4977:4992],96)


Out[114]:
  1. 89.04
  2. 89.46
  3. 88.62
  4. 91.14
  5. 92.4
  6. 91.56
  7. 91.14
  8. 90.72
  9. 89.04
  10. 90.72
  11. 92.4
  12. 91.98
  13. 91.98
  14. 92.82
  15. 94.92
  16. 94.6779428571428
  17. 94.6779428571428
  18. NaN
  19. 91.4194285714286
  20. 91.4194285714286
  21. 91.4194285714286
  22. 91.4194285714286
  23. 91.4194285714286
  24. 91.4194285714286
  25. 91.4194285714286
  26. 91.4194285714286
  27. 91.4194285714286
  28. 91.4194285714286
  29. 91.4194285714286
  30. 101.194971428571
  31. 97.9364571428571
  32. 91.4194285714286
  33. 91.4194285714286
  34. 84.9024
  35. 84.9024
  36. 97.9364571428571
  37. 84.9024
  38. 97.9364571428571
  39. 84.9024
  40. 97.9364571428571
  41. 84.9024
  42. 97.9364571428571
  43. 84.9024
  44. 97.9364571428571
  45. 84.9024
  46. 97.9364571428571
  47. 84.9024
  48. 97.9364571428571
  49. 84.9024
  50. 97.9364571428571
  51. 84.9024
  52. 97.9364571428571
  53. 84.9024
  54. 97.9364571428571
  55. 84.9024
  56. 97.9364571428571
  57. 84.9024
  58. 97.9364571428571
  59. 84.9024
  60. 97.9364571428571
  61. 84.9024
  62. 97.9364571428571
  63. 84.9024
  64. 97.9364571428571
  65. 84.9024
  66. 97.9364571428571
  67. 84.9024
  68. 97.9364571428571
  69. 84.9024
  70. 97.9364571428571
  71. 84.9024
  72. 97.9364571428571
  73. 84.9024
  74. 97.9364571428571
  75. 84.9024
  76. 97.9364571428571
  77. 84.9024
  78. 97.9364571428571
  79. 84.9024
  80. 97.9364571428571
  81. 84.9024
  82. 97.9364571428571
  83. 84.9024
  84. 97.9364571428571
  85. 84.9024
  86. 97.9364571428571
  87. 84.9024
  88. 97.9364571428571
  89. 84.9024
  90. 97.9364571428571
  91. 84.9024
  92. 97.9364571428571
  93. 84.9024
  94. 97.9364571428571
  95. 84.9024
  96. 97.9364571428571
  97. 84.9024

Non Averaged Daily


In [108]:
source("/home/petronio/dados/Dropbox/Doutorado/Disciplinas/AdvancedFuzzyTimeSeriesModels/rfts/FTS.r")
fit <- FitSeasonalFTS(dados$Valor[1:4992],90,trimf,96)
sfts <- fit$train()

In [109]:
plot(sfts$forecastAhead(96,96),type="l")



In [117]:
source("/home/petronio/dados/Dropbox/Doutorado/Disciplinas/AdvancedFuzzyTimeSeriesModels/rfts/FTS.r")
explorePartitioning(FitSeasonalFTS,dadosHorario,2,3,c(30, 40, 50, 70, 80, 90),trimf,96,0.5)


Out[117]:
RMSEMAPE
308.3725790.038392
408.2919750.0390392
508.1698960.03867595
708.1302560.03806607
807.9308750.03684776
908.0754260.03764115

In [ ]: