1. O software R

O software R

O artigo R: A Language for Data Analysis and Graphics1, escrito pelos desenvolvedores da linguagem George Ross Ihaka e Robert Clifford Gentleman, marca o início de uma nova era no processamento e análise de dados: o desenvolvimento do software R.

Criadores do R2

O R é uma linguagem e ambiente estatístico que traz muitas vantagens para o usuário, embora elas não sejam tão óbvias inicialmente:

  • O R é um software livre (livre no sentido de liberdade) distribuído sob a Licença Pública Geral3, podendo ser copiado, distribuído e instalado livremente em diversos computadores. Isso contrasta com softwares comerciais, cujas licenças, geralmente restritivas, não permitem que cópias sejam distribuídas ou instaladas em mais de um computador sem a devida licença (que, obviamente, é paga!);
  • A grande maioria dos softwares livres é gratuita, e o R não é exceção;
  • O código-fonte do R está disponível para os usuários e atualmente é gerenciado por um grupo chamado R Core Team4. A vantagem de ter o código aberto é que falhas podem ser detectadas e rapidamente corrigidas. Esse sistema de revisão depende da participação dos usuários. Em contraste, em muitos pacotes comerciais, as falhas não são corrigidas até o lançamento da próxima versão, o que pode levar vários anos;
  • O R fornece uma interface de entrada por linha de comando (ELC).

No software R, todos os comandos são digitados e o mouse é pouco usado. Pode parecer antigo, pouco amigável ou até pobre em recursos visuais, mas isso faz com que nos deparemos com o melhor recurso do R: a sua flexibilidade. Para usuários familiarizados, a linguagem do R se torna clara e simples. Com poucos comandos, funções poderosas podem ser criadas5, e o usuário está sempre consciente do que foi pedido por meio da ELC (meus dados, minhas análises!). Isso contrasta com pacotes que possuem uma interface amigável (point-and-click), mas que escondem a dinâmica dos cálculos e, potencialmente, os seus erros. Finalmente, o R fornece uma ampla variedade de procedimentos estatísticos, desde os básicos até os que exigem grande esforço computacional (modelagem linear e não linear, testes estatísticos clássicos, análise de séries temporais, classificação, agrupamento etc.), além de recursos gráficos elegantes. Um dos pontos fortes do R é a facilidade com que gráficos de qualidade podem ser produzidos, incluindo símbolos matemáticos e fórmulas, quando necessário. O software R está disponível para uma ampla variedade de plataformas UNIX e sistemas similares (incluindo FreeBSD e Linux), Windows e macOS.

O software RStudio

Quem já é usuário de softwares por linhas de comando, como o SAS, provavelmente não vai notar muita diferença. Toda análise se resume à seguinte sequência: dados > códigos > saída. A experiência do usuário com o R, no entanto, pode ser mais atrativa utilizando o RStudio6. O RStudio é um software de código aberto e gratuito, disponibilizado publicamente em 28/02/2011. Trata-se de um ambiente de desenvolvimento integrado (IDE) para R que inclui:

  • Janelas de edição de texto a partir das quais o código pode ser enviado para o console e/ou salvo no sistema operacional;
  • Listas de objetos em sua área de trabalho;
  • Histórico infinito dos comandos, facilmente pesquisável, com a possibilidade de reinserir no console um comando a partir do histórico;
  • Interface com o sistema operacional para acesso a arquivos;
  • Janela de ajuda com botões de voltar e avançar;
  • Download de pacotes.

Nesta seção serão abordados alguns aspectos básicos para que o usuário do R possa desenvolver as suas análises. Será dado enfoque às áreas básicas da interface, cujo conhecimento é necessário para que um usuário iniciante possa realizar sua primeira análise. A figura abaixo mostra as principais janelas do RStudio, incluindo o script, o console, a “área de trabalho” e o output para gráficos.

Interface do RStudio

O painel do canto inferior direito, além de servir como output para gráficos (Plots), é também o local onde os pacotes utilizados nas análises são instalados (Packages) e onde mais informações sobre as funções podem ser encontradas (Help).

Meu primeiro script

