Ecossistema R: estatística e visualização de dados

1. Introdução ao Ecossistema R

O R surgiu em 1993, criado por Ross Ihaka e Robert Gentleman na Universidade de Auckland, Nova Zelândia, como uma implementação livre da linguagem S. Sua filosofia sempre foi clara: ser uma linguagem voltada para análise estatística e visualização de dados, com forte ênfase em reprodutibilidade e comunidade aberta.

Na ciência de dados moderna, o R se destaca frente a Python e Julia por seu ecossistema estatístico maduro e integrado. Enquanto Python oferece bibliotecas independentes (pandas, scikit-learn), o R possui pacotes coesos como o tidyverse que seguem uma filosofia de design consistente. Julia, por sua vez, é mais rápida em computação numérica, mas carece da amplitude de pacotes estatísticos que o R acumulou em três décadas.

Para começar, instale o R e o RStudio. O RStudio oferece uma interface REPL (Read-Eval-Print Loop) integrada com console, editor de scripts, visualização de dados e gerenciamento de pacotes. Primeiros comandos:

# Instalação de pacotes essenciais
install.packages("tidyverse")
install.packages("ggplot2")
install.packages("dplyr")

# Carregar pacotes
library(tidyverse)
library(ggplot2)

2. Manipulação e Transformação de Dados com tidyverse

O tidyverse revolucionou a manipulação de dados no R. Seus pacotes seguem uma gramática unificada que torna o código legível e previsível.

dplyr fornece verbos intuitivos para transformação:

library(dplyr)

# Filtrar linhas, criar novas colunas, agrupar e sumarizar
dados_filtrados <- dados %>%
  filter(ano > 2020) %>%
  mutate(receita_ajustada = receita * 1.1) %>%
  group_by(categoria) %>%
  summarise(
    media = mean(receita_ajustada),
    desvio = sd(receita_ajustada),
    n = n()
  )

tidyr lida com formato dos dados:

library(tidyr)

# Pivoteamento longo para largo
dados_largos <- dados_longos %>%
  pivot_wider(
    names_from = mes,
    values_from = vendas
  )

# Pivoteamento largo para longo
dados_longos <- dados_largos %>%
  pivot_longer(
    cols = -id,
    names_to = "mes",
    values_to = "vendas"
  )

readr e lubridate facilitam importação e manipulação de datas:

library(readr)
library(lubridate)

# Importar CSV com especificação de tipos
dados <- read_csv("vendas.csv",
  col_types = cols(
    data = col_date(format = "%Y-%m-%d"),
    valor = col_double()
  ))

# Manipular datas
dados %>%
  mutate(
    mes = month(data),
    ano = year(data),
    trimestre = quarter(data)
  )

3. Estatística Descritiva e Inferencial

O R oferece funções base poderosas para estatística descritiva:

# Medidas resumo
summary(dados$valor)
describe(dados)  # pacote psych

# Distribuições
hist(dados$valor, breaks = 30)
boxplot(valor ~ categoria, data = dados)

Testes de hipótese clássicos:

# Teste t para duas amostras
t.test(valor ~ grupo, data = dados)

# ANOVA de um fator
modelo_anova <- aov(valor ~ tratamento, data = dados)
summary(modelo_anova)

# Teste qui-quadrado
tabela <- table(dados$categoria, dados$resultado)
chisq.test(tabela)

Modelos lineares com lm():

# Regressão linear
modelo <- lm(valor ~ idade + renda + educacao, data = dados)
summary(modelo)

# Interpretação dos coeficientes
coef(modelo)
confint(modelo)

4. Visualização de Dados com ggplot2

O ggplot2 implementa a Gramática dos Gráficos, onde cada gráfico é construído por camadas:

library(ggplot2)

# Gráfico de dispersão básico
ggplot(dados, aes(x = idade, y = valor)) +
  geom_point(alpha = 0.5, color = "blue") +
  geom_smooth(method = "lm", se = TRUE) +
  labs(
    title = "Relação entre Idade e Valor",
    x = "Idade (anos)",
    y = "Valor (R$)"
  )

# Gráfico de barras com facetas
ggplot(dados, aes(x = categoria, fill = resultado)) +
  geom_bar(position = "dodge") +
  facet_wrap(~ ano, ncol = 3) +
  theme_minimal() +
  scale_fill_manual(
    values = c("sucesso" = "green", "fracasso" = "red")
  )

# Boxplot personalizado
ggplot(dados, aes(x = grupo, y = valor, fill = grupo)) +
  geom_boxplot(outlier.color = "red", outlier.size = 3) +
  stat_summary(fun = mean, geom = "point", shape = 18, size = 4) +
  theme_classic() +
  coord_flip()

5. Pacotes Especializados para Visualização

plotly transforma gráficos ggplot2 em interativos:

library(plotly)

p <- ggplot(dados, aes(x = idade, y = valor, text = nome)) +
  geom_point()

