Code Monkey home page Code Monkey logo

nowcaster's Introduction

covid19br.github.io

Repositório do site Observatório Covid-19 BR.

Aqui você encontra os códigos para calcular as projeções e gerar os gráficos, assim como os dados usados. Se for alterar qualquer coisa no repositório, siga o tutorial abaixo.

Sumário

Pré-requisitos
Instalação do R 3.6.3 e RStudio
Instalação das bibliotecas em R
Como baixar e executar
Criando novos gráficos
Atualizando e criando novas páginas em html

Pré-requisitos

Para rodar o programa, primeiro, clone o repositório em seu computador com git clone. Em seguida, serão necessárias instalações para que o programa compile.

Provavelmente você vai precisar instalar:

  • A versão 3.6.3 (atual) do R
  • Rstudio
  • Bibliotecas de R

Tutoriais e links estão disponíveis a seguir.

Instalação do R 3.6.3 e RStudio

Instruções de instalação do R podem ser encontradas aqui. É necessária a versão mais recente do R para executar o código. Se ja possui o R, verifique a versão com o comando

$ R --version

E atualize o R.

Para instalar o Rstudio, primeiro, entre aqui e baixe o Rstudio Desktop

Outras instruções caso a instalação não funcione

Instalação das bibliotecas em R

A instalação da maioria das bibliotecas se resolve com install.packages("package_name"), em R.Para instalar todas as bibliotecas necessárias, execute o arquivo "./_src/install_packages.R". São as bibliotecas a seguir:

packages <- c("ggplot2", 
        "tidyverse", 
        "knitr", 
        "plotly", 
        "tidyr", 
        "dplyr", 
        "widgetframe", 
        "rmarkdown", 
        "zoo", 
        "EpiEstim", 
        "lubridate", 
        "readr", 
        "svglite",
        "scales")
for (p in packages) if(!require(p, character.only=T)) install.packages(p)

Se por acaso precisar instalar novas bibliotecas, lembre-se de adicionar aqui e no arquivo.

Como baixar e executar

Clone o repositório na linha de comando. Dependendo do que será alterado (pagina de estados, municípios ou do país todo), o comando será diferente.

Caso queira executar as funções para o modelo referente ao brasil inteiro, execute

$ Rscript update.R

Se executar as funções para os modelos referentes ao município é o que você procura, execute

$ Rscript update_municipio.R --m SP

Se o que quer é executar as funções para os modelos referentes aos estados, execute

$ Rscript update_estado.R

Se quer executar todos ao mesmo tempo,

$ Rscript update_all.R

Alguns avisos aparecem após a execução, e ela demora um pouco. Espere terminar, e se não houver erros, os arquivos referentes aos gráficos em .html e .svg serão atualizados na pasta web, e podem ser vistos individualmente direto no navegador.

Criando novos gráficos em páginas já existentes

Após terminar de criar um gráfico novo, para que ele seja incluído no html, o primeiro passo é fazer com que ele seja transformado em imagem ".svg" e um código ".html" com ggplotly (que garante a interatividade do gráfico no site). Para isso, ele deve estar sendo plotado em um dos arquivos R plots.R (gráficos referentes ao Brasil todo) ou plots_municipio.R (gráficos referentes a todos os municipios).

Em um dos arquivos update.R (gráficos referente Brasil todo) ou update_municipio.R (referente a todos os municípios), adicione o nome do seu gráfico à lista de gráficos a serem renderizados:

## No arquivo de update em questão
plots.para.atualizar <- makeNamedList(..., seu.grafico)

IMPORTANTE: ele deve ser um ggplot. Caso seja uma análise para estado, enviar uma mensagem.

Adicionando novas modelagens

Caso você tenha um novo modelo a incluir, que gere uma nova página, crie um arquivo para fazer update do seu modelo, e inclua ele no arquivo update_all.R da forma

source("update_seumodelo.R")

