/
05-suav-exp.R
74 lines (58 loc) · 1.44 KB
/
05-suav-exp.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# Suavização exponencial simples
library(tidymodels)
soja <- readr::read_rds("https://github.com/curso-r/main-series/raw/main/dados/soja.rds")
# Suavização exponencial simples
model <- forecast::ses(soja$KG_LIQUIDO/1000, initial = "simple")
model$model$par
sigmoid <- function(x) {
1/(1 + exp(-x))
}
suav_exp <- function(y) {
function(pars) {
alpha <- sigmoid(pars[1])
l_0 <- pars[2]
y_hat <- numeric(length = length(y))
y_hat[1] <- l_0
for (i in 2:length(y)) {
y_hat[i] <- alpha*y[i-1] + (1-alpha)*y_hat[i-1]
}
mean((y-y_hat)^2)
}
}
y <- soja$KG_LIQUIDO/1000
opt <- optim(fn = suav_exp(y), par = c(0, y[1]))
sigmoid(opt$par[1])
opt$par[2]
# Holt
model <- forecast::holt(soja$KG_LIQUIDO/1000, initial = "simple")
model$model$par
holt <- function(y) {
function(pars) {
alpha <- sigmoid(pars[1])
beta <- sigmoid(pars[2])
l_0 <- pars[3]
b_0 <- pars[4]
y_hat <- numeric(length = length(y))
y_hat[1] <- l_0 + b_0
l_anterior <- l_0
b_anterior <- b_0
for (i in 2:length(y)) {
l <- alpha*y[i-1] + (1-alpha)*(l_anterior + b_anterior)
b <- beta*(l - l_anterior) + (1-beta)*b_anterior
y_hat[i] <- l + b
l_anterior <- l
b_anterior <- b
}
mean((y-y_hat)^2)
}
}
y <- soja$KG_LIQUIDO/1000
opt <- optim(
fn = holt(y),
par = c(inv_sigmoid(0.3), inv_sigmoid(0.1), y[1], y[2] - y[1])
)
sigmoid(opt$par[1])
sigmoid(opt$par[2])
opt$par[3]
opt$par[4]
#