Escolar Documentos
Profissional Documentos
Cultura Documentos
Data Mining
# Para fazer o tratamento da base, se utiliza o pacote lubridate para manipular datas
no R
library(lubridate)
head(dados_itapevi)
tail(dados_itapevi)
dim(dados_itapevi)
[1] 902 17
1 ̂
𝛼
l(𝜃̂ |𝑦) = -0,5n . ln(2π) – n . ln(𝜎̂) – 0,5 . ∑( yt - ̂ )
𝛼2 1+𝑒 −𝛽−ŷt
1.3 Quais seriam bons chutes iniciais para a estimativa dos parâmetros 𝛽 e σ?
Apresente os resultados dos cálculos para esses chutes através do console.
y = dados_itapevi$obitosAcumulado
a.c = max(y)
#beta chute
b.c = -log(a.c/min(y)-1)
b.c
[1] -6.634633
#sigma chute
sigma.c = sd(y)
sigma.c
[1] 255.5619
1.5 Considerando diferentes chutes iniciais para 𝛼̂, partindo de max (Y𝑡),
acrescentando 5%, 10%, 15%, e, com o uso da função nlm(), com opção
print.level=1, estime os parâmetros da função 𝑙 (θ̂). Busque convergência das
estimativas calibrando steptol, gradtol e iterlim se necessário. Para cada um dos
chutes iniciais para 𝛼̂ , apresente os valores da função do log da verossimilhança
e dos parâmetros estimados. Apresente os códigos e resultados através do
console do R.
Chute Inicial: α = max(y)
#chutes
a.c = max(y)
b.c = -log(a.c/min(y)-1)
g.c = 0
sigma.c = sd(y)
theta.c = c(a.c, b.c, g.c, sigma.c)
iteration = 0
Step:
[1] 0 0 0 0
Parameter:
[1] 762.000000 -6.634633 0.000000 255.561861
Function Value
[1] 7937.872
Gradient:
[1] -8.881715e-03 -6.759008e+00 -3.928866e+03 -1.297363e+01
iteration = 21
Parameter:
[1] 491.046309 -3.254455 1964.824750 255.420038
Function Value
[1] 6279.587
Gradient:
[1] -1.185380e-07 0.000000e+00 0.000000e+00 2.350115e-07
y.h = a.h/(1+exp(-b.h-g.h*t))
#chutes
a.c = max(y)*4.3
b.c = -log(a.c/min(y)-1)
g.c = 0
sigma.c = sd(y)
theta.c = c(a.c, b.c, g.c, sigma.c)
iteration = 0
Step:
[1] 0 0 0 0
Parameter:
[1] 3276.600000 -8.094256 0.000000 255.561861
Function Value
[1] 7937.872
Gradient:
[1] -2.065515e-03 -6.765829e+00 -3.932830e+03 -1.297363e+01
iteration = 60
Parameter:
[1] 777.776581377 -2.678102025 0.008175866 38.842053974
Function Value
[1] 4580.913
Gradient:
[1] 1.942503e-03 3.503057e-01 -6.962882e+02 -8.134052e-03
Iterações sucessivas dentro do limite de tolerância.
Iteração atual é provavelmente a solução.
y.h = a.h/(1+exp(-b.h-g.h*t))
1.6 Qual dos chutes para 𝛼̂ maximizou 𝑙(𝜽̂)? Você considera que o algoritmo de
otimização foi bem sucedido nas estimativas dos parâmetros para cada um dos
chutes de 𝛼̂ utilizados? Justifique devidamente sua resposta.
Resposta: O chute que que maximizou a função foi 𝛼̂ = max(𝑦) ∗ 4.3, pois a partir
desse chute, os dados observados foram melhor ajustados ao modelo de
crescimento logístico, de acordo com o gráfico da função otimizada.
1.7 Escreva textualmente a expressão matemática para o modelo estimado
utilizando as estimativas para os parâmetros a partir do chute de 𝛼̂ que
maximizou 𝑙(𝜽̂).
̂
777.776581377
yt = ̂ ̂ ̂
1 + 𝑒−2.678102025 + 0.008175866 ∗t
1.8 Para esse modelo, estime os erros-padrão dos estimadores dos parâmetros,
sua matriz de variância-covariância dos estimadores 𝜃̂ e seus respectivos p-
valores para os testes de significância individual de cada parâmetro. Apresente
os códigos e resultados através do console do R.
theta.hat=lnl_max$estimate
#matriz informação
hess = hessian(func_LL,lnl_max$estimate)
hess
[,1] [,2] [,3] [,4]
[1,] 3.012976e-01 3.083106e+01 1.361201e+04 -1.000207e-04
[2,] 3.083106e+01 8.088152e+03 2.760192e+06 -1.803788e-02
[3,] 1.361201e+04 2.760192e+06 1.078750e+09 -1.296112e+01
[4,] -1.000207e-04 -1.803788e-02 -1.296112e+01 1.196356e+00
# matriz VarCovar
var_covar_ml=solve(hess)
var_covar_ml
[,1] [,2] [,3] [,4]
[1,] 8.7754776446 3.420548e-02 -1.982531e-04 -8.984433e-04
[2,] 0.0342054828 1.108303e-03 -3.267424e-06 -1.582871e-05
[3,] -0.0001982531 -3.267424e-06 1.178896e-08 6.188062e-08
[4,] -0.0008984433 -1.582871e-05 6.188062e-08 8.358723e-01
#erro padrão
ep.ml = (diag(var_covar_ml)^0.5)[1:length(diag(var_covar_ml))-1]
ep.ml
[1] 2.962343269 0.033291187 0.000108577
#Razão Z
z=theta.hat[1:3]/ep.ml
#P-value
pvalor=2*(1-pnorm(abs(z)))
pvalor
[1] 0 0 0
1.9 Interprete os p-valores calculados no item.
a.h = lnl_max$estimate[1]
[1] 777.7766
b.h = lnl_max$estimate[2]
[1] -2.678102
g.h = lnl_max$estimate[3]
[1] 0.008175866
sigma.h = lnl_max$estimate[4]
[1] 38.84205
y.h = a.h/(1+exp(-b.h-g.h*t))
head(y.h)
[1] 50.37771 50.76429 51.15362 51.54573 51.94063 52.33834
tail(y.h)
[1] 770.4513 770.5104 770.5690 770.6272 770.6849 770.7421
MSE.l = sum((y-y.h)^2)/length(t)
MSE.l
[1] 1509.234
RMSE.l = MSE.l^0.5
RMSE.l
[1] 38.84886
MAE.l = sum(abs(y-y.h))/length((t))
MAE.l
[1] 30.59477
MAPE.l = sum(abs(abs(y-y.h)/y))/length(t)
MAPE.l
[1] 0.5351584
1 ̂𝛾∗𝑡
−𝛽− ̂
l(𝜃̂ |𝑦) = -0,5n . ln(2π) – n . ln(𝜎̂) – 0,5 . ∑( 𝑦𝑡 − 𝛼̂ . 𝑒 −𝑒 )
𝜎2
2.3 Quais seriam bons chutes iniciais para a estimativa dos parâmetros 𝛽 e σ?
Apresente os resultados dos cálculos para esses chutes através do console.
Aplicando no R:
b.c.g = -log(log(a.c.g)-log(min(y)))
b.c.g
[1] -1.892501
sigma.c.g = (var(y)*(T-1)/T)^0.5
sigma.c.g
[1] 255.4202
iteration = 0
Step:
[1] 0 0 0 0
Parameter:
[1] 762.000000 -1.892501 0.000000 255.420157
Function Value
[1] 7939.713
Gradient:
[1] -8.891571e-03 -4.496129e+01 -2.617478e+04 -1.299915e+01
iteration = 26
Parameter:
[1] 491.046319 -1.553129 197.569956 255.420029
Function Value
[1] 6279.587
Gradient:
[1] 1.111294e-08 0.000000e+00 0.000000e+00 -2.492546e-08
#plot
y.h.g = a.h.g *exp(-exp(-b.h.g -g.h.g*t))
plot(y~t, type = "s")
lines(y.h.g~t, col = "blue")
#chutes iniciais
a.c.g = max(y)*2.51
b.c.g = -log(log(a.c.g)-log(min(y)))
g.c.g = 0
sigma.c.g = (var(y)*(T-1)/T)^0.5
theta.c.g = c(a.c.g, b.c.g, g.c.g, sigma.c.g)
iteration = 0
Step:
[1] 0 0 0 0
Parameter:
[1] 1912.620000 -2.022372 0.000000 255.420157
Function Value
[1] 7939.713
Gradient:
[1] -3.542459e-03 -5.119665e+01 -2.981374e+04 -1.299915e+01
iteration = 50
Parameter:
[1] 828.893360101 -1.242256358 0.004821417 45.794003758
Function Value
[1] 4729.28
Gradient:
[1] -8.625785e-04 -1.603917e-01 -5.154841e+01 -4.649954e-04
a.h.g = lnl_max_g$estimate[1]
b.h.g = lnl_max_g$estimate[2]
g.h.g = lnl_max_g$estimate[3]
sigma.h.g = lnl_max_g$estimate[4]
#plot
y.h.g = a.h.g *exp(-exp(-b.h.g -g.h.g*t))
plot(y~t, type='S', main ='Óbitos acumulados na cidade de Itapevi', ylab =
'número de óbitos', xlab='dias')
lines(y.h.g~t, col='blue')
2.6 Qual dos chutes para 𝛼̂ maximizou 𝑙(𝜽̂)? Você considera que o algoritmo de
otimização foi bem sucedido nas estimativas dos parâmetros para cada um dos
chutes de 𝛼̂ utilizados? Justifique devidamente sua resposta.
Resposta: O chute que que maximizou a função foi 𝛼̂ = max(𝑦) ∗ 4.3, pois a partir
desse chute, os dados observados foram melhor ajustados ao modelo de
crescimento logístico, de acordo com o gráfico da função otimizada. Além disso,
os gradientes, os gradientes estão dentro do limite de tolerância, o que indica
aderência ao modelo.
̂
1.242256358− 0.004821417 ̂
̂
𝑌𝑡 = 828.893360101 . 𝑒 −𝑒
2.8 Para esse modelo, estime os erros-padrão dos estimadores dos parâmetros,
sua matriz de variância-covariância dos estimadores 𝜃̂ e seus respectivos p-
valores para os testes de significância individual de cada parâmetro. Apresente
os códigos e resultados através do console do R.
theta.hat=lnl_max_g$estimate
828.893360101 -1.242256358 0.004821417 45.794003758
#matriz informação
hess = hessian(func_LL_g,lnl_max_g$estimate)
[,1] [,2] [,3] [,4]
[1,] 1.904779e-01 3.744765e+01 1.745884e+04 4.111982e-05
[2,] 3.744765e+01 1.645510e+04 5.319356e+06 7.451296e-03
[3,] 1.745884e+04 5.319356e+06 2.129835e+09 4.874715e+01
[4,] 4.111982e-05 7.451296e-03 4.874715e+01 8.602711e-01
#matriz VarCovar
var_covar_ml=solve(hess)
[,1] [,2] [,3] [,4]
[1,] 28.244633036 5.485937e-02 -3.685430e-04 1.905822e-02
[2,] 0.054859367 4.220343e-04 -1.503748e-06 7.893200e-05
[3,] -0.000368543 -1.503748e-06 7.246252e-09 -3.799672e-07
[4,] 0.019058218 7.893200e-05 -3.799672e-07 1.162444e+00
#Erro Padrão
ep.ml=(diag(var_covar_ml)^0.5)[1:length(diag(var_covar_ml))-1]
[1] 5.314568e+00 2.054347e-02 8.512492e-05
#Razão Z
z=theta.hat[1:3]/ep.ml
[1] 155.96627 -60.46964 56.63931
#P-Value
pvalor=2*(1-pnorm(abs(z)))
[1] 0 0 0
a.h.g = lnl_max_g$estimate[1]
b.h.g = lnl_max_g$estimate[2]
g.h.g = lnl_max_g$estimate[3]
sigma.h.g = lnl_max_g$estimate[4]
#plot
y.h.g = a.h.g *exp(-exp(-b.h.g -g.h.g*t))
plot(y~t, type='S', main ='Óbitos acumulados na cidade de Itapevi', ylab =
'número de óbitos', xlab='dias')
lines(y.h.g~t, col='orange')
2.11 Calcule e apresente através do console do R os resultados para o MSE,
RMSE, MAE e MAPE das estimativas de 𝑦̂𝑡 geradas no item 1.7
MSE.g = sum((y-y.h.g)^2)/length(t)
[1] 2097.142
RMSE.g = MSE.g^0.5
[1] 45.79457
MAE.g = sum(abs(y-y.h.g))/length((t))
[1] 37.05847
MAPE.g = sum(abs(abs(y-y.h.g)/y))/length(t)
[1] 0.3407598
2.12 Calcule o valor previsto de 𝑦𝑡 para 1, 2 e 30 dias a frente
Parte 1: In sample
Para fazermos esta análise, primeiramente excluímos os 100 dias observados
da base, ou seja, filtramos os dados até o dia 15 de junho de 2022.
dados_itapevi = read.csv2("C:\\Users\\TIAGO\\Documents\\SCRIPTS DO
R\\dados_itapevi.csv", header = TRUE, sep = ";")
library(lubridate)
dados_itapevi_1 = dados_itapevi[which(dados_itapevi$estado=='SP' &
dados_itapevi$municipio=='Itapevi' & ymd(dados_itapevi$data) > ymd("2020-03-
27") & ymd(dados_itapevi$data) <= ymd("2022-06-15") &
dados_itapevi$obitosAcumulado != 0),]
rm(dados_itapevi)
dim(dados_itapevi_1)
[1] 802 17
Modelo Logístico
Os códigos utilizados para essas análises são os mesmos utilizados nos
exercícios anteriores, por conta disso, na maior parte do tempo apresentarei aqui
somente os resultados.
iteration = 0
Step:
[1] 0 0 0 0
Parameter:
[1] 1979.55000 -7.59012 0.00000 252.01058
Function Value
[1] 6889.933
Gradient:
[1] -2.914359e-03 -5.766228e+00 -3.028329e+03 -1.045437e+01
iteration = 52
Parameter:
[1] 785.91201957 -2.65906362 0.00803546 40.95036064
Function Value
[1] 4115.174
Gradient:
[1] 3.520210e-03 2.084895e+00 9.536613e+02 6.257757e-03
y.h = a.h/(1+exp(-b.h-g.h*t))
plot(y~t, type='S', main ='Óbitos acumulados na cidade de Itapevi', ylab =
'número de óbitos', xlab='dias')
lines(y.h~t, col='red')
theta.hat
[1] 785.91201957 -2.65906362 0.00803546 40.95036064
Hess
[,1] [,2] [,3] [,4]
[1,] 2.101388e-01 2.776362e+01 1.210328e+04 -1.678928e-04
[2,] 2.776362e+01 7.553957e+03 2.590807e+06 -1.013350e-01
[3,] 1.210328e+04 2.590807e+06 1.017611e+09 -2.173092e+01
[4,] -1.678928e-04 -1.013350e-01 -2.173092e+01 9.560516e-01
var_covar_ml=solve(hess)
[,1] [,2] [,3] [,4]
[1,] 17.7095598485 5.640937e-02 -3.542507e-04 1.036926e-03
[2,] 0.0564093712 1.223696e-03 -3.786415e-06 5.354487e-05
[3,] -0.0003542507 -3.786415e-06 1.483618e-08 -1.263201e-07
[4,] 0.0010369256 5.354487e-05 -1.263201e-07 1.045972e+00
ep.ml=(diag(var_covar_ml)^0.5)[1:length(diag(var_covar_ml))-1]
[1] 4.2082727868 0.0349813706 0.0001218039
Z
[1] 186.75406 -76.01371 65.97048
Pvalor = 2*(1-pnorm(abs(z)))
[1] 0 0 0
y.h = a.h/(1+exp(-b.h-g.h*t))
MSE.l = sum((y-y.h)^2)/length(t)
[1] 1676.398
RMSE.l = MSE.l^0.5
[1] 40.94384
MAE.l = sum(abs(y-y.h))/length((t))
[1] 34.0742
MAPE.l = sum((abs(y-y.h)/y))/length(t)
[1] 0.6154041
Modelo de Gompertz
Os códigos utilizados para essas análises são os mesmos utilizados nos
exercícios anteriores, por conta disso, na maior parte do tempo apresentarei aqui
somente os resultados.
iteration = 0
Step:
[1] 0 0 0 0
Parameter:
[1] 2166.300000 -2.038721 0.000000 251.853421
Function Value
[1] 6891.578
Gradient:
[1] -2.666447e-03 -4.436694e+01 -2.333984e+04 -1.047793e+01
iteration = 50
Parameter:
[1] 865.793240523 -1.213239315 0.004506583 -46.965221617
Function Value
[1] 4225.615
Gradient:
[1] -7.627695e-03 -1.916650e+00 -3.658854e+03 1.711519e-02
Iterações sucessivas dentro do limite de tolerância.
Iteração atual é provavelmente a solução.
hess = hessian(func_LL_g,lnl_max_g$estimate)
[,1] [,2] [,3] [,4]
[1,] 1.313592e-01 3.629007e+01 1.654840e+04 -3.248231e-04
[2,] 3.629007e+01 1.815699e+04 6.004037e+06 -8.161987e-02
[3,] 1.654840e+04 6.004037e+06 2.446424e+09 -1.343781e+01
[4,] -3.248231e-04 -8.161987e-02 -1.343781e+01 7.282895e-01
var_covar_ml=solve(hess)
[,1] [,2] [,3] [,4]
[1,] 71.6405634461 9.051152e-02 -7.067337e-04 2.905589e-02
[2,] 0.0905115192 4.065948e-04 -1.610117e-06 5.622765e-05
[3,] -0.0007067337 -1.610117e-06 9.140896e-09 -3.269956e-07
[4,] 0.0290558932 5.622765e-05 -3.269956e-07 1.373094e+00
ep.ml=(diag(var_covar_ml)^0.5)[1:length(diag(var_covar_ml))-1]
[1] 8.464075e+00 2.016420e-02 9.560803e-05
z
[1] 102.29036 -60.16800 47.13603
Pvalor
[0] 0 , 0 , 0
MSE.g = sum((y-y.h.g)^2)/length(t)
[1] 2351.75
RMSE.g = MSE.g^0.5
[1] 48.49484
MAE.g = sum(abs(y-y.h.g))/length((t))
[1] 48.3659
MAPE.g = sum((abs(y-y.h.g)/y))/length(t)
[1] 0.06385227
Parte 2: Out of sample
Para este segundo passo, pegamos as cem últimas amostras da base original e
estimamos com base nos parâmetros encontrados no in sample.
Modelo Logístico
#Tratamento da base de dados:
dados_itapevi = read.csv2("C:\\Users\\TIAGO\\Documents\\SCRIPTS DO
R\\dados_itapevi.csv", header = TRUE, sep = ";")
dados_itapevi_out = dados_itapevi[which(dados_itapevi$estado=='SP' &
dados_itapevi$municipio=='Itapevi' & ymd(dados_itapevi$data) >= ymd("2022-
06-16") & ymd(dados_itapevi$data) <= ymd("2022-09-23") &
dados_itapevi$obitosAcumulado != 0),]
rm(dados_itapevi)
dim(dados_itapevi_out)
[1] 100 17
#Scripts
y_teste = dados_itapevi_out$obitosAcumulado
aux = 802 #comprimento da amostra de in-sample
t_teste = 802+seq(1:100)
y.h.teste = a.h/(1+exp(-b.h-g.h*t_teste))
MSE.lt = sum((y_teste-y.h.teste)^2)/aux
[1] 281.0589
RMSE.lt = MSE.lt^0.5
[1] 16.76481
MAE.lt = sum(abs(y_teste-y.h.teste))/aux
[1] 16.54462
MAPE.lt = sum(abs(y_teste-y.h.teste)/y_teste)/aux
[1] 0.002727041
Modelo de Gompertz
y_teste = dados_itapevi_out$obitosAcumulado
T = length(y_teste)
T
100
t = seq(1:T)
t_teste = length(T)+seq(1:100)
MSE.gt = sum((y_teste-y.h.teste)^2)/length(t_teste)
483223.6
RMSE.gt = MSE.g^0.5
46.98875
MAE.gt = sum(abs(y_teste-y.h.teste))/length((t_teste))
694.9415
MAPE.gt = sum((abs(y_teste-y.h.teste)/y_teste))/length(t_teste)
0.9178277