Este arquivo de update deve conter as seguintes linhas de código, se os seus plots forem interativos:

## Data de Atualizacao
print("Atualizando data de atualizacao...")
file <- file("../web/last.update.seumodelo.txt") # coloco o nome do municipio?
writeLines(c(paste(now())), file)
close(file)

# Graficos a serem atualizados
plots.para.atualizar <- makeNamedList(plots.criados)
filenames <- names(plots.para.atualizar)
n <- length(plots.para.atualizar)

for (i in 1:n){
  graph.html <- ggplotly(plots.para.atualizar.municipio[[i]]) %>% layout(margin = list(l = 50, r = 20, b = 20, t = 20, pad = 4))
  graph.svg <- plots.para.atualizar[[i]] + theme(axis.text = element_text(size=11, family="Arial", face="plain"), # ticks
                                                           axis.title = element_text(size=14, family="Arial", face="plain")) # title
  filepath <- paste("../web/",filenames[i],sep="")
  saveWidget(frameableWidget(graph.html), file = paste(filepath,".html",sep=""), libdir="./libs") # HTML Interative Plot
  ggsave(paste(filepath,".svg",sep=""), plot = graph.svg, device = svg, scale= .8, width= 210, height = 142, units = "mm")
}

substituindo apenas o plots.criados pela lista dos plots que vão ser colocados na página.

Caso queira plots estáticos:

## Data de Atualizacao
print("Atualizando data de atualizacao...")
file <- file("../web/last.update.seumodelo.txt") # coloco o nome do municipio?
writeLines(c(paste(now())), file)
close(file)

# Graficos a serem atualizados
plots.para.atualizar <- makeNamedList(plots.criados)
filenames <- names(plots.para.atualizar)
n <- length(plots.para.atualizar)

for (i in 1:n){
  graph.svg <- plots.para.atualizar.municipio[[i]] + theme(axis.text = element_text(size=11, family="Arial", face="plain"), # ticks
                                                           axis.title = element_text(size=14, family="Arial", face="plain")) # title
  filepath <- paste("../web/",filenames[i],sep="")
  ggsave(paste(filepath,".svg",sep=""), plot = graph.svg, device = svg, scale= .8, width= 210, height = 142, units = "mm")
}

Suas imagenns serão geradas com o mesmo nnome que o plot leva no R.

Atualizando e criando novas páginas

O arquivo template.html é um bom ponto de partida para criação de novas páginas. Ele inclui as barras de navegação superiores e inferiores pré-fabricadas, bem como a estrutura principal do corpo.

Primeiro substitua os dados do trecho de código a seguir, que se encontra nas linhas 8 a 11.

<!-- TÍTULO E DESCRIÇÃO DA PÁGINA-->
<meta name="description"
  content="SUA DESCRIÇÃO AQUI">
<title>NOME DA SUA PÁGINA · Observatório Covid-19 BR</title>

Escolha também quais arquivos de CSS sua página vai usar, de acordo com o conteúdo. Para adicionar o arquivo, descomente a linha de código referente a ele. Os possíveis CSS se encontram nas linhas 19 a 24, no trecho

<!-- <link href="./css/tables.css?ver=2.00" rel="stylesheet"> -->
<!-- <link href="./css/toc.css?ver=2.00" rel="stylesheet"> -->
<!-- <link href="./css/midia.css?ver=2.00" rel="stylesheet"> -->
<!-- <link href="./css/email.css?ver=2.00" rel="stylesheet"> -->
<!-- <link href="./css/accordion.css?ver=2.00" rel="stylesheet"> -->
<!-- <link href="./css/charts.css?ver=2.00" rel="stylesheet"> -->

Os aquivos CSS: tables é o estilo para tabelas, o toc é para índices, o midia serve para calendários e listas, email serve para emails ofuscados (que não dá para clicar para evitar span de robôs), accordion serve para criar menus acordeão, e charts serve para estilo de gráficos. Uma pagina simples pode usar apenas o css global, que já está incluido no template.

