Por que R?

Vantagens e Desvantagens de R e porque usá-lo.

Jose Storopoli https://scholar.google.com/citations?user=xGU7H1QAAAAJ&hl=en (UNINOVE)https://www.uninove.br , Leonardo Vils https://scholar.google.com/citations?user=VO07L9EAAAAJ&hl=en (UNINOVE)https://www.uninove.br
January 11, 2021

Há tantas linguagens de programação por aí: “Por que devo escolher R?” “E Python?” “Ouvi falar que Python é melhor que R.” “Julia é melhor que Python e R,”… Estas são as diversas perguntas e dúvidas que nos são endereçadas quando começamos a abordar R com alunos e pesquisadores. Se você quer a resposta curta (TL;DR1 como é chamado ultimamente) é esta:

Você consegue praticar Estatística com qualquer linguagem obscura que dê um suporte mínimo a operações matriciais.

Então, se você quiser “fazer Estatística” com COBOL, LISP ou qualquer outra coisa fique a vontade… Não vamos te impedir. Agora se você quer “fazer Estatística” sendo:

  1. Produtivo (Análises/hora)
  2. Eficaz (Conseguir usar a ferramenta correta dentre um rol de inúmeras)
  3. Comunicativo (Maioria das ciências aplicadas usam R)
  4. Replicável (Com as configurações corretas, sua análise sempre será a mesma)
  5. Transparente (Não tem como se esconder atrás de opensource)

Então, acreditamos que o R é a escolha certa.

Primeiramente, abordaremos o R versus outras duas linguagens muito usadas para estatística e análise de dados: Python e Julia. E na sequência, explanaremos essas cinco características de R.

R vs Python

Essa é uma briga boa. Acreditamos que não há um vencedor. Ambas são muito boas para certos fins. Primeiramente as semelhanças:

Agora as diferenças. Essa é a parte mais interessante e sem dúvida desencadeia muito hate mail4:

R vs Julia

Com as grandes diferenças entre Python e R apresentadas, precisamos falar de Julia. Julia é uma linguagem nova oriunda do MIT que está sendo muito usada para computação científica. O quê muda com Julia?

Julia é uma linguagem que estamos olhando de maneira promissora. Ela é rápida, já é adotada pela comunidade científica, possui um paradigma funcional e permite uma melhor inteligibilidade do código ao permitir o uso de caracteres unicode e símbolos matemáticos7.

A principal lacuna que a linguagem Julia tenta solucionar é o paradigma das duas linguagens. Esse paradigma é como os desenvolvedores de algoritmos e softwares de análise desenvolvem suas funcionalidades. Primeiro o código é escrito em uma linguagem de fácil entendeimento e rápida prototipagem como R ou Python. Então, o código do protótipo é testado com um problema pequeno ou com uma fração dos dados que serão utilizados pela solução final. Somente após averiguar que o protótipo funciona da maneira correta, é que os desenvolvedores partem para uma linguagem mais robusta e rápida, mas de implementação demorada como C++ ou Fortran. Julia serve para eliminar esse paradigma e ser a linguagem usada tanto para prototipagem quando para implementação.

O primeiro autor em especial acredita que Julia é o futuro e fez um conjunto de tutoriais de estatística Bayesiana usando Julia e Turing.jl. O conteúdo está todo em inglês e pode ser acessado aqui: https://storopoli.github.io/Bayesian-Julia. No primeiro tutorial, chamado de Why Julia? ele explica os benefícios de Julia e porque acredita que Júlia é o futuro. O primeiro autor já sofreu bastante para deixar seu código de R mais rápido com C++. Inclusive fez um conjunto de tutorias de como integrar C++ e R usando Rcpp que pode ser acessado aqui: https://storopoli.github.io/Rcpp. A partir de agora ele quase sempre escolhe uma implementação em Julia do que usar C++ com o Rcpp.

Vantagens de R

Com essas diferenças e semelhanças com Python e Julia, é hora de retornarmos aquelas cinco características que mostramos.

Produtivo (Análises/hora)

Com R, conseguimos nos aproveitar do paradigma de programação funcional e sermos mais produtivos (além que o código fica muito mais inteligível). Veja um exemplo abaixo com R e Python. Estamos pegando um dataset chamado mtcars que possui informações sobre alguns carros. Aqui serão feitas algumas operações sequenciais:

  1. Transformar variáveis que contém texto em variáveis categóricas8
  2. Filtrar somente as observações que tenham hp maior que 100
  3. Calcular a média somente para as variáveis númericas

Primeiro o R, veja como o código é muito mais sucinto e simples de ler. O pipe %>% significa “pegue o resultado dessa operação e jogue como input da próxima.” Aqui estamos usando o pacote {dplyr} do {tidyverse}.

mtcars %>%
  mutate_if(is.character, as.factor) %>%
  filter(hp > 100) %>%
  summarise_if(is.numeric, mean)

Agora com Python usando a biblioteca {pandas}. Como a lógica de Python é orientada a objetos eu tenho que acessar as funções e atributos de um objeto usando um ponto . após o objeto. Exemplos: objeto.atributo ou objeto.funcao(). Aqui estou fazendo diversas operações em um objeto chamado mtcars que é o nosso dataset. Quase todas operações do {pandas} em um dataset resultam em um novo dataset transformado. Aqui é muito mais complicado porque eu preciso encadear diversas operações usando funções de um objeto. Sem o paradigma funcional (e em especial o pipe %>%) o código fica muito mais verboso e não tão inteligível.

mtcars.select_dtypes(
  ['object']).apply(
    lambda x: x.astype('category')).query(
      'hp > 100').select_dtypes(
        ['number']).mean()

