Introdução ao conceito de reprodutibilidade

Relatórios reprodutíveis com R - Curso de Verão IME-USP 2024

Ministrante: Beatriz Milz

Introdução ao conceito de reprodutibilidade

  • O que vamos aprender:

    • O que é reprodutibilidade?

    • O que são projetos no RStudio, e qual é a importância de usá-los?

    • O que são caminhos relativos e absolutos?

    • Como desabilitar a funcionalidade do RStudio que armazena automaticamente os objetos e o histórico?

Reprodutibilidade

  • “É um conceito que não tem uma definição única e comum”. (Gundersen, 2021)

  • “Para alguém fazer uma afirmação científica legítima, ele deve ser capaz de reproduzir totalmente seus resultados a partir de seus dados brutos (e de preferência outros devem ser capazes de reproduzi-los também)”. Dr. John Paul Helveston

Reprodutibilidade

Quais fatores contribuem com pesquisa não reprodutível? Fonte: Baker (2016)

Reprodutibilidade

“Reprodutibilidade é como escovar os dentes. Isso é bom para você, mas leva tempo e esforço. Depois de aprender, torna-se um hábito.” - Irakli Loladze, Bryan College of Health Sciences em Lincoln, Nebraska.

Baker, M. 1,500 scientists lift the lid on reproducibility. Nature 533, 452–454 (2016). https://doi.org/10.1038/533452a

Exemplos

  • Boas práticas, como: não usar caracteres especiais nos caminhos, variáveis, nomes de coluna, etc; armazenar os arquivos de forma consistente.

  • Registrar a versão do R e dos pacotes utilizados

  • Documentar a análise

  • Controlar a versão dos arquivos

Outras referências interessantes:

Projetos do RStudio

  • O RStudio permite a criação de Projetos.

  • O projeto é uma pasta no computador, onde devemos armazenar todos os arquivos usados ou criados em uma análise. Essa pasta irá conter também um arquivo com o nome do projeto e a extensão .Rproj.

  • Para cada análise, lembre-se de criar um .Rproj correspondente.

Projetos do RStudio

  • Usar projetos no RStudio facilita a organização dos arquivos, posteriormente sincronizar com o GitHub, entre outros.

Criando um projeto

  • Criando um projeto em uma nova pasta:

    • File > New Project > New Directory > New Project

    • Dê um nome para seu projeto (será o nome da pasta), escolha a pasta no seu computador, e clique em Create Project.

Diretório de trabalho/Working Directory

  • O diretório de trabalho é a pasta em que o R irá:

    • procurar arquivos na hora de ler informações;
    • gravar arquivos na hora de salvar objetos.
  • Quando usamos Projetos do RStudio, o nosso diretório de trabalho é a pasta principal do projeto.

  • A função getwd() serve para conferir o diretório de trabalho:

> getwd()
[1] "/Users/beatrizmilz/GitHub/2023-curso-de-verao-ime-usp-relatorios"
  • A função setwd() serve para alterar o diretório de trabalho. NÃO É RECOMENDADO O USO! Isso torna o código não reprodutível.

Caminhos

  • Caminhos são textos que representam o endereço do arquivo no computador.

  • É muito importante entender como funcionam! Caso contrário, ficará difícil fazer coisas como importar dados para o R.

  • Caminhos podem ser relativos ou absolutos.

  • Caminhos absolutos: tem início na pasta raiz do seu computador/usuário. NÃO É RECOMENDADO O USO! Isso torna o código não reprodutível.

  • Caminhos relativos: tem início no diretório de trabalho da sessão. Caso você esteja usando projetos, os caminhos relativos tem início na pasta inicial do projeto.

  • Utilize sempre que possível caminhos relativos.

Exemplos de caminhos

Exemplos acessando o mesmo arquivo:

  • Caminho absoluto:
"/Users/beatrizmilz/GitHub/2023-curso-de-verao-ime-usp-relatorios/docs/slides/images/rprojs.png"
  • Caminho relativo:
"docs/slides/images/rprojs.png"

O pacote here também possui funções úteis para escrever caminhos:

here::here()
[1] "/Users/beatrizmilz/Documents/IME-Verao/2024-curso-de-verao-ime-usp-relatorios"