A estrutura do site é composta por quatro principais grupos:

1. Barra Superior

A barra superior é o elemento flutuante que inclui o logo, o menu de estados e o menu de paginas do site.

Título

Inclua o título da página no trecho a seguir, na linha 73 a 79.

<!-- DESTAQUE -->
<div class="nav-item destaque" data-toggle="collapse" data-target="#navbarSupportedContent"
  aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
  <a href="#">
    TITULO DA PÁGINA
  </a>
</div>

Adicionando itens no menu principal

Inclua os dados da página no código a seguir e use-o para substituir <!-- MENU.ITEM --> no arquivo .html:

<li class="nav-item">
  <a class="nav-link" href="./ITEM.html">ITEM</a>
</li>
<!-- MENU.ITEM -->

No arquivo .html do próprio item, o código deve ser o seguinte para correta indicação da página ativa:

<li class="nav-item active">
  <a class="nav-link" href="./ITEM.html">ITEM</a>
</li>
<!-- MENU.ITEM -->

Alterando o logo do observatório

Busque por <!-- OBSERV.LOGO.IMAGEM --> e substitua o conteúdo de src="" pelo arquivo .svg desejado.

2. Título Principal

Este grupo inclui o título principal da página e a data de atualização.

Alterando o título da página

Busque por <!-- PAGE.TITLE --> e substitua o conteúdo após <h1 class="display"> pelo título desejado.

3. Cards de conteúdo

Os cards armazenam todas as informações importantes do corpo da página. Conforme mais cards de conteúdo são adicionados sua disposição é atualizada automáticamente.

Criando um card

A estrutura básica de um card é formada por:

<!-- NEW.CARD -->

<!-- Identificador do card -->
<div class="card">
  <div class="card-body">        
    <!-- CONTEÚDO AQUI -->
  </div>
</div>

<!-- NEW.CARD -->

Cada card distinto deve conter um identificador distinto em <!-- Identificador do card --> para facilitar sua edição.

Basta adicionar os componentes desejados em <!-- CONTEÚDO AQUI --> de acordo com os códigos pré-fabricados a seguir:

1. Títulos dos cards

Títulos são identificados por <!-- CARD.HEADER --> Atenção! Títulos também devem ser inclusos no conteúdo do card.

1.1 Título com ícone

Modifique o ícone buscando por <!-- CARD.TITLE.ICON --> e substituindo NOME_DO_ARQUIVO.svg. O ícone deve ser uma imagem em .svg.

Modifique o título buscando por <!-- CARD.TITLE.TEXT --> e substituindo TITULO DO CARD

Modifique a descrição do card buscando por <!-- CARD.TITLE.DESCRIPTION --> e substituindo BREVE DESCRICAO

<!-- CARD.HEADER -->
<div class="media">
  <img src="./img/NOME_DO_ARQUIVO.svg" width=40px alt="DESCRIÇÃO ACESSÍVEL" class="card-icon"> <!-- CARD.TITLE.ICON -->
  <div class="media-body">
    <h5 class="card-title">TITULO DO CARD</h5> <!-- CARD.TITLE.TEXT -->
    <p class="card-text">BREVE DESCRICAO</p> <!-- CARD.TITLE.DESCRIPTION -->
  </div>
</div>