Nós preferimos usar o R para manipular e transformar dados, não só porque a síntaxe é melhor, mas também porque há muito mais funções e operações criadas para diversos tipos de manipulações. No universo das bibliotecas do {tidyverse} temos os chamados core packages:

Além disso, há as bibliotecas auxiliares

Todas esses bibliotecas rodam em C/C++ e por isso são bem rápidos e eficientes. Além disso, vale a pena mecionar todo o universo {tidymodels} que é um ecossistema para modelagem e machine learning com R.

Eficaz (Conseguir usar a ferramenta correta dentre um rol de inúmeras)

Atualmente o CRAN10 possui um total de 17,398 bibliotecas11. Todas opensource e gratuitas. Quase toda grande inovação em Estatística em diversos campos são publicadas como bibliotecas de R. A incorporação de novas ferramentas ao rol do estatístico no ecossistema do R é muito mais simples e fácil por conta da interoperabilidade proporcionada pelo objeto universal básico de R que é o data.frame. Tal funcionalidade é incorporada na linguagem em si, qualquer versão de R (desde os primórdios da década de 90) já tinha esse objeto para representar dados tabulares.

Além de bibliotecas para análises de dados e Estatística de maneira geral. Temos ecossistemas e bibliotecas para campos distintos como por exemplo12:

Comunicativo (Maioria das ciências aplicadas usam R)

Durante o processo de avaliação-por-pares que as publicações científicas passam para serem publicadas, muitos editores e revisores pedem aos autores que submetam ou mostrem o código usado para analisar os dados. Isto é feito para averiguar se a análise foi feita de maneira correta. E a maioria dessas análises no mundo das ciências aplicadas, em especial a área de ciências sociais aplicadas13, usam o R.

Além disso, com a biblioteca {rmarkdown} e seus diversos templates, é possível criar diversos tipos de documentos14:

Replicável e Transparente15

A ciência está passando por uma crise de credibilidade que no fundo é também uma crise de replicabilidade. Um livro muito que recomendamos para entender esta crise da ciência é o “Science Fictions: How Fraud, Bias, Negligence, and Hype Undermine the Search for Truth” de Stuart Ritchie (Ritchie, 2020)16. Uma das vantagens do R é que com o mesmo código e o mesmo conjunto de dados, dois usuários conseguem chegar na mesma análise e resultados. Claro que R não soluciona todo o problema de replicabilidade da ciência. Mas, código aberto, e se possível, dados abertos, já ajudam bastante…

Ioannidis, J. P. (2005). Why most published research findings are false. PLoS Medicine, 2(8), e124.
Ritchie, S. (2020). Science fictions: Exposing fraud, bias, negligence and hype in science. Random House.

  1. Too Long, Didn’t Read, traduzindo Muito Grande, Não Li↩︎

  2. SciPy roda em C/C++ e Fortran, NumPy em C/C++, todo o tidyverse roda em C++, etc↩︎

  3. Óbvio, mas é bom enfatizar.↩︎

  4. Notem que estas são nossas opiniões. E como não casamos com opiniões, casamos com fatos (afinal somos estatísticos): uma vez que os fatos mudam, nossas opiniões mudarão de acordo.↩︎

  5. Claro que em alguns campos (ex: ciências da computação), Python é muito mais utilizado.↩︎

  6. Quando Python e R usam C/C++ ou Fortran essa vantagem cai bastante ou é inexistente.↩︎

  7. Para o leitor isso não pode fazer diferença. Mas quando você, por exemplo, quer pegar um algoritmo descrito matematicamente em um artigo e implementá-lo diretamente em código, esses caracteres matemáticos são muito bem-vindos. Palavras de quem já escreveu um algoritmo de Amostragem Monte Carlo usando correntes Markov na mão (não por falta de opção, mas por busca de sinestesia para melhor aprendizagem).↩︎

  8. Variáveis categóricas são conhecidas como factors no R e são maneiras eficientes de manipular e armazenar dados não-numéricos. Geralmente dados não-numéricos são dados textuais ou alguma chave de identificação única (tipo um id).↩︎

  9. Aqui você já viu alguns em ação: mutate(), filter() e summarise()↩︎

  10. CRAN – Comprehensive R Archive Network, repositório global de bibliotecas de R.↩︎

  11. Dados de 09/04/21.↩︎

  12. Para ver uma lista curada pelo CRAN de bibliotecas por assunto vá em CRAN Task Views.↩︎

  13. Da qual, nós somos oriundos.↩︎

  14. Este documento é um exemplo. Usamos a biblioteca {distill} que é focada para escrita científica e técnica.↩︎

  15. Não é uma característica única do R, mas de qualquer linguagem que possua suporte básico a análise e manipulação de dados.↩︎

  16. Há um metacientista (cientista que estuda a ciência) chamado John Ioannidis que possui diversas publicações interessantes sobre a crise atual da ciência. Em especial, há um artigo de 2005 intitulado “Why Most Published Research Findings Are False” publicado na PLOS Medicine (Ioannidis, 2005) que merece atenção do leitor.

    ↩︎

References

Corrections

If you see mistakes or want to suggest changes, please create an issue on the source repository.

Reuse

Text and figures are licensed under Creative Commons Attribution CC BY-SA 4.0. Source code is available at https://github.com/storopoli/Estatistica, unless otherwise noted. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".

Citation

For attribution, please cite this work as

Storopoli & Vils (2021, Jan. 11). Estatística com R: Por que R?. Retrieved from https://storopoli.github.io/Estatistica/0-Por_que_R.html

BibTeX citation

@misc{storopoli2021porqueR,
  author = {Storopoli, Jose and Vils, Leonardo},
  title = {Estatística com R: Por que R?},
  url = {https://storopoli.github.io/Estatistica/0-Por_que_R.html},
  year = {2021}
}