O primeiro passo é criar um novo script, por meio do menu File > New File > R Script ou utilizando o atalho Ctrl+Shift+N. Para salvar um script, devemos clicar no botão com o símbolo de disquete, escolher o nome do arquivo e o diretório onde ele será armazenado no seu computador. Algumas dicas importantes:

  • Escolha sempre um nome sem caracteres especiais (ex., ç, ã, é etc.);

  • Escolha sempre um nome curto ou abreviado, que identifique a finalidade das linhas de comando escritas (ex., dftese);

  • Evite espaços se o nome do arquivo for composto. Para isso, use um underscore ‘_’ (ex., df_tese).

Diretório de trabalho

Antes de iniciar as análises, recomenda-se escolher um diretório onde devem estar os inputs (dados) e para onde serão enviados os outputs (gráficos, arquivos .txt, .xlsx etc.). Para selecionar o diretório, basta seguir o caminho Session > Set Working Directory > Choose Directory ou utilizar as teclas de atalho Ctrl+Shift+H.

Selecionando um diretório

Pacotes

Se você realizou o download do software R pela primeira vez e achou um tanto quanto “estranho” o pequeno tamanho do arquivo (~80 MB), provavelmente deve ter se perguntado como um software estatístico tão poderoso pode ser comprimido em um arquivo tão pequeno (pequeno em comparação com os +20 GB do SAS). A resposta é simples: somente os pacotes básicos do R são baixados com o arquivo de instalação. À medida que o usuário necessita realizar uma análise específica, torna-se necessária a instalação de um pacote que contenha uma função para realizar tal análise.

A instalação dos pacotes pode ser realizada conforme a figura abaixo ou utilizando o comando install.packages(). Após a instalação do pacote, o usuário deve utilizar a função library() para que o pacote seja carregado e as suas funções possam ser utilizadas. Quando o usuário tenta utilizar uma função pertencente a um determinado pacote e esse pacote não está instalado (ou carregado), um erro é exibido.

Instalando pacotes

Ajuda para a função nls()

Como exemplo inicial, vamos tentar selecionar a variável Sepal.Length do conjunto de dados nativo iris utilizando a função abaixo. Cuidado: spoilers do pacote dplyr!

Para isso, o código a seguir é digitado no script e executado selecionando-se a linha e clicando no botão Run ou utilizando o atalho Ctrl+Enter.

SL <- select(iris, Sepal.Length)
Error in `select()`:
! não foi possível encontrar a função "select"

Neste caso, um erro é exibido, pois o pacote dplyr não está instalado ou carregado. Caso ele já esteja instalado, o erro acima é resolvido carregando-se o pacote antes de executar a função.

library(dplyr)
SL <- select(iris, Sepal.Length)

Caso o pacote dplyr não esteja instalado, a maneira mais fácil de instalá-lo é instalando a coleção de pacotes tidyverse7, seguindo os passos da figura Instalando pacotes (acima) ou utilizando o seguinte comando:

install.packages("tidyverse", dependencies = TRUE)
library(tidyverse)

O tidyverse é uma coleção de pacotes R projetados para a ciência de dados, contendo, dentre outros, os seguintes pacotes que serão utilizados neste material:

  • ggplot2, para criação de gráficos.
  • dplyr, para manipulação de dados.
  • tidyr, para organização de dados.
  • tibble, para criação de tibbles.

Praticamente todas as rotinas realizadas no R são baseadas em bibliotecas de códigos. Para instalar os pacotes necessários para a reprodução deste material, o seguinte código é utilizado:

pacotes <- c("tidyverse", "esquisse", "metan", "rio")

# instalar os pacotes
install.packages(pacotes)

É provável que a primeira instalação seja um pouco demorada, pois todas as dependências serão instaladas. Após finalizada a instalação, basta carregar o pacote que será utilizado com library().

library(tidyverse)

Os pacotes disponibilizados no software R estão em constante atualização. Para verificar novas versões de pacotes, basta ir em Packages > Update, no painel inferior direito, conforme demonstrado na figura abaixo.

Verificando se há atualizações disponíveis

Por fim, para citar os pacotes, recomenda-se verificar a referência por meio da função citation(). Para o pacote metan, por exemplo, a referência oficial é o artigo que descreve o pacote.

citation("metan")
Please, support this project by citing it in your publications!

  Olivoto T, Lúcio AD (2020). "metan: An R package for
  multi‐environment trial analysis." _Methods in Ecology and
  Evolution_, *11*(6), 783-789. doi:10.1111/2041-210X.13384
  <https://doi.org/10.1111/2041-210X.13384>.