Use o site Iconfinder (https://www.iconfinder.com/p/coronavirus-awareness-icons) para encontrar ícone gratuitos em svg relacionados ao COVID-19. Importante: o nome do autor do ícone deve ser citado em Sobre.

1.2 Título sem ícone

Modifique o título buscando por <!-- CARD.TITLE.TEXT --> e substituindo TITULO DO CARD

<!-- CARD.HEADER -->
<h5 class="card-title mb-3">TITULO DO CARD</h5> <!-- CARD.TITLE.TEXT -->
2. Conteúdo

Existem múltiplos elementos de conteúdo que podem ser combinados livremente em um card:

2.1.1 Data de atualização (automatica)

Ao compilar o arquivo update.R a hora é atualizada automaticamente para cada página. Insira o código a seguir para exibir o horário da última atualização dos gráficos:

<!-- CARD.DATE -->
<small class="page-title-update updateDate">Última atualização: </small>

Para cada página, a seguinte função deve ser chamada em javascript com o nome do arquivo que contém a data de atualização como argumento:

updateDate('last.update');

A página deve incluir o script updateDate.js para correto funcionamento:

<script src="js/updateDate.js"></script>

Esse script já está incluido no template.

2.1.2 Data de atualização (manual)

Se necessário, modifique uma data de atualização manual buscando por <!-- CARD.DATE.MANUAL --> ou insira uma nova com o código a seguir:

<!-- CARD.DATE.MANUAL -->
<p class="card-date"><small>Última atualização: DD/MM/AAAA HH:MM</small></p>
2.2 Imagem estática com legenda

Modifique uma imagem estática e sua legenda buscando por <!-- CARD.IMAGE --> ou insira uma nova com o código a seguir:

<!-- CARD.IMAGE -->
<img src="./fig/NOME_DO_ARQUIVO.svg" class="card-img-top" alt="DESCRIÇÃO ACESSÍVEL"> 
<p class="card-text legenda"><small>BREVE LEGENDA AQUI</small></p> <!-- CARD.IMAGE.LEGENDA -->
2.3 Gráfico GGPlot interativo

Modifique um GGPlot interativo buscando por <!-- CARD.GGPLOT --> ou insira um novo utilizando:

<!-- CARD.GGPLOT.INTERATIVO -->
<div data-src="./web/IDENTIFICADOR.DO.GRAFICO.html" class="codegena_iframe center d-flex flex-column justify-content-center"
     data-css="background:url('./img/loading.gif') white center center no-repeat;border:0px;"
     data-responsive="true">
  <picture class="side-by-side">
    <source media="(max-width: 575.98px)"  srcset="./web/plot.forecast.exp.ex.svg">
    <source media="(max-width: 767.98px)"  srcset="./web/plot.forecast.exp.sm.svg">
    <source media="(max-width: 991.98px)"  srcset="./web/plot.forecast.exp.md.svg">
    <source media="(max-width: 1199.98px)" srcset="./web/plot.forecast.exp.lg.svg">
    <img src="./web/IDENTIFICADOR.DO.GRAFICO.svg" class="placeholder_svg side-by-side" width="100%">
  </picture>
</div>
<script src="./js/async-iframe.js"></script>

Nota: IDENTIFICADOR.DO.GRAFICO deve ser substituído pelo mesmo identificador utilizado na geração do gráfico nos arquivos para plotagem. Nota 2: Para correto funcionamento na página estados.html, os gráficos devem ser salvos no R com seguinte nomenclatura:

IDENTIFICADOR.GRÁFICO.UF

Porém ao incluí-los no código HTML é necessário omitir o código UF:

IDENTIFICADOR.GRÁFICO
2.4 Legenda de gráfico

Modifique a legenda de um gráfico buscando por <!-- CARD.GGPLOT.LEGEND --> ou insira uma nova utilizando:

<!-- CARD.GGPLOT.LEGEND -->
<div class="card-chartLegend">
  <small class="chartLegendSquare" id="COR_DA_LEGENDA">LEGENDA 1</small>
  <small class="chartLegendSquare" id="COR_DA_LEGENDA">LEGENDA 2</small>
</div>

Para manter boa visualização online, cada linha pode conter apenas duas legendas. Para adicionar mais legendas adicione um novo bloco.

A cor da legenda pode ser alterada substituindo COR_DA_LEGENDA por:

legendBlack
legendGrey
legendBlue
legendLightBlue
legendDarkBlue
legendPurple
legendPink
legendRed
legendOrange
legendYellow
legendGreen
legendTeal
2.5 Texto justificado

Modifique o texto de um card buscando por <!-- CARD.TEXT --> (ou pelo próprio texto) ou insira um novo bloco utilizando:

<!-- CARD.TEXT -->
<p class="text-justify">
  Você deve escrever o seu texto aqui. O texto exibido será justificado.
  Apesar de estar em outra linha, não há quebra de linha aqui. Caso precise de uma quebra
  de linha, inclua outro bloco de texto.
</p>
2.6 Assinatura

Modifique uma assinatura buscando por <!-- CARD.SIGNATURE --> ou insira uma nova utilizando:

<!-- CARD.SIGNATURE -->
<div class="blockquote-footer text-right">Observatório COVID-19</div>
2.7 Botão com link para outra página

Modifique um botão buscando por <!-- CARD.BUTTON --> ou insira um novo utilizando:

<!-- CARD.BUTTON -->
<a href="LINK PARA A PÁGINA" target="_blank"><button class="btn btn-primary mt-1" type="button">
  TEXTO DO BOTÃO
</button></a>
2.8 Botão com texto escondido

Modifique um botão que revela texto escondido buscando por <!-- CARD.BUTTON.EXPAND --> ou insira um novo utilizando:

<!-- CARD.BUTTON.EXPAND -->
<button class="btn btn-primary" type="button" data-toggle="collapse" data-target="#collapseGraph" aria-expanded="false" aria-controls="collapseGraph">
    TEXTO DO BOTÃO ▾
</button>
<!-- CARD.BUTTON.EXPAND.CONTENT -->
<div class="collapse mt-2" id="collapseGraph">
    <!-- CONTEÚDO ESCONDIDO AQUI-->
</div>

Em <!-- CONTEÚDO ESCONDIDO AQUI--> é possível inserir qualquer tipo de conteúdo descrito aqui: texto, imagens, assinaturas e etc.

2.9 Equação matemática

No final do template está comentado os scripts para equação matemática. No seu arquivo, descomente-os.

<!-- SCRIPT PARA USAR MATHJAX E ESCREVER EQUAÇÕES
    <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
    <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/[email protected]/es5/tex-mml-chtml.js"></script> -->

Para escrever a equação \( EQUAÇÃO NA FORMA LATEX AQUI \)

2.10 Tabelas automáticas

No arquivo template.html o script necessário para utilizar tabelas criadas no R está comentado. Descomente-o apenas em páginas cujo uso de tabelas é necessário.

<!-- SCRIPT PARA USAR TABELAS 
    <script src="js/updateTable.js"></script> -->

Adicione o seguinte código em seu card na posição em que gostaria que a tabela. Substitua TABELA.html pelo nome da sua tabela gerada em R.

<!-- CARD.AUTO.TABLE -->
<include src="./tables/TABELA.html">Carregando...</include>
2.11 Tabela de Conteúdo

Caso queira uma tabela de conteúdo na sua página, descomente o código

<!-- SCRIPT PARA TABELA DE CONTEÚDO-->
<!---<script src="https://cdn.jsdelivr.net/gh/afeld/[email protected]/dist/bootstrap-toc.min.js"></script> -->

e adicione as seguintes linha de código antes dos cards.

<!-- TABELA DE CONTEÚDO AQUI -->
<p class="h6 toc-title">Índice</p>
<nav id="toc" data-toggle="toc" class="sticky-top"></nav>

ATENÇÃO: lembre de descomentar também o CSS relativo a tabela de conteúdo (toc).

Adicionando cards em uma página

Substitua qualquer <!-- NEW.CARD --> pelo código do seu card de acordo com a posição desejada.

Mudando a quantidade de colunas

A quantidade de colunas é ajustada automáticamente de acordo com a tela do dispositivo para permitir melhor navegação mobile. No entanto, caso deseje alterar manualmente o numero de colunas para telas a partir de 1200px de largura basta buscar por <!-- COLUMNS.NUM --> e substituir <div class="card-columns"> pela tag desejada:

<div class="card-columns two"> <!-- Duas colunas -->
<div class="card-columns one"> <!-- Uma coluna -->

Este caso particular é utilizado para otimizar as páginas específicas de estados em telas de alta resolução.

4. Barra inferior

A barra inferior é o elemento fixo no final da página e pode conter múltiplos itens.

Adicionando texto

Substitua <!-- FOOTER.ITEM --> pelo texto desejado usando as tags <div>

<div class="footer-content"><small>Seu texto aqui</small></div>
<!-- FOOTER.ITEM -->

Adicionando texto com ícones

Como o site inclui a biblioteca Ionicons é possível adicionar ícones seguidos de texto na barra inferior.

Substitua <!-- FOOTER.ITEM --> pelo seguinte código, personalizando o texto e o ícone:

<div class="footer-content"> 
  <ion-icon name="logo-github"></ion-icon>
  <p class="mb-0 ml-1"><a href="Seu link aqui" target="_blank" class="text-reset">Seu texto aqui</a></p>
</div>
<!-- FOOTER.ITEM -->

Para trocar o ícone basta substituir <ion-icon name="logo-github"></ion-icon> pelo código do ícone desejado, obtido em Ionicons

Lembre-se

Alterações nas barras superior e inferior devem ser incluidas em todos os arquivos .html para garantir consistência na navegação.

nowcaster's People

Contributors

beatrizmilz avatar lsbastos avatar pitmonticone avatar rafalopespx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

nowcaster's Issues

INLA Requeriments warning

Require INLA with the NAMESPACE and Warning if it is not installed:

  • INLA load with the NAMESPACE
  • Warning if it is not installed

Silent and Return.age

  • Silent parameter is not working properly needs fixing
  • Return.age is obsolete, needs fixing

Need to verify the date formats

We need on this line to verify which are date formats, the actual problem it is the onset dates are moved to the last complete day of the week .

Maybe a solution:

turn back the dates to its original format, which it is the inverser of the formula in dados_w()

Bug on forecasting K steps ahead

There is a bug on the use of parameter K. When the last week is incomplete and K = 0 the last week to correct delay is the last complete week. But when K>0, it should forecast the current (and incomplete) week and the following K-1 weeks, but it seems to forecast K weeks beyond the current. As as example, when K=1, it should forecast the current (and incomplete) week but it forecasts two weeks ahead, the current one + 1.

data(sragBH)

sragBH20 <- sragBH %>% 
  filter(
    # Excluding typing date before symptoms onset
    DT_SIN_PRI <= DT_DIGITA, 
    # Excluding no typing date
    !is.na(DT_DIGITA),
    # cases reported in 2020
    year(DT_DIGITA) == 2020
  ) 

max(sragBH20$DT_DIGITA)
weekdays(max(sragBH20$DT_DIGITA))

epiweek(max(sragBH20$DT_DIGITA))
# Incomplete week (recording ends on Thursday)

# Nowcasting ignores an incomplete week (OK)
nowk0 = nowcasting_inla(dataset = sragBH20,
                        date_onset = DT_SIN_PRI,
                        date_report = DT_DIGITA,
                        silent = T)
nowk0$total %>% 
  mutate(
    epiweek = epiweek(dt_event)
  )  %>% tail()



# Week to forecast: week 53 only, but it forecast weeks 53/20 and 1/21
nowk1 = nowcasting_inla(dataset = sragBH20,
                        date_onset = DT_SIN_PRI,
                        date_report = DT_DIGITA,
                        K = 1,
                        silent = T)
nowk1$total %>% 
  mutate(
    epiweek = epiweek(dt_event)
  )  %>% tail()


# Weeks to forecast: week 53 and 1, but it forecast weeks 53/20, 1 and 2/21
nowk2 = nowcasting_inla(dataset = sragBH20,
                        date_onset = DT_SIN_PRI,
                        date_report = DT_DIGITA,
                        K = 2,
                        silent = T)
nowk2$total %>% 
  mutate(
    epiweek = epiweek(dt_event)
  ) %>% tail()

Covariate feature

Implement and test a model with covariate of tweets counts and google trends searches on the main function nowcasting_inla:

  • creates new shadow function nowcasting_covariates()
  • flag on the main function nowcasting_inla
  • all together

Forecasting article

Create an article performing a forecasting using the parameter K > 0

  • create a rmarkdown performing the forecasting
  • build article
  • build site

Last date to nowcast

Need to check the last date in the dataset and the last date in the nowcast estimates. It seems they don't match properly.

Review articles in the package site

To guarantee a well written documentation and understandable articles, we have to review the articles presented in the site of the package:

  • Get started!
  • Forecasting
  • Nowcasting for decision-making
  • Structured data

Nowcasting functions that accept any type of data

To build more cleaverly the package, without problems when calling nowcasting_inla(), create another functions that will by called by nowcasting_inla to make nowcasting without stratifying and make nowcasting with clustering specified data.

Tentative names, nowcasting_no_stratum() and nowcasting_cluster(), add the parameters to call those functions on nowcasting_inla(), these new functions will have a structure similar to nowcasting_age()

  • #6
  • #19
  • implement above functions on nowcasting_inla()
  • test stability of any kind of data passed to nowcasting_inla()

Add observed number of cases into nowcaster outputs

Add a column with the observed number of cases in the nowcaster outputs.

> aaa$total
# A tibble: 15 × 7
    Time dt_event   Median    LI    LS   LIb   LSb
   <int> <date>      <dbl> <dbl> <dbl> <dbl> <dbl>
 1    17 2019-10-26    154  154   154    154  154 
 2    18 2019-11-02    173  173   173    173  173 

create `nowcasting_cluster()`

Create new internal functions for nowcasting with and without spatial structured data, nowcasting_spatial for spatialy structured data and the existing nowcasting_age & nowcasting_no_age for non-spatial structured data

  • nowcasting_spatial created and implemented
  • stable and tested for the README

Trajectory parameter

Implement a trajectory flag on nowcasting_inla to give back the option trajectory devolution

Slope function to calculate the tendency of the curve

Through a simple linear model adjusted to the trajectories, we can infer the tendency of the epidemic curve, to do so we can construct functions that take the posteriors output from the main function nowcasting_inla and adjust the linear model and return the slope of the trajectories, to give a more quantitative tendency inference:

Implement Hessian testing

Hessian test is constructed to avoid problems when the INLA solver stack in negative eigenvalues, to avoid it we can work on the length iteration steps. The test can be implemented through a while test until it reach a certain amount of tries. Follows a schematic test to be put on the nowcasting_age and nowcasting_no_age functions:

hess.min <- -1
h.value <- 0.01
h.trials <- 0.001
trials <- 0
while (hess.min <= 0 & trials < 50){
    
    # Running the Negative Binomial model in INLA
    output0 <- inla(model, family = "nbinomial", data = dados.age,
                    control.predictor = list(link = 1, compute = T),
                    control.compute = list(config = T, waic=F, dic=F, openmp.strategy='huge'),
                    control.family = list(
                      hyper = list("theta" = list(prior = "loggamma", 
                                                  param = c(0.001, 0.001))
                      )
                    ),
                    num.threads = 6,
                    control.inla = list(h = h.value),
                    ...
                    
    )
    hess.start <- which(output0$logfile == 'Eigenvalues of the Hessian')
    hess.min <- min(as.numeric(output0$logfile[(hess.start+1):(hess.start+3)]))
    h.value <- h.trials + 0.001
    h.trials <- h.value
    trials <- trials + 1
    
  }

Imports

Stabilize the Imports for the package, now is import by the export specification on the NAMESPACE:

  • Verify Imports needed
  • NAMESPACE update
  • Warning to certify if INLA package is installed

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.