Os arquivos .RData e .Rhistory

  • Em sua configuração padrão, a IDE manterá na “memória” todos os últimos comandos executados, todos os dados utilizados e todos os objetos criados.

  • Ao fechar e abrir o RStudio, essas informações serão recarregadas na memória como se o usuário nunca tivesse saído do programa. Esse recurso é tornado possível pela criação de dois arquivos ocultos: .RData e .Rhistory.

  • O primeiro abriga absolutamente todos os objetos criados por uma sessão R, enquanto o segundo contém uma lista com os últimos comandos executados.

  • Ao reabrir o RStudio, o conteúdo armazenados nestes arquivos será carregado no ambiente de trabalho atual como se nada tivesse acontecido.

  • Leia mais neste capítulo do livro Zen do R

Por que desistir do .RData e .Rhistory

  • Se todos os resultados parciais de uma análise estiverem disponíveis a qualquer momento, diminui o incentivo para a escrita de código reprodutível

  • Ao dependermos ativamente do .Rdata, se acidentalmente sobrescrevemos um objeto relevante e o código para recriá-lo não estiver mais acessível, não haverá nenhuma forma confiável de recuperá-lo.

  • O R trata todos os objetos guardados na memória igualmente. Isso significa que ele também irá armazenar nos arquivos ocultos todas as bases de dados da sessão. Assim, o .RData pode ser um arquivo de múltiplos gigabytes

Como desabilitar .RData e .Rhistory

  • Na barra superior: Tools > Global Options…

Colocar em prática

  1. Crie um projeto no RStudio para armazenar o que vamos criar durante o curso. Salve em algum lugar no seu computador que seja fácil de encontrar.

  2. Desabilite o .RData e .Rhistory no seu RStudio

  3. Execute o seguinte código no console, verifique o resultado: devtools::session_info()

  4. Dentro do projeto criado, crie uma pasta chamada “dados”, e salve o seguinte arquivo na mesma: clique aqui para baixar o arquivo pinguins.csv

Dados originais: https://allisonhorst.github.io/palmerpenguins/

Dados traduzidos para Português: https://cienciadedatos.github.io/dados/

Colocar em prática: Continuação

  1. Crie um R Script, copie e cole o código abaixo, e substitua o caminho correto para ler a base de pinguins. Aproveite que o RStudio nos ajuda a buscar caminhos: dentro das aspas, experimente clicar a tecla TAB.
caminho <- "...." 
pinguins <- readr::read_csv(caminho)
  1. Verifique no painel Environment do RStudio se a base de Pinguins foi importada corretamente.

Exemplo do Session Info

devtools::session_info()
─ Session info ───────────────────────────────────────────────────────────────
 setting  value
 version  R version 4.2.1 (2022-06-23)
 os       macOS Monterey 12.7.1
 system   aarch64, darwin20
 ui       X11
 language (EN)
 collate  en_US.UTF-8
 ctype    en_US.UTF-8
 tz       America/Sao_Paulo
 date     2024-02-24
 pandoc   3.1.1 @ /Applications/RStudio.app/Contents/Resources/app/quarto/bin/tools/ (via rmarkdown)