ggplotly(p, tooltip = "text")

corrplot e ggcorrplot para matrizes de correlação:

library(corrplot)
library(ggcorrplot)

# Matriz de correlação
cor_matrix <- cor(dados_numericos)
corrplot(cor_matrix, method = "color", type = "upper")

# Versão ggplot2
ggcorrplot(cor_matrix, 
  hc.order = TRUE,
  type = "lower",
  lab = TRUE)

gganimate para animações:

library(gganimate)

p <- ggplot(dados, aes(x = tempo, y = valor, color = grupo)) +
  geom_line() +
  transition_reveal(tempo)

animate(p, fps = 10, duration = 5)

6. Modelagem Estatística Avançada

Modelos lineares generalizados (GLM):

# Regressão logística (família binomial)
modelo_logistico <- glm(
  sucesso ~ idade + renda + educacao,
  data = dados,
  family = binomial(link = "logit")
)

summary(modelo_logistico)
predict(modelo_logistico, type = "response")

# Regressão de Poisson (contagem)
modelo_poisson <- glm(
  contagem ~ tratamento + tempo,
  data = dados_contagem,
  family = poisson(link = "log")
)

Análise de séries temporais:

library(forecast)
library(tsibble)

# Criar objeto tsibble
serie <- dados %>%
  as_tsibble(index = data)

# Modelo ARIMA
modelo_arima <- auto.arima(serie$valor)
forecast(modelo_arima, h = 12) %>%
  autoplot()

Machine learning básico:

library(caret)
library(randomForest)

# Divisão treino-teste
set.seed(42)
split <- createDataPartition(dados$target, p = 0.8, list = FALSE)
treino <- dados[split, ]
teste <- dados[-split, ]

# Random Forest
modelo_rf <- randomForest(
  target ~ .,
  data = treino,
  ntree = 500,
  importance = TRUE
)

# Avaliação
predicoes <- predict(modelo_rf, teste)
confusionMatrix(predicoes, teste$target)

7. Reproducibilidade e Comunicação de Resultados

R Markdown e Quarto permitem criar relatórios dinâmicos:

---
title: "Análise de Vendas"
output: html_document
---

```{r}
# Código executado no relatório
summary(dados)
ggplot(dados, aes(x = mes, y = vendas)) + geom_line()

**Shiny** para dashboards interativos:

```text
library(shiny)

ui <- fluidPage(
  titlePanel("Dashboard de Vendas"),
  sidebarLayout(
    sidebarPanel(
      selectInput("categoria", "Categoria:",
                  choices = unique(dados$categoria))
    ),
    mainPanel(
      plotOutput("grafico")
    )
  )
)

server <- function(input, output) {
  output$grafico <- renderPlot({
    dados %>%
      filter(categoria == input$categoria) %>%
      ggplot(aes(x = mes, y = vendas)) +
      geom_line()
  })
}

shinyApp(ui = ui, server = server)

Boas práticas com renv:

# Iniciar ambiente reprodutível
renv::init()

# Instalar pacotes
renv::install("tidyverse")

# Snapshot do ambiente
renv::snapshot()

# Restaurar em outro computador
renv::restore()

8. Conclusão e Próximos Passos

O ecossistema R oferece soluções completas para estatística e visualização de dados, desde análises descritivas simples até modelos preditivos complexos. Sua força reside na integração entre pacotes, na filosofia de design consistente e na comunidade ativa que produz conteúdo de qualidade.

Para aprofundamento, explore os CRAN Task Views, que organizam pacotes por área temática. Acompanhe o R-bloggers para tutoriais e cases reais. Participe de comunidades como R-Ladies e grupos de usuários locais.

O R se integra nativamente com SQL, Spark e APIs REST. Com o pacote reticulate, é possível chamar código Python dentro do R, combinando o melhor dos dois mundos. Tendências futuras incluem o R nas nuvens (Posit Cloud) e o crescimento de interfaces low-code como o RStudio Visual Editor.

Referências

  • R Project for Statistical Computing — Site oficial do R, com documentação, manuais e links para download
  • RStudio (Posit) — Ambiente de desenvolvimento integrado para R, com recursos de edição, debugging e visualização
  • Tidyverse — Coleção de pacotes para ciência de dados no R, incluindo dplyr, ggplot2, tidyr e readr
  • R for Data Science (2nd Edition) — Livro online gratuito de Hadley Wickham, referência em manipulação e visualização de dados com tidyverse
  • CRAN Task Views — Visões temáticas que organizam pacotes do CRAN por áreas como estatística, machine learning e séries temporais
  • R-bloggers — Agregador de blogs sobre R, com tutoriais, cases e novidades da comunidade
  • Shiny — Framework para construção de dashboards interativos diretamente no R
  • Quarto — Sistema de publicação científica que integra R, Python e Julia para relatórios dinâmicos