Uma entrada BibTeX para usuários(as) de LaTeX é

  @Article{,
    title = {metan: An R package for multi‐environment trial analysis},
    author = {Tiago Olivoto and Alessandro Dal’Col Lúcio},
    year = {2020},
    journal = {Methods in Ecology and Evolution},
    volume = {11},
    number = {6},
    pages = {783-789},
    doi = {10.1111/2041-210X.13384},
  }

Comandos elementares

Atribuições

Os comandos elementares podem ser divididos em expressões e atribuições. Por exemplo, podemos estar interessados em resolver a seguinte expressão \(10+15=25\).

10 + 15
[1] 25

Ao executar o comando no console, o R avalia a expressão e retorna o resultado. Caso queiramos armazenar esse resultado em algum objeto, usamos o operador de atribuição <- (atalho: Alt + -), no formato objeto <- operacao. Considerando o mesmo caso anterior, um objeto soma é criado com:

soma <- 10 + 15

Operadores matemáticos

Conhecendo esses comandos elementares, podemos passar para as operações matemáticas mais utilizadas, que são cruciais em qualquer linguagem de programação. No R, essas operações são baseadas em símbolos ou funções semelhantes aos da maioria dos outros softwares estatísticos.

1 + 1 # Soma
[1] 2
2 - 1 # Subtração
[1] 1
2 * 2 # Multiplicação
[1] 4
1 + 2 * 2 ^ 2 # Eleva ao quadrado, multiplica e soma
[1] 9
((1 + 2) * 2) ^ 2 # Soma, multiplica e eleva ao quadrado
[1] 36
sqrt(4) # Raiz quadrada
[1] 2
4^2 # Potência
[1] 16
log(10) # Por padrão, o logaritmo é de base e (logaritmo natural)
[1] 2.302585
log(100, 10) # Logaritmo de base 10
[1] 2
exp(100) # exponencial
[1] 2.688117e+43

Álgebra de matrizes (avançado)

Para a multiplicação de matrizes, utiliza-se %*% em vez de *. Note a diferença no exemplo abaixo.

(x <- matrix(1:4, ncol = 2))
     [,1] [,2]
[1,]    1    3
[2,]    2    4
(y <- matrix(5:8, ncol = 2))
     [,1] [,2]
[1,]    5    7
[2,]    6    8

O resultado da multiplicação da matriz x e y é dado por:

\[ \left( {\begin{array}{*{20}{c}}{1 \cdot 5 + 3 \cdot 6}&{1 \cdot 7 + 3 \cdot 8}\\{2 \cdot 5 + 4 \cdot 6}&{2 \cdot 7 + 4 \cdot 8}\end{array}} \right) = \left( {\begin{array}{*{20}{c}}{23}&{31}\\{34}&{46}\end{array}} \right) \]

x * y # Errado
     [,1] [,2]
[1,]    5   21
[2,]   12   32
x %*% y # Certo
     [,1] [,2]
[1,]   23   31
[2,]   34   46

A função t() é utilizada para transposição de matrizes e solve() para inversão de matrizes. Vamos resolver o seguinte sistema de equações utilizando estes operadores.

\[ \begin{array}{l}{x_1} + 2{x_2} = 4\\{x_1} - {x_2} = 1\end{array} \]

Matricialmente o sistema acima é dado por:

\[ \left[ {\begin{array}{*{20}{c}}{\begin{array}{*{20}{l}}1\\1\end{array}}&{\begin{array}{*{20}{c}}2\\{ - 1}\end{array}}\end{array}} \right]\left[ {\begin{array}{*{20}{c}}{{x_1}}\\{{x_2}}\end{array}} \right] = \left[ {\begin{array}{*{20}{c}}4\\1\end{array}} \right] \]

Esse sistema de equações é representado por \({\bf{AX}} = {\bf{c}}\) e tem como solução \({\bf{X = }}{{\bf{A}}^{{\bf{ - 1}}}}{\bf{c}}\)

(A <- matrix(c(1, 1, 2, -1), ncol = 2))
     [,1] [,2]
[1,]    1    2
[2,]    1   -1
# Transposta de A
t(A)
     [,1] [,2]
[1,]    1    1
[2,]    2   -1
# resolução do sistema de equações
(Ainv <- solve(A)) # Obtém a inversa de A
          [,1]       [,2]