─ Packages ───────────────────────────────────────────────────────────────────
 package     * version    date (UTC) lib source
 cachem        1.0.8      2023-05-01 [1] CRAN (R 4.2.0)
 callr         3.7.3      2022-11-02 [1] CRAN (R 4.2.0)
 cli           3.6.2      2023-12-11 [1] CRAN (R 4.2.3)
 crayon        1.5.2      2022-09-29 [1] CRAN (R 4.2.0)
 devtools      2.4.5      2022-10-11 [1] CRAN (R 4.2.0)
 digest        0.6.33     2023-07-07 [1] CRAN (R 4.2.0)
 ellipsis      0.3.2      2021-04-29 [1] CRAN (R 4.2.0)
 evaluate      0.23       2023-11-01 [1] CRAN (R 4.2.0)
 fastmap       1.1.1      2023-02-24 [1] CRAN (R 4.2.0)
 fs            1.6.3      2023-07-20 [1] CRAN (R 4.2.0)
 glue          1.7.0      2024-01-09 [1] CRAN (R 4.2.3)
 here          1.0.1      2020-12-13 [1] CRAN (R 4.2.0)
 htmltools     0.5.7.9000 2023-11-14 [1] Github (rstudio/htmltools@7efa2d8)
 htmlwidgets   1.6.2      2023-03-17 [1] CRAN (R 4.2.0)
 httpuv        1.6.12     2023-10-23 [1] CRAN (R 4.2.0)
 jsonlite      1.8.8      2023-12-04 [1] CRAN (R 4.2.3)
 knitr         1.45       2023-10-30 [1] CRAN (R 4.2.0)
 later         1.3.1      2023-05-02 [1] CRAN (R 4.2.0)
 lifecycle     1.0.4      2023-11-07 [1] CRAN (R 4.2.1)
 magrittr      2.0.3      2022-03-30 [1] CRAN (R 4.2.0)
 memoise       2.0.1      2021-11-26 [1] CRAN (R 4.2.0)
 mime          0.12       2021-09-28 [1] CRAN (R 4.2.0)
 miniUI        0.1.1.1    2018-05-18 [1] CRAN (R 4.2.0)
 pkgbuild      1.4.2      2023-06-26 [1] CRAN (R 4.2.0)
 pkgload       1.3.3      2023-09-22 [1] CRAN (R 4.2.0)
 prettyunits   1.2.0      2023-09-24 [1] CRAN (R 4.2.0)
 processx      3.8.2      2023-06-30 [1] CRAN (R 4.2.0)
 profvis       0.3.8      2023-05-02 [1] CRAN (R 4.2.0)
 promises      1.2.1      2023-08-10 [1] CRAN (R 4.2.0)
 ps            1.7.5      2023-04-18 [1] CRAN (R 4.2.0)
 purrr         1.0.2      2023-08-10 [1] CRAN (R 4.2.0)
 R6            2.5.1      2021-08-19 [1] CRAN (R 4.2.0)
 Rcpp          1.0.11     2023-07-06 [1] CRAN (R 4.2.0)
 remotes       2.4.2.1    2023-07-18 [1] CRAN (R 4.2.0)
 rlang         1.1.3      2024-01-10 [1] CRAN (R 4.2.3)
 rmarkdown     2.25       2023-09-18 [1] CRAN (R 4.2.0)
 rprojroot     2.0.4      2023-11-05 [1] CRAN (R 4.2.1)
 rstudioapi    0.15.0     2023-07-07 [1] CRAN (R 4.2.0)
 sessioninfo   1.2.2      2021-12-06 [1] CRAN (R 4.2.0)
 shiny         1.7.5.1    2023-10-14 [1] CRAN (R 4.2.0)
 stringi       1.8.3      2023-12-11 [1] CRAN (R 4.2.3)
 stringr       1.5.1      2023-11-14 [1] CRAN (R 4.2.3)
 urlchecker    1.0.1      2021-11-30 [1] CRAN (R 4.2.0)
 usethis       2.2.2      2023-07-06 [1] CRAN (R 4.2.0)
 vctrs         0.6.5      2023-12-01 [1] CRAN (R 4.2.3)
 xfun          0.41       2023-11-01 [1] CRAN (R 4.2.0)
 xtable        1.8-4      2019-04-21 [1] CRAN (R 4.2.0)
 yaml          2.3.8      2023-12-11 [1] CRAN (R 4.2.3)

 [1] /Library/Frameworks/R.framework/Versions/4.2-arm64/Resources/library

──────────────────────────────────────────────────────────────────────────────

Revisão - Reprodutibilidade

  • Em um código reprodutível, devemos ser capazes de reproduzir totalmente os resultados a partir dos dados brutos, assim como outras pessoas (em computadores diferentes) também devem ser capazes de reproduzir esses mesmos resultados a partir dos dados brutos.

  • Utilizar boas práticas aumentam as chances de escrever um código reprodutível.

Exemplos de boas práticas:

  • Utilizar Projetos do RStudio. Quando usamos projetos do RStudio, o diretório de trabalho será a pasta principal do projeto.

  • Desabilitar o .Rhistory e .Rdata.

  • Utilizar caminhos relativos.

  • Documentar os pacotes e versões utilizadas.