Você está na página 1de 25

Universidade Federal de São Paulo – UNIFESP

Escola Paulista de Economia Política e Negócios – EPPEN


Análise de Dados Aplicada – Lista 1

Cidade escolhida: Itapevi

Situada a oeste da região metropolitana de São Paulo, a cidade de Itapevi possui


uma população estimada de 244.131 de acordo com o IBGE. Durante a
pandemia de COVID-19, o município seguiu as recomendações do Governo
estadual em relação a circulação de pessoas e o funcionamento de
estabelecimentos. A partir dos dados extraídos da base de dados da COVID-19,
disponibilizada pelo Governo Federal, o primeiro óbito registrado na cidade foi
no dia 4 de abril de 2020, e até o dia 23 de setembro de 2022, foram registrados
762 óbitos acumulados em 902 dias observados. O download da base utilizada
no trabalho foi feito no dia 14 de outubro de 2022.

Data Mining

# selecionando os arquivos que serão utilizados


dados1 =
read.csv2("C:\\Users\\TIAGO\\Documents\\HIST_PAINEL_COVIDBR_14out2022\\HIST
_PAINEL_COVIDBR_2020_Parte1_14out2022.csv",sep = ';',header = TRUE)
dados2 =
read.csv2("C:\\Users\\TIAGO\\Documents\\HIST_PAINEL_COVIDBR_14out2022\\HIST
_PAINEL_COVIDBR_2020_Parte2_14out2022.csv",sep = ';' ,header = TRUE)
dados3 =
read.csv2("C:\\Users\\TIAGO\\Documents\\HIST_PAINEL_COVIDBR_14out2022\\HIST
_PAINEL_COVIDBR_2021_Parte1_14out2022.csv",sep = ';' ,header = TRUE)
dados4 =
read.csv2("C:\\Users\\TIAGO\\Documents\\HIST_PAINEL_COVIDBR_14out2022\\HIST
_PAINEL_COVIDBR_2021_Parte2_14out2022.csv",sep = ';' ,header = TRUE)
dados5 =
read.csv2("C:\\Users\\TIAGO\\Documents\\HIST_PAINEL_COVIDBR_14out2022\\HIST
_PAINEL_COVIDBR_2022_Parte1_14out2022.csv",sep = ';' ,header = TRUE)
dados6 =
read.csv2("C:\\Users\\TIAGO\\Documents\\HIST_PAINEL_COVIDBR_14out2022\\HIST
_PAINEL_COVIDBR_2022_Parte2_14out2022.csv",sep = ';',header = TRUE)
# Juntando os dados em uma única matriz
dados = rbind(dados1, dados2, dados3, dados4, dados5, dados6)

# Para fazer o tratamento da base, se utiliza o pacote lubridate para manipular datas
no R
library(lubridate)

# Aplicando o filtro para os dados respectivos a cidade de Itapevi-SP

dados_itapevi = dados[which(dados$estado=='SP' & dados$municipio=='Itapevi' &


ymd(dados$data) > ymd("2020-03-27") & ymd(dados$data) <= ymd("2022-09-23") &
dados$obitosAcumulado != 0),]

#conferindo se os óbitos acumulados na posição 1 são diferentes de 0


dados_itapevi$obitosAcumulado[1] != 0
[1] TRUE
T = length(y)
t = seq(1:T)

head(dados_itapevi)
tail(dados_itapevi)

dim(dados_itapevi)
[1] 902 17

Questão 1 – Crescimento logístico

1.1 Escreva textualmente a expressão matemática para a função log da


verossimilhança, 𝑙 (θ̂ ), para a estimação dos parâmetros do modelo.

1 ̂
𝛼
l(𝜃̂ |𝑦) = -0,5n . ln(2π) – n . ln(𝜎̂) – 0,5 . ∑( yt - ̂ )
𝛼2 1+𝑒 −𝛽−ŷt

1.2 Escreva textualmente a expressão matemática para o vetor de parâmetros


𝜽′ da função l(𝜃̂ ) para esse modelo.

Vetor de parâmetros: 𝜽′ = [β1, β2, 𝜽2]

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.

Um bom chute inicial para β seria, sendo y o vetor de óbitos acumulados:


𝑎𝑙𝑝ℎ𝑎_𝑐ℎ𝑢𝑡𝑒
𝐵𝑒𝑡𝑎_𝑐ℎ𝑢𝑡𝑒 = −log ( )
𝑚𝑖𝑛(𝑦) − 1

Um bom chute inicial para σ seria, sendo y o vetor de óbitos acumulados:


𝑆𝑖𝑔𝑚𝑎_𝑐ℎ𝑢𝑡𝑒 = 𝐷𝑒𝑠𝑣𝑖𝑜𝑃𝑎𝑑𝑟ã𝑜(𝑦)
Aplicando no R:

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.4 Implemente a função 𝑙 (θ̂ ), no R para o modelo logístico. Apresente o


resultado através do console do R.

> func_LL = function(theta){


+ #definindo os coeficientes alpha, beta, gama e sigma
+ a = theta[1]
+ b = theta[2]
+ g = theta[3]
+ sigma = theta[4]
+
+ # cria-se o vetor de residuos
+ u = y - a/(1+exp(-b-g*t))
+
+ ln_L=-(-0.5*T*log(2*pi)-T*log(abs(sigma))-0.5*sum(u^2)/(sigma^2))
+
+ return(ln_L)
+}
>

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)

lnl_max = nlm(func_LL,theta.c,steptol = 1e-10,gradtol = 1e-7,print.level = 1,iterlim


= 1000000,ndigit = 12,fscale = 10000)

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

Gradiente relativo próximo de zero.


Iteração atual é provavelmente a solução.

#alpha, beta, gama e sigma hat


a.h = lnl_max$estimate[1]
b.h = lnl_max$estimate[2]
g.h = lnl_max$estimate[3]
sigma.h = lnl_max$estimate[4]

y.h = a.h/(1+exp(-b.h-g.h*t))

plot(y~t, type='S', main ='Óbitos acumulados na cidade de Itapevi', ylab = 'dias',


xlab='número de óbitos')
lines(y.h~t, col='red')
Chute que maximiza a função: α = max(y)*4.3

#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)

lnl_max = nlm(func_LL,theta.c,steptol = 1e-12,gradtol = 1e-7,print.level = 1,iterlim


= 1000000,ndigit = 12,fscale = 10000)

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.

#alpha, beta, gama e sigma hat


a.h = lnl_max$estimate[1]
b.h = lnl_max$estimate[2]
g.h = lnl_max$estimate[3]
sigma.h = lnl_max$estimate[4]

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')

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.

α = 777.776581377, p-valor = 0, logo a probabilidade estimada de estar errando


ao afirmar que o parâmetro estimado é estatisticamente significativo é igual a 0.
Portanto, rejeita-se a hipótese nula de que beta não é estatisticamente
significativo, tomando base o modelo logístico.

β = -2.678102025, p-valor = 0, logo a probabilidade estimada de estar errando


ao afirmar que o parâmetro estimado é estatisticamente significativo é igual a 0.
Portanto, rejeita-se a hipótese nula de que beta não é estatisticamente
significativo, tomando base o modelo logístico.

γ = 0.008175866, p-valor = 0, logo a probabilidade estimada de estar errando ao


afirmar que o parâmetro estimado é estatisticamente significativo é igual a 0.
Portanto, rejeita-se a hipótese nula de que beta não é estatisticamente
significativo, tomando base o modelo logístico.

1.10 Utilizando das estimativas para os parâmetros a partir do chute de 𝛼̂ que


maximizou 𝑙(𝜽̂). obtenha as estimativas para 𝑦̂𝑡 com 𝑡=1,…𝑇. Em seguida faça
o plot da curva de crescimento logístico ajustada aos dados. Apresente os
resultados dos códigos através do console do R.

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

plot(y~t, type='S', main ='Óbitos acumulados na cidade de Itapevi', ylab =


'número de óbitos', xlab='dias')
lines(y.h~t, col='orange')
1.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.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.12 Calcule o valor previsto de 𝑦𝑡 para 1, 2 e 30 dias a frente


#estimativa para 1 dia
est.1 = a.h/(1+exp(-b.h-g.h*(length(t)+1)))
> est.1
[1] 770.7989

#estimativa para 2 dias


est.2 = a.h/(1+exp(-b.h-g.h*(length(t)+2)))
> est.2
[1] 770.8552

#estimativa para 30 dias


est.3 = a.h/(1+exp(-b.h-g.h*(length(t)+30)))
> est.3
[1] 772.2613
Questão 2 – Crescimento de Gompertz

2.1 Escreva textualmente a expressão matemática para a função log da


verossimilhança, 𝑙 (θ̂), para a estimação dos parâmetros do modelo.

1 ̂𝛾∗𝑡
−𝛽− ̂
l(𝜃̂ |𝑦) = -0,5n . ln(2π) – n . ln(𝜎̂) – 0,5 . ∑( 𝑦𝑡 − 𝛼̂ . 𝑒 −𝑒 )
𝜎2

2.2 Escreva textualmente a expressão matemática para o vetor de parâmetros


𝜽′ da função l(𝜃̂ ) para esse modelo.
Vetor de parâmetros: 𝜽′ = [𝛼̂, 𝛽̂, 𝑦̂, 𝜎̂]

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.

Um bom chute inicial para β seria, sendo y o vetor de óbitos acumulados:


𝐵𝑒𝑡𝑎_𝑐ℎ𝑢𝑡𝑒 = −log(log (𝑎𝑙𝑝ℎ𝑎_𝑐ℎ𝑢𝑡𝑒) − log (𝑚𝑖𝑛(𝑦)))

Um bom chute inicial para σ seria, sendo y o vetor de óbitos acumulados:


𝑣𝑎𝑟(𝑦). (𝑡 − 1)
𝑆𝑖𝑔𝑚𝑎_𝑐ℎ𝑢𝑡𝑒 = √
𝑡

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

2.4 Implemente a função 𝑙 (θ̂̂), no R para o modelo logístico. Apresente o


resultado através do console do R.

> func_LL_g = function(theta){


+ a = theta[1] #alpha
+ b = theta[2] #beta
+ g = theta[3] #gama
+ sigma = theta[4] #sigma
+ u = y - a*exp(-exp(-b-g*t))
+ ln_L=-(-0.5*T*log(2*pi)-T*log(abs(sigma))-0.5*sum(u^2)/(sigma^2))
+ return(ln_L)}
2.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.g = max(y)
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)

lnl_max_g = nlm(func_LL_g, theta.c.g ,steptol = 1e-13,gradtol = 1e-8,print.level


= 1,iterlim = 1000000,ndigit = 12,fscale = 1000)

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

Gradiente relativo próximo de zero.


Iteração atual é provavelmente a solução.
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")
lines(y.h.g~t, col = "blue")

Chute que maximiza a função: α = max(y)*2.51

#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)

lnl_max_g = nlm(func_LL_g, theta.c.g ,steptol = 1e-13,gradtol = 1e-8,print.level


= 1,iterlim = 1000000,ndigit = 12,fscale = 1000)

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

Iterações sucessivas dentro do limite de tolerância.


Iteração atual é provavelmente a solução.

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.

2.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 𝑙(𝜽̂).

̂
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

2.9 Interprete os p-valores calculados no item.

α = 828.893360101, p-valor = 0, logo a probabilidade estimada de estar errando


ao afirmar que o parâmetro estimado é estatisticamente significativo é igual a 0.
Portanto, rejeita-se a hipótese nula de que beta não é estatisticamente
significativo, tomando base o modelo de gompertz.

β = -1.242256358 , p-valor = 0, logo a probabilidade estimada de estar errando


ao afirmar que o parâmetro estimado é estatisticamente significativo é igual a 0.
Portanto, rejeita-se a hipótese nula de que beta não é estatisticamente
significativo, tomando base o modelo de gompertz.

γ = 0.004821417, p-valor = 0, logo a probabilidade estimada de estar errando ao


afirmar que o parâmetro estimado é estatisticamente significativo é igual a 0.
Portanto, rejeita-se a hipótese nula de que beta não é estatisticamente
significativo, tomando base o modelo de gompertz.

2.10 Utilizando das estimativas para os parâmetros a partir do chute de 𝛼̂ que


maximizou 𝑙(𝜽̂). obtenha as estimativas para 𝑦̂𝑡 com 𝑡=1,…𝑇. Em seguida faça
o plot da curva de crescimento de gompertz ajustada aos dados. Apresente os
resultados dos códigos através do console do R.

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

y.h.g = a.h.g *exp(-exp(-b.h.g -g.h.g*t))


head(y.h)
[1] 26.39912 26.84042 27.28692 27.73864 28.19562 28.65788
tail(y.h.g)
[1] 791.7530 791.9276 792.1014 792.2744 792.4466 792.6180

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

#estimativa para 1 dia


est.1 = a.h.g/(1+exp(-b.h.g-g.h.g*(length(t)+1)))
[1] 793.5526

#estimativa para 2 dias


est.2 = a.h.g/(1+exp(-b.h.g-g.h.g*(length(t)+2)))
[1] 793.7154

#estimativa para 3 dias


est.3 = a.h.g/(1+exp(-b.h.g-g.h.g*(length(t)+30)))
[1] 797.9922

Questão 3 Qual dos modelos estimados apresentou o melhor ajustamento aos


dados? Justifique sua resposta. Com base no melhor modelo, você considera
que a curva de óbitos acumulados por COVID-19 está próxima do achatamento
total ou ainda há indícios de continuidade de crescimento?

A partir dos dados obtidos, levando em consideração a porcentagem do erro em


relação aos valores observados, dada pelo MAPE, é possível concluir que o
modelo mais adequada para a curva é o modelo de crescimento de Gompertz,
pois ele possui a diferença entre os valores observados e os estimados de
34,06%. Além disso, ao analisarmos o plot feito, é possível perceber uma leve
tendência de crescimento na assíntota, o que nos leva a crer que, apesar na
pandemia estar no seu estágio final, ainda há tendência de crescimento, mesmo
que pequena, além de que, essa afirmação pode ser constatada algebricamente
se fizermos cálculos de previsão do parâmetro estimado para dias a frente, no
caso da lista, 1,2 e 30 dias, no qual é possível notar uma tendência de
crescimento tímida, que contraria a tese do achatamento da curva.
Parte Extra: Out sample e in – sample

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

Posteriormente, estimamos o modelo novamente com as 100 observações a


menos.

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.

Número de observações: 802


alfa chute = 1979.55 beta chute = -7.59012
gama chute = 0 sigma chute = 252.0106

lnl_max = nlm(func_LL,theta.c,steptol = 1e-12,gradtol = 1e-7,print.level = 1,iterlim


= 1000000,ndigit = 12,fscale = 10000)

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

Iterações sucessivas dentro do limite de tolerância.


Iteração atual é provavelmente a solução.

alfa chapéu = 785.912 beta chapéu = -2.659064


gama chapéu = 0.00803546 sigma chapéu = 40.95036

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.

Número de observações: 802


alfa chute = 2166.3 beta chute = -2.038721
gama chute = 0 sigma chute = 251.8534
theta.c.g = c(a.c.g, b.c.g, g.c.g, sigma.c.g)
lnl_max_g = nlm(func_LL_g, theta.c.g ,steptol = 1e-13,gradtol = 1e-8,print.level
= 1,iterlim = 1000000,ndigit = 12,fscale = 1000)

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.

alfa chapéu = 865.7932 beta chapéu = -1.213239


gama chapéu = 0.004506583 sigma chapéu = -46.96522

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='red')
Theta.hat
[1] 865.793240523 -1.213239315 0.004506583 -46.965221617

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

y.h.g = a.h.g *exp(-exp(-b.h.g -g.h.g*t))

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)

y.h.teste = a.h.g *exp(-exp(-b.h.g -g.h.g*t_teste))


length(y.h.teste)
length(t_teste)

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

Você também pode gostar