[1,] 0.3333333  0.6666667
[2,] 0.3333333 -0.3333333
(c <- c(4, 1)) # Vetor C
[1] 4 1
(X <- Ainv %*% c)
     [,1]
[1,]    2
[2,]    1
Tip

Note que o mesmo resultado anterior pode ser obtido sem a necessidade de atribuição, ao declarar todas as operações em um único comando:

solve(matrix(c(1, 1, 2, -1), ncol = 2)) %*% c(4, 1)
     [,1]
[1,]    2
[2,]    1

A função det() é utilizada para calcular o determinante de uma matriz, e a função eigen(), para calcular autovalores e autovetores.

(X <- matrix(c(1, 2, 5, 3, 4, 5, 6, 1, 9), ncol = 3))
     [,1] [,2] [,3]
[1,]    1    3    6
[2,]    2    4    1
[3,]    5    5    9
(detX <- det(X))
[1] -68
(av <- eigen(X))
eigen() decomposition
$values
[1] 12.980067  2.854933 -1.835000

$vectors
           [,1]       [,2]       [,3]
[1,] -0.4785227  0.2342735 -0.9165278
[2,] -0.2017392 -0.8386325  0.2624173
[3,] -0.8545861  0.4917432  0.3018507
av$values # Extrai os autovalores
[1] 12.980067  2.854933 -1.835000
av$vectors # Extrai os autovetores
           [,1]       [,2]       [,3]
[1,] -0.4785227  0.2342735 -0.9165278
[2,] -0.2017392 -0.8386325  0.2624173
[3,] -0.8545861  0.4917432  0.3018507

A função diag() extrai a diagonal de uma matriz ou cria uma matriz cuja diagonal é formada pelos elementos declarados. Os próximos comandos extraem a diagonal de X e criam uma matriz identidade com 3 linhas e 3 colunas.

diag(X)
[1] 1 4 9
diag(x = 1, nrow = 3, ncol = 3)
     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    1    0
[3,]    0    0    1

Fóruns e materiais de apoio

Playlist R Quick Tips

Playlist R Quick Tips

Série do Prof. Ben Dêivid

Série do Prof. Ben Dêivid

Canal do Prof. Alcinei

Canal do Prof. Alcinei

Homework

Meu primeiro relatório em R
  • Utilizando o RStudio, crie um documento no formato Quarto (.qmd) e salve-o em uma pasta de sua preferência.
  • Neste relatório, apresente os comandos para a instalação de dois pacotes que você acredita serem úteis em sua área de estudo.
  • Descreva brevemente os pacotes instalados.
Para fechar: o que levar deste módulo
  • R é o motor, RStudio é o painel: o R faz os cálculos; o RStudio apenas torna o trabalho mais confortável. Ambos são livres e gratuitos.
  • Script sempre: escreva seus comandos em um script (ou documento Quarto), nunca apenas no console. Assim, sua análise fica documentada e reproduzível.
  • Instalar ≠ carregar: install.packages() é executado uma vez por computador; library() é executado em toda nova sessão. A mensagem could not find function quase sempre significa que um pacote não foi carregado.
  • Atribuição: use <- (atalho Alt + -) para guardar resultados em objetos e reutilizá-los depois.
  • Organize-se desde o início: use nomes de arquivos e pastas sem acentos e sem espaços. Uma excelente alternativa ao setwd() são os Projetos do RStudio (File > New Project), que definem o diretório de trabalho automaticamente.
  • Peça ajuda ao próprio R: ?nome_da_funcao (ex., ?mean) abre a documentação; citation("pacote") mostra como citar o pacote em seus trabalhos.
Free Website Hit Counter
Free website hit counter

Footnotes

  1. https://www.jstor.org/stable/1390807?seq=1#page_scan_tab_contents↩︎

  2. Fonte: Robert Gentleman <https://biocasia2020.bioconductor.org/>; Ross Ihaka: <https://stat.auckland.ac.nz/>↩︎

  3. https://www.gnu.org/licenses/quick-guide-gplv3.html↩︎

  4. https://www.r-project.org/↩︎

  5. Veja uma breve história de como o pacote metan, desenvolvido pelo prof. Olivoto, foi concebido https://methodsblog.com/2020/05/28/metan_package/↩︎

  6. https://www.rstudio.com/↩︎

  7. https://www.tidyverse.org/↩︎