Vantagens e Desvantagens de R e porque usá-lo.
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:
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.
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:
data.frame
. Com o Python, isto é mais complicado e interoperabilidade envolve 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?
µ = 0
e em Python/R seria escrito mu = 0
. Para matemáticos e cientistas isso permite com o que o código fique mais inteligível.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
.
Com essas diferenças e semelhanças com Python e Julia, é hora de retornarmos aquelas cinco características que mostramos.
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:
hp
maior que 100Primeiro 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:
{readr}
– Leitura de dados de diversos tipos de arquivos{tidyr}
– Coerção de dados em formatos diversos para um formato tabular{dplyr}
– Manipulação e transformação de dados tabulares{ggplot2}
– Gráficos{stringr}
– Manipulação de dados textuais{forcats}
– Manipulação de dados qualitativos{purrr}
– Programação funcionalAlém disso, há as bibliotecas auxiliares
{readxl}
– Leitura de dados de tabelas Excel{haven}
– Leitura de dados de tabelas SPSS e Stata{DBI}
e {dbplyr}
– Leitura de dados de Banco de Dados e tradução de operações usando linguagem R e verbos do {tidyverse}
9 em operações usando linguagem SQL{rvest}
e {httr}
– Raspagem de dados da WebTodas 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.
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:
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:
{rticles}
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…
Too Long, Didn’t Read, traduzindo Muito Grande, Não Li↩︎
SciPy
roda em C/C++ e Fortran, NumPy
em C/C++, todo o tidyverse
roda em C++, etc↩︎
Óbvio, mas é bom enfatizar.↩︎
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.↩︎
Claro que em alguns campos (ex: ciências da computação), Python é muito mais utilizado.↩︎
Quando Python e R usam C/C++ ou Fortran essa vantagem cai bastante ou é inexistente.↩︎
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).↩︎
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).↩︎
Aqui você já viu alguns em ação: mutate()
, filter()
e summarise()
↩︎
CRAN – Comprehensive R Archive Network, repositório global de bibliotecas de R.↩︎
Dados de 09/04/21.↩︎
Para ver uma lista curada pelo CRAN de bibliotecas por assunto vá em CRAN Task Views.↩︎
Da qual, nós somos oriundos.↩︎
Este documento é um exemplo. Usamos a biblioteca {distill}
que é focada para escrita científica e técnica.↩︎
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.↩︎
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.
If you see mistakes or want to suggest changes, please create an issue on the source repository.
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 ...".
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} }