Objetivo do curso: Capacitar participantes a extrair, validar, tratar e analisar microdados do SUS com R, integrando fontes de custos/preços e técnicas aplicadas à avaliação econômica.
A linguagem R foi criada nos anos 1990 pelos professores de Estatística da Universidade de Auckland, na Nova Zelândia, Ross Ihaka e Robert Gentleman. Seu objetivo era reduzir o trabalho de programação necessário para a análise estatística de dados.
O ambiente R teve sua primeira versão pública, a R 1.0.0, lançada em fevereiro de 2000.
R é um ambiente e uma linguagem de programação idealizados para a análise de dados.
A Comprehensive R Archive Network (CRAN) é uma rede mundial de servidores que armazenam versões atualizadas do R, de seus pacotes e das respectivas documentações.
Principais funções da CRAN:
Download do R:
https://cran.r-project.org/
Os pacotes são conjuntos reutilizáveis de funções, dados e documentações que expandem as capacidades básicas da linguagem R.
É a unidade fundamental de código distribuível no R. Enquanto o R Base fornece as funcionalidades essenciais da linguagem, os pacotes acrescentam ferramentas específicas para tarefas como:
É a rede oficial de servidores que armazena, verifica e disponibiliza pacotes validados para instalação.
É o diretório local do sistema operacional no qual os pacotes instalados ficam armazenados.
Instalar um pacote
Baixa e instala um pacote da CRAN no computador. Essa operação requer acesso à internet.
A instalação normalmente precisa ser realizada apenas uma vez.
Carregar um pacote
Ativa um pacote instalado para uso na sessão atual do R.
O pacote precisa ser carregado novamente sempre que uma nova sessão do R for iniciada.
O RStudio é um ambiente integrado de desenvolvimento — Integrated Development Environment (IDE) — para programação em R.
Ele oferece uma interface gráfica que facilita:
Download do RStudio:
https://posit.co/download/rstudio-desktop/
A interface padrão do RStudio é dividida em quatro painéis principais.
Área utilizada para escrever, editar e salvar scripts em R antes de executá-los.
Área na qual os comandos são executados pelo R. Também exibe resultados, avisos, mensagens e erros.
Reúne diferentes abas para:
O Google Colaboratory, ou Google Colab, é um serviço do Google Research voltado à programação em notebooks.
Por meio de uma máquina virtual, permite escrever e executar códigos diretamente no navegador, sem a necessidade de configuração prévia no computador.
O Colab é especialmente utilizado em:
Embora seja configurado inicialmente para Python, também permite a utilização da linguagem R.
Siga o caminho:
Google Drive → Novo → Mais → Google Colaboratory → Ambiente de execução → Alterar o tipo de ambiente de execução → R → Salvar
No Google Colab, o ambiente de trabalho é chamado de notebook. Ele é organizado em células modulares de texto e código.
Utiliza Markdown ou HTML para adicionar:
Essa célula não executa comandos de programação.
Armazena códigos executáveis na linguagem configurada, como Python ou R.
Os resultados, tabelas e gráficos são apresentados logo abaixo da célula após sua execução.
Shift + Enter.Ctrl + F9.No R, uma variável armazena um valor na memória. O operador de
atribuição mais utilizado é <-.
<- para
armazenar um valor em um objeto.| Operação | Operador | Exemplo | Resultado |
|---|---|---|---|
| Soma | + |
5 + 3 |
8 |
| Subtração | - |
5 - 3 |
2 |
| Multiplicação | * |
5 * 3 |
15 |
| Divisão | / |
5 / 3 |
1.6667 |
| Potenciação | ^ |
5 ^ 3 |
125 |
Os operadores lógicos combinam ou invertem condições. O resultado dessas operações é um valor booleano:
TRUE — verdadeiro;FALSE — falso.| Operador | Significado | Descrição |
|---|---|---|
& |
E (AND) | Compara os elementos de dois vetores |
&& |
E restrito | Avalia apenas o primeiro elemento |
\| |
OU (OR) | Compara os elementos de dois vetores |
\|\| |
OU restrito | Avalia apenas o primeiro elemento |
! |
NÃO (NOT) | Inverte o valor lógico |
| Operador | Significado |
|---|---|
== |
Igual a |
!= |
Diferente de |
> |
Maior que |
< |
Menor que |
>= |
Maior ou igual a |
<= |
Menor ou igual a |
As estruturas condicionais permitem que o código tome decisões com
base em testes que resultam em TRUE ou
FALSE.
Os principais recursos são:
if;else;else if;ifelse().ifExecuta um bloco de código quando a condição é verdadeira.
elseDefine o que será executado quando a condição do if for
falsa.
else ifPermite verificar uma nova condição quando a condição anterior é falsa.
ifelse()Função vetorizada utilizada para aplicar uma condição a vários elementos, como os valores de uma coluna.
As estruturas de repetição executam um bloco de código várias vezes. No R, os principais recursos são:
for;while;repeat;apply.Sempre que possível, prefira operações vetorizadas. Elas costumam produzir códigos mais curtos e legíveis.
forExecuta um bloco de código para cada elemento de uma sequência ou vetor.
procedimentos <- c("Consulta", "Exame", "Cirurgia")
for (procedimento in procedimentos) {
print(procedimento)
}A variável procedimento recebe um elemento diferente do
vetor em cada repetição.
Outro exemplo:
forAntes de iniciar a repetição, recomenda-se criar um objeto com o tamanho necessário.
valores <- c(100, 200, 300)
valores_reajustados <- numeric(length(valores))
for (i in seq_along(valores)) {
valores_reajustados[i] <- valores[i] * 1.10
}
valores_reajustados
# [1] 110 220 330A função seq_along() gera uma sequência segura de
posições para percorrer um vetor.
whileExecuta um bloco enquanto uma condição permanecer verdadeira.
A variável usada na condição deve ser atualizada dentro do bloco. Caso contrário, pode ocorrer uma repetição infinita.
repeatExecuta um bloco indefinidamente, até que uma condição de saída seja
alcançada com break.
breakInterrompe imediatamente a estrutura de repetição.
Nesse exemplo, a repetição termina quando numero é igual
a 6.
nextInterrompe somente a repetição atual e avança para o próximo elemento.
O número 3 não será exibido.
Muitas repetições podem ser substituídas por operações aplicadas diretamente a vetores.
Com repetição:
valores <- c(10, 20, 30)
dobro <- numeric(length(valores))
for (i in seq_along(valores)) {
dobro[i] <- valores[i] * 2
}Com operação vetorizada:
As duas abordagens produzem o mesmo resultado:
applyAs funções da família apply executam uma função
repetidamente sobre elementos ou dimensões de um objeto.
| Função | Aplicação |
|---|---|
apply() |
Linhas ou colunas de matrizes |
lapply() |
Elementos de uma lista; retorna uma lista |
sapply() |
Elementos de uma lista; simplifica o resultado |
vapply() |
Semelhante a sapply(), mas exige o tipo do
resultado |
tapply() |
Grupos definidos por um fator |
apply()Calcular a média de cada coluna de uma matriz:
Em MARGIN:
1 representa linhas;2 representa colunas.lapply()Aplicar mean() a cada elemento de uma lista:
Uma estrutura for pode percorrer arquivos mensais do
DATASUS.
arquivos <- c(
"PAAC2501.dbc",
"PAAC2502.dbc",
"PAAC2503.dbc"
)
quantidade_linhas <- numeric(length(arquivos))
for (i in seq_along(arquivos)) {
dados <- read.dbc::read.dbc(arquivos[i])
quantidade_linhas[i] <- nrow(dados)
}Organize o resultado em um data frame:
A competência pode ser extraída do nome do arquivo:
| Situação | Recurso indicado |
|---|---|
| Percorrer uma sequência conhecida | for |
| Repetir enquanto uma condição for verdadeira | while |
| Repetir até uma interrupção explícita | repeat |
| Interromper completamente a repetição | break |
| Ignorar somente a repetição atual | next |
| Executar cálculo diretamente em um vetor | Operação vetorizada |
| Aplicar uma função a listas ou matrizes | Família apply |
“Para entender os cálculos em R, dois slogans são úteis:
- Tudo o que existe é um objeto.
- Tudo o que acontece é uma chamada de função.”
— John Chambers, criador da linguagem S, que serviu de base para a criação do R.
Em termos práticos:
Armazenamos as informações em objetos e realizamos as análises por meio de funções.
Uma função é um bloco reutilizável de código criado para realizar uma tarefa específica.
Ela pode:
As funções facilitam a análise de dados e evitam a repetição de código.
Funções nativas
Já estão disponíveis no R e executam tarefas comuns.
Funções de pacotes
São acrescentadas por pacotes externos, ampliando as funcionalidades do R nas áreas de estatística, gráficos, manipulação de dados e modelagem.
Funções personalizadas
São criadas pelo próprio usuário para automatizar tarefas ou rotinas específicas.
Uma função personalizada possui:
function: palavra-chave usada para
definir a função;O R disponibiliza funções nativas para realizar operações matemáticas comuns.
| Função | Descrição | Exemplo |
|---|---|---|
abs() |
Calcula o valor absoluto | abs(-10) |
sqrt() |
Calcula a raiz quadrada | sqrt(25) |
log() |
Calcula o logaritmo natural (base e) | log(10) |
log10() |
Calcula o logaritmo na base 10 | log10(100) |
exp() |
Calcula a função exponencial (eˣ) | exp(2) |
factorial() |
Calcula o fatorial de um número | factorial(5) |
sin() |
Calcula o seno, usando radianos | sin(pi / 2) |
cos() |
Calcula o cosseno, usando radianos | cos(0) |
tan() |
Calcula a tangente, usando radianos | tan(pi / 4) |
Funções personalizadas permitem agrupar e reutilizar instruções para executar uma tarefa específica.
function(): comando que define a
função.{}).return(): comando opcional que
explicita o resultado retornado.No R, um objeto é uma estrutura armazenada na memória. Ele pode conter números, textos, vetores, tabelas ou outros tipos de dados.
O operador <- é utilizado para atribuir um valor a um
objeto:
nome_do_objeto <- valor.idade de Idade.| Estrutura | Dimensão | Tipos de dados |
|---|---|---|
| Vetor | Unidimensional | Um único tipo |
| Matriz | Bidimensional | Um único tipo |
| Lista | Unidimensional | Tipos e estruturas diferentes |
| Data frame | Bidimensional | Um tipo por coluna |
O vetor é a estrutura de dados mais básica do R. Trata-se de uma sequência unidimensional e homogênea, ou seja, todos os elementos possuem o mesmo tipo.
Um vetor é criado com a função c():
Até mesmo um valor isolado é tratado pelo R como um vetor de comprimento 1.
double: números reais;integer: números inteiros;character: textos;logical: valores TRUE ou
FALSE;complex: números complexos.O R não possui um tipo de dado específico chamado escalar. Um valor único é representado como um vetor de comprimento 1.
A função as.Date() converte textos em datas. O formato
padrão é AAAA-MM-DD.
Para outros formatos, informe a estrutura da data:
| Símbolo | Significado | Exemplo |
|---|---|---|
%d |
Dia do mês | 17 |
%a |
Dia da semana abreviado | Mon |
%A |
Dia da semana completo | Monday |
%m |
Número do mês | 08 |
%b |
Mês abreviado | Aug |
%B |
Mês completo | August |
%y |
Ano com dois dígitos | 26 |
%Y |
Ano com quatro dígitos | 2026 |
Textos são representados pelo tipo character.
| Função | Descrição |
|---|---|
substr(x, start, stop) |
Extrai ou substitui parte de um texto |
strsplit(x, split) |
Divide um texto usando um separador |
paste(..., sep) |
Concatena textos |
toupper(x) |
Converte o texto para maiúsculas |
tolower(x) |
Converte o texto para minúsculas |
dados$teste_data <- c("2000-05-10", "2004-04-10", "2005-03-10")
substr(dados$teste_data, start = 1, stop = 4)
# [1] "2000" "2004" "2005"
x <- strsplit(dados$teste_data, split = "-")
x[[1]][2]
# [1] "05"
paste("Paciente", dados$paciente_id, sep = ": ")
# [1] "Paciente: 1" "Paciente: 2" "Paciente: 3"
toupper(dados$teste_resultado)
# [1] "NEGATIVO" "POSITIVO" "POSITIVO"
tolower(dados$teste_resultado)
# [1] "negativo" "positivo" "positivo"x <- c("Pedro", "Ana", "Roberto")
x
# [1] "Pedro" "Ana" "Roberto"
x <- c(25, 32, 54)
x
# [1] 25 32 54Quando tipos diferentes são combinados, o R realiza uma coerção automática para um tipo comum:
As operações são realizadas elemento a elemento, sem a necessidade de laços de repetição.
Quando vetores têm comprimentos diferentes, o R pode repetir os elementos do vetor menor:
Comprimentos incompatíveis podem produzir um aviso e resultados indesejados.
| Operação | Descrição |
|---|---|
x:y |
Gera uma sequência de x até y |
seq(from, to, by) |
Gera uma sequência com incremento definido |
x[n] |
Acessa o elemento da posição n |
x[condição] |
Seleciona valores que atendem à condição |
which(condição) |
Retorna os índices que atendem à condição |
x[n] <- a |
Atualiza a posição n |
x[n] <- NA |
Define a posição n como ausente |
x[-n] |
Exclui a posição n do resultado |
| Função | Descrição |
|---|---|
length() |
Retorna o comprimento |
min() e max() |
Retornam os valores mínimo e máximo |
range() |
Retorna o mínimo e o máximo |
round() |
Arredonda valores |
sort() |
Ordena os elementos |
sum() |
Soma os elementos |
prod() |
Multiplica os elementos |
mean() e median() |
Calculam a média e a mediana |
var() e sd() |
Calculam a variância e o desvio-padrão |
IQR() |
Calcula o intervalo interquartílico |
summary() |
Apresenta medidas-resumo |
Uma matriz é uma estrutura bidimensional composta por linhas e colunas. Todos os seus elementos devem possuir o mesmo tipo.
| Argumento | Descrição |
|---|---|
data |
Vetor com os valores |
nrow |
Número de linhas |
ncol |
Número de colunas |
byrow |
Se TRUE, preenche por linha |
Uma lista pode armazenar elementos de diferentes tipos, tamanhos e estruturas.
Um data frame é uma estrutura bidimensional em formato tabular:
Também é possível criar um data frame importando dados externos:
Internamente, um data frame é uma lista de vetores com algumas restrições:
paciente_id <- 1:3
teste_resultado <- c("Negativo", "Positivo", "Positivo")
teste_valor <- c(70, 80, 220)
teste_data <- c("2000-05-10", "2004-04-10", "2005-03-10")
dados <- data.frame(
paciente_id,
teste_resultado,
teste_valor,
teste_data
)A criação também pode ser feita diretamente:
dados[dados$teste_valor > 70, ] # Filtrar linhas
dados$altura <- c(1.68, 1.75, 1.70) # Criar coluna
dados$altura <- NULL # Remover coluna
dados[, -1] # Omitir a primeira coluna| Operação | Descrição |
|---|---|
cbind(x, y) |
Adiciona y como coluna |
rbind(x, y) |
Adiciona y como linha |
x[a, b] |
Acessa a linha a e a coluna b |
x[, b] |
Acessa todos os elementos da coluna b |
x[a, ] |
Acessa todos os elementos da linha a |
x[2:4, 5:8] |
Seleciona um intervalo de linhas e colunas |
x$y |
Acessa a coluna y |
x$y[n] |
Acessa a posição n da coluna y |
x$y[condição] |
Filtra valores da coluna y |
x$y <- a |
Cria ou atualiza a coluna y |
x$y[n] <- a |
Atualiza uma posição da coluna y |
x$y <- NULL |
Remove a coluna y |
x[-n] |
Exclui a coluna da posição n |
|> ou
%>%)O operador pipe encaminha o resultado de uma operação para a seguinte, tornando o código mais linear e legível.
Objetivo: calcular o desvio-padrão dos testes abaixo de 200 e arredondar o resultado.
Sem pipe:
Com o pipe nativo:
Variáveis ordinais possuem categorias com uma ordem lógica, como:
baixo < médio < alto
No R, elas podem ser representadas por fatores ordenados:
A função plot() é a ferramenta gráfica genérica do R
Base. O gráfico produzido depende da classe e da quantidade de objetos
fornecidos.
| Argumento | Descrição |
|---|---|
type |
Tipo do gráfico: pontos ("p"), linhas
("l") ou ambos ("b") |
main |
Título principal |
xlab |
Rótulo do eixo X |
ylab |
Rótulo do eixo Y |
col |
Cor |
pch |
Símbolo dos pontos |
O ggplot2, criado por Hadley Wickham, implementa uma gramática de gráficos baseada na construção por camadas.
data): conjunto de dados
utilizado.aes): associa
variáveis aos eixos, cores, tamanhos ou formas.geom_*): define os
elementos visuais, como pontos, linhas ou barras.O R utiliza o modelo copy-on-modify e realiza a limpeza automática da memória por meio de um coletor de lixo (garbage collector).
Inicialmente, x e y podem compartilhar o
mesmo objeto na memória.
Quando y é alterado, o R pode criar uma cópia para
preservar x:
O crescimento repetido de objetos dentro de loops pode provocar cópias sucessivas e reduzir o desempenho. Quando possível, recomenda-se realizar a pré-alocação.
Algumas estruturas apresentam comportamento diferente, como:
data.table;O R tradicional trabalha com objetos carregados na memória RAM. Bases maiores que a memória disponível exigem estratégias específicas de processamento.
O R pode enviar consultas ao banco e importar somente os dados necessários.
Pacotes comuns:
DBI;RPostgres;dbplyr.Os pacotes sparklyr e SparkR permitem
utilizar o R como interface para o processamento distribuído no Apache
Spark.
Pacotes como parallel, future e componentes
do ecossistema pbdR permitem distribuir tarefas entre
diferentes núcleos ou máquinas.
Alguns pacotes e formatos permitem consultar ou processar dados sem carregar todo o conjunto na memória:
arrow;duckdb;disk.frame;ff;bigmemory.O pacote data.table oferece operações eficientes e pode
modificar determinados objetos por referência, reduzindo cópias
desnecessárias.
Dados, informações e conhecimento representam diferentes níveis de compreensão. A decisão corresponde à aplicação prática desse conhecimento.
| Elemento | Definição | Exemplo |
|---|---|---|
| Dado | Fato bruto ou registro isolado, sem contexto ou significado próprio | 38 |
| Informação | Dado processado, organizado e contextualizado | A temperatura corporal do paciente é de 38 °C |
| Conhecimento | Informação compreendida, validada e associada à experiência | Temperaturas acima de 37,8 °C podem indicar febre |
| Decisão | Escolha ou ação realizada com base no conhecimento | Investigar a causa da febre e definir a conduta adequada |
O processo pode ser resumido da seguinte forma:
Dado → Informação → Conhecimento → Decisão
O ciclo de vida dos dados representa o caminho percorrido desde sua criação até seu arquivamento ou descarte.
Compreender esse processo é necessário para garantir:
Uma estrutura de dados define como as informações são organizadas, armazenadas e acessadas na memória.
A escolha adequada da estrutura influencia:
| Estrutura | Descrição |
|---|---|
| Array | Elementos acessados por índices numéricos |
| Lista ligada | Elementos conectados por referências ao próximo item |
| Pilha (stack) | Segue o princípio LIFO: último a entrar, primeiro a sair |
| Fila (queue) | Segue o princípio FIFO: primeiro a entrar, primeiro a sair |
| Estrutura | Descrição |
|---|---|
| Árvore | Organização hierárquica formada por raiz e ramificações |
| Grafo | Conjunto de nós ligados por conexões |
| Tabela hash | Associa chaves a valores para permitir buscas rápidas |
O dado corresponde ao conteúdo principal. O metadado descreve esse conteúdo e fornece contexto para sua interpretação.
| Tipo | Definição | Exemplo |
|---|---|---|
| Dado | Valor, registro ou conteúdo armazenado | Fotografia digital |
| Metadado | Informação que descreve um dado | Data da foto, autor, resolução e modelo da câmera |
Outros exemplos:
| Dado | Metadados |
|---|---|
| Texto de um livro | Autor, título, editora e número de páginas |
| Arquivo de música | Artista, álbum, gênero e duração |
| Coluna de um banco de dados | Nome, tipo, domínio e descrição |
| Resultado de exame | Unidade de medida, método e valor de referência |
Os dados podem ser classificados de acordo com o nível de organização de sua estrutura.
Possuem formato rígido, com campos previamente definidos.
Características:
Exemplos:
Não seguem um modelo tabular rígido, mas possuem marcadores ou uma organização interna.
Características:
Exemplos:
Arquivos CSV são tabulares, embora não imponham tipos ou restrições como um banco de dados relacional.
Não possuem um modelo de organização previamente definido.
Exemplos:
Textos e falas humanas são normalmente tratados como dados não estruturados.
O Processamento de Linguagem Natural (PLN) utiliza métodos computacionais para extrair informações, entidades, relações, temas e sentimentos desses conteúdos.
A hierarquia DIKW representa a evolução dos dados brutos até a compreensão necessária para orientar ações.
Data → Information → Knowledge → Wisdom
Dados → Informação → Conhecimento → Sabedoria
| Nível | Descrição | Exemplo |
|---|---|---|
| Dados | Elementos isolados e sem contexto | 23, "Ana", "maio" |
| Informação | Dados organizados e contextualizados | Ana realizou 23 vendas em maio |
| Conhecimento | Interpretação de padrões e causas | As vendas aumentam no fim do mês |
| Sabedoria | Aplicação criteriosa do conhecimento | Planejar uma campanha para o período de maior demanda |
A Gestão do Conhecimento (GC) reúne práticas para:
Estruturas lineares usadas para armazenar sequências ou coleções de elementos.
Organizam conceitos em hierarquias baseadas em relações de ancestralidade.
Produto → Eletrônico → Smartphone
Nem todos os recursos usados para interoperabilidade semântica são ontologias.
Eles podem ser classificados como:
| Categoria | Finalidade |
|---|---|
| Ontologia | Representar conceitos, propriedades e relações formais |
| Terminologia clínica | Padronizar conceitos usados no cuidado |
| Terminologia regulatória | Padronizar eventos e informações regulatórias |
| Classificação | Agrupar elementos para análise estatística |
| Padrão de interoperabilidade | Definir como as informações são estruturadas e trocadas |
| Modelo de informação | Definir a estrutura e o significado dos registros |
| Metaterminologia | Relacionar conceitos de diferentes vocabulários |
| Lista oficial | Definir itens selecionados por uma política pública |
| Recurso | Categoria principal | Aplicação |
|---|---|---|
| HL7 FHIR | Padrão de interoperabilidade | Troca eletrônica de dados de saúde |
| SNOMED CT | Terminologia clínica com estrutura ontológica | Representação detalhada de conceitos clínicos |
| openEHR | Modelo de registro eletrônico em saúde | Persistência de dados clínicos por arquétipos |
| OBM | Ontologia de medicamentos | Representação semântica de medicamentos no Brasil |
| IDMP | Conjunto de padrões ISO | Identificação regulatória de medicamentos |
| MedDRA | Terminologia regulatória | Eventos adversos e farmacovigilância |
| UMLS | Sistema de integração terminológica | Correspondência entre vocabulários biomédicos |
| ATC/DDD | Classificação e metodologia de medida | Estudos de utilização de medicamentos |
| Rename | Lista nacional oficial | Medicamentos e insumos disponibilizados no SUS |
O nome correto do padrão é IDMP — Identification of Medicinal Products. A grafia “IDM-P” não é a forma oficial.
Modelos semânticos que descrevem:
As ontologias permitem representar relações mais complexas que as taxonomias e podem apoiar integração semântica e inferência automatizada.
O HL7 FHIR — Fast Healthcare Interoperability Resources — é um padrão para intercâmbio eletrônico de informações em saúde.
O FHIR organiza os dados em estruturas chamadas recursos.
Exemplos:
| Recurso FHIR | Conteúdo |
|---|---|
Patient |
Dados do paciente |
Practitioner |
Profissional de saúde |
Organization |
Organização ou estabelecimento |
Observation |
Resultado clínico ou laboratorial |
Condition |
Problema ou condição clínica |
Procedure |
Procedimento realizado |
Medication |
Medicamento |
MedicationRequest |
Prescrição ou solicitação de medicamento |
DiagnosticReport |
Relatório diagnóstico |
Encounter |
Encontro ou atendimento |
Exemplo simplificado de uma observação:
{
"resourceType": "Observation",
"status": "final",
"code": {
"text": "Temperatura corporal"
},
"valueQuantity": {
"value": 38.2,
"unit": "°C"
}
}O FHIR define como o dado é estruturado e transmitido, mas pode utilizar terminologias externas para definir seu significado.
Exemplo:
O FHIR estrutura uma condição clínica; o SNOMED CT pode fornecer o código que representa essa condição.
O FHIR pode ser implementado por meio de:
O SNOMED CT — Systematized Nomenclature of Medicine Clinical Terms — é uma terminologia clínica internacional, multilíngue e computável.
Ele representa conceitos por meio de:
Exemplos de conceitos representáveis:
Um mesmo conceito pode possuir diferentes descrições:
Conceito: hipertensão arterial sistêmica
Descrições possíveis:
- hipertensão arterial;
- pressão alta;
- HAS.
Todas as descrições podem apontar para um mesmo identificador conceitual.
O SNOMED CT permite consultas semânticas, como:
Recuperar todos os registros classificados como doenças infecciosas, incluindo seus subtipos.
Principais aplicações:
O uso do SNOMED CT está sujeito a regras de licenciamento e às extensões nacionais disponíveis.
O openEHR é um conjunto aberto de especificações para construção de registros eletrônicos de saúde interoperáveis e semanticamente estruturados.
Sua abordagem separa:
O conteúdo clínico é organizado principalmente por:
| Componente | Função |
|---|---|
| Arquétipo | Define um conceito clínico reutilizável |
| Template | Combina e restringe arquétipos para um caso de uso |
| Terminologia | Codifica conceitos e valores |
| Modelo de referência | Define a estrutura técnica persistente |
Exemplo:
Arquétipo:
Pressão arterial
Elementos:
- pressão sistólica;
- pressão diastólica;
- posição do paciente;
- local da medição;
- dispositivo utilizado.
Um template de consulta ambulatorial pode combinar arquétipos de:
O openEHR é um modelo para armazenamento e organização longitudinal dos registros. O FHIR é amplamente utilizado para troca de informações entre sistemas.
openEHR e FHIR podem ser usados de forma complementar.
A Ontologia Brasileira de Medicamentos (OBM) é um modelo semântico destinado à representação padronizada de medicamentos no contexto regulatório brasileiro.
Ela procura diferenciar entidades que frequentemente aparecem misturadas em bases convencionais, como:
Exemplo conceitual:
Substância:
paracetamol
Medicamento virtual:
paracetamol 500 mg comprimido
Medicamento comercial:
produto de determinada marca, fabricante e registro
Apresentação:
caixa com 20 comprimidos
Essa separação permite representar corretamente que:
A OBM pode apoiar:
Um código CATMAT, um registro da Anvisa, um código SIGTAP e um item da Rename não são identificadores equivalentes.
O IDMP — Identification of Medicinal Products — é um conjunto de padrões ISO para identificação e descrição de medicamentos em processos regulatórios.
O conjunto inclui padrões relacionados a:
O IDMP permite distinguir:
Medicamento autorizado
├── substância
├── concentração
├── forma farmacêutica
├── via de administração
├── apresentação
├── fabricante
└── autorização regulatória
Principais aplicações:
IDMP não é uma lista de medicamentos. É um conjunto de padrões para representar e identificar produtos medicinais.
O MedDRA — Medical Dictionary for Regulatory Activities — é uma terminologia médica padronizada desenvolvida para atividades regulatórias relacionadas a produtos de uso humano.
É utilizada em:
O MedDRA possui uma estrutura hierárquica:
SOC — System Organ Class
HLGT — High Level Group Term
HLT — High Level Term
PT — Preferred Term
LLT — Lowest Level Term
Exemplo simplificado:
Relato original:
"O paciente apresentou muita coceira"
Termo codificado:
Prurido
A codificação permite agrupar diferentes expressões clínicas em termos regulatórios padronizados.
MedDRA não é voltado principalmente à documentação completa do prontuário. Seu foco é a atividade regulatória e a segurança de produtos.
Fonte: https://www.meddra.org/
O UMLS — Unified Medical Language System — é um sistema desenvolvido pela National Library of Medicine dos Estados Unidos para integrar diferentes vocabulários biomédicos.
Seu componente mais conhecido é o Metathesaurus, que relaciona termos de diversas fontes.
Exemplos de fontes que podem ser integradas:
Exemplo conceitual:
"Infarto do miocárdio"
"Heart attack"
"Myocardial infarction"
Essas expressões podem ser associadas a um mesmo conceito no UMLS, mesmo quando vêm de vocabulários diferentes.
Principais componentes:
| Componente | Função |
|---|---|
| Metathesaurus | Integra conceitos e termos de várias fontes |
| Semantic Network | Organiza os conceitos em tipos e relações semânticas |
| SPECIALIST Lexicon | Oferece recursos linguísticos biomédicos |
O UMLS pode apoiar:
O UMLS não substitui as terminologias de origem. Ele cria relações entre elas.
O sistema ATC/DDD é mantido pela Organização Mundial da Saúde para estudos de utilização de medicamentos.
Ele combina:
A classificação ATC organiza medicamentos em níveis hierárquicos segundo:
Estrutura geral:
Nível 1: grupo anatômico
Nível 2: grupo terapêutico
Nível 3: subgrupo farmacológico
Nível 4: subgrupo químico, terapêutico ou farmacológico
Nível 5: substância química
Exemplo de código:
A10BA02
A estrutura do código permite situar a substância em uma hierarquia anatômica, terapêutica e química.
A Dose Diária Definida é uma unidade técnica de comparação.
Ela representa a dose média diária de manutenção presumida para a principal indicação de um medicamento em adultos.
Exemplo de indicador:
DDD por mil habitantes por dia
Esse indicador permite comparar o consumo entre:
A DDD não é necessariamente a dose prescrita, recomendada ou utilizada por cada paciente.
A Relação Nacional de Medicamentos Essenciais (Rename) é o instrumento oficial que organiza os medicamentos e insumos disponibilizados no SUS.
Ela apoia:
Os itens são organizados de acordo com componentes e responsabilidades de financiamento.
Exemplos:
A Rename não é uma ontologia nem uma terminologia clínica.
Ela é uma lista oficial orientadora da política de medicamentos do SUS.
Exemplo de interpretação:
OBM:
descreve semanticamente o medicamento e suas relações.
ATC:
classifica a substância segundo grupo anatômico e terapêutico.
DDD:
fornece uma unidade técnica para estudos de utilização.
Rename:
informa a seleção e a organização do medicamento no SUS.
Fonte: https://www.gov.br/saude/pt-br/composicao/sectics/rename
Exemplo de uma prescrição eletrônica:
| Necessidade | Recurso possível |
|---|---|
| Estruturar e transmitir a prescrição | HL7 FHIR |
| Armazenar o registro clínico longitudinal | openEHR |
| Representar a condição clínica | SNOMED CT |
| Identificar semanticamente o medicamento no Brasil | OBM |
| Identificar o produto em contexto regulatório internacional | IDMP |
| Codificar evento adverso | MedDRA |
| Relacionar diferentes terminologias | UMLS |
| Classificar o medicamento | ATC |
| Comparar utilização | DDD |
| Verificar a disponibilidade no SUS | Rename |
Fluxo conceitual:
Registro clínico → estrutura interoperável → terminologia padronizada → identificação do medicamento → monitoramento regulatório → análise de utilização → política de acesso
É um repositório de metadados que documenta a estrutura e o significado dos campos de um sistema.
Pode conter:
Definem a natureza técnica dos valores armazenados.
| Tipo | Descrição | Exemplo |
|---|---|---|
INTEGER |
Número inteiro | Quantidade de itens |
NUMERIC |
Número com precisão definida | Valor monetário |
VARCHAR |
Texto com tamanho limitado | Nome |
TEXT |
Texto de tamanho variável | Observação clínica |
DATE |
Data | Data de nascimento |
TIMESTAMP |
Data e hora | Momento do atendimento |
BOOLEAN |
Valor lógico | Ativo ou inativo |
Um domínio define o conjunto de valores válidos para um campo.
Exemplo:
status_conta ∈ {Ativo, Inativo, Suspenso}
A integridade de domínio impede a inclusão de valores incompatíveis com a definição do campo.
Restrições são regras aplicadas pelo banco de dados para preservar a integridade.
| Restrição | Finalidade |
|---|---|
NOT NULL |
Impede valores nulos |
UNIQUE |
Impede valores duplicados |
PRIMARY KEY |
Identifica cada registro de forma única |
FOREIGN KEY |
Garante o relacionamento entre tabelas |
CHECK |
Valida uma condição |
DEFAULT |
Define um valor padrão |
São políticas ou condições operacionais que o sistema deve respeitar.
Exemplo:
Um cliente somente pode realizar uma compra quando seu limite de crédito for igual ou superior ao valor total do pedido.
Uma regra de negócio pode ser implementada:
Embora possam ser usados como sinônimos, dicionário de dados e codebook possuem focos diferentes.
Concentra-se na estrutura técnica dos dados.
Pode documentar:
É comum em:
Concentra-se no significado analítico das variáveis de uma pesquisa ou conjunto de dados.
Pode documentar:
É comum em:
| Característica | Dicionário de dados | Codebook |
|---|---|---|
| Foco | Estrutural e técnico | Descritivo e analítico |
| Origem comum | Esquema de banco de dados | Questionário ou pesquisa |
| Público principal | Desenvolvedores e engenheiros | Pesquisadores e analistas |
| Texto das perguntas | Raramente | Frequentemente |
| Códigos de resposta | Pode conter | Geralmente contém |
| Estatísticas descritivas | Normalmente não | Pode conter |
| Chaves e restrições | Frequentemente | Raramente |
O dicionário de dados e o codebook aumentam a transparência e a reprodutibilidade das análises.
Dados de produção sustentam operações diárias. Dados analíticos são preparados para consultas, indicadores e tomada de decisão.
| Característica | Produção — OLTP | Analítico — OLAP |
|---|---|---|
| Objetivo | Executar operações | Apoiar análises |
| Dados | Atuais e detalhados | Históricos e consolidados |
| Operações | Inserções e atualizações | Consultas e agregações |
| Consultas | Curtas e frequentes | Complexas e extensas |
| Modelagem | Geralmente normalizada | Frequentemente desnormalizada |
| Prioridade | Consistência e baixa latência | Leitura e processamento analítico |
| Exemplos | Venda, pagamento, cadastro | Indicadores, tendências, previsões |
Separar os ambientes reduz o impacto das consultas analíticas sobre os sistemas operacionais.
ETL significa Extração, Transformação e Carga (Extract, Transform, Load).
É um processo usado para integrar dados de diferentes origens e disponibilizá-los em um repositório analítico.
Coleta dados de fontes como:
Prepara os dados por meio de operações como:
Grava os dados tratados no destino, como:
A importação não termina quando o arquivo é carregado. É necessário verificar se os dados foram interpretados corretamente.
Verifique:
Verifique:
Compare os dados importados com a fonte original:
As validações devem ser automatizadas sempre que a importação fizer parte de uma rotina recorrente.
O R pode consultar bancos de dados relacionais sem importar previamente todo o conteúdo para a memória. Essa abordagem é indicada para bases grandes ou atualizadas continuamente.
Pacotes comuns:
DBI: interface padronizada para bancos de dados;RPostgres: conexão com PostgreSQL;RMariaDB: conexão com MariaDB e MySQL;RSQLite: conexão com SQLite;dbplyr: tradução de comandos do dplyr para
SQL.As credenciais não devem ser escritas diretamente no código. Utilize variáveis de ambiente, arquivos de configuração protegidos ou serviços de gerenciamento de segredos.
A coleta de informações diretamente de páginas HTML é conhecida como web scraping. Ela pode ser utilizada quando os dados não estão disponíveis por API ou para download em formato estruturado.
O pacote rvest oferece funções para:
Antes da coleta, é necessário verificar:
robots.txt;Sempre que uma API oficial estiver disponível, ela deve ser preferida à extração direta do HTML.
A escolha do formato depende do volume, da finalidade, do público e das ferramentas utilizadas.
| Necessidade | Formato recomendado |
|---|---|
| Interoperabilidade simples | CSV |
| Planilha para uso manual | XLSX |
| Preservação de objetos do R | RDS |
| Grandes volumes analíticos | Parquet |
| Dados hierárquicos e APIs | JSON |
| Troca rápida entre R e Python | Feather |
| Consultas transacionais | Banco de dados relacional |
| Arquivos de pesquisas estatísticas | SPSS, Stata ou SAS |
Antes de escolher, considere:
R é um ambiente de programação voltado à estatística, ciência de dados e visualização.
Ele permite:
São representados principalmente por data.frame,
tibble ou objetos ligados a bancos de dados.
Podem ser representados por listas aninhadas. Arquivos JSON podem ser
processados com o pacote jsonlite.
Objetos do R armazenam metadados por meio de atributos.
Atributos comuns:
names;class;dim;dimnames;levels.Metadados personalizados podem ser adicionados com
attr():
attr(df$valor, "descricao") <- "Valores monetários em reais"
attr(df, "origem_dado") <- "Sistema interno de vendas"
attr(df$valor, "descricao")
attr(df, "origem_dado")O formato RDS preserva o objeto e seus atributos:
O R pode transformar dados operacionais em estruturas adequadas para análise.
No formato tidy:
dplyr| Função | Finalidade |
|---|---|
filter() |
Filtrar linhas |
select() |
Selecionar colunas |
mutate() |
Criar ou alterar variáveis |
group_by() |
Definir grupos |
summarise() |
Calcular medidas-resumo |
arrange() |
Ordenar registros |
ggplot2: criação de gráficos
exploratórios e analíticos;O FTP (File Transfer Protocol) é um protocolo utilizado para transferir arquivos entre computadores. No R, é possível baixar, enviar e listar arquivos em servidores FTP.
As principais opções são:
curl, recomendado para a maioria das
aplicações;download.file(), adequada para downloads
simples;RCurl, utilizado em códigos mais antigos.Segurança: o FTP tradicional transmite informações sem criptografia. Sempre que possível, utilize protocolos seguros, como SFTP ou FTPS.
curlInstalação e carregamento:
download.file()Para downloads simples:
RCurlSys.getenv();keyring para gerenciar
credenciais;libcurl instalada oferece
suporte ao protocolo necessário.Uma API (Application Programming Interface) permite a comunicação entre sistemas.
No R, uma API pode ser utilizada para:
Os pacotes httr2 e jsonlite podem ser
utilizados para fazer requisições e processar respostas JSON.
plumberO pacote plumber transforma funções do R em endpoints
HTTP.
Exemplo de arquivo api.R:
#* Soma dois números
#* @param a Primeiro valor
#* @param b Segundo valor
#* @get /somar
function(a, b) {
list(
resultado = as.numeric(a) + as.numeric(b)
)
}Execução da API:
O endpoint poderá ser acessado por uma URL semelhante a:
http://localhost:8000/somar?a=10&b=20
Além do CSV, os dados podem ser distribuídos em outros formatos de texto.
| Formato | Descrição | Função |
|---|---|---|
| TSV | Campos separados por tabulação | read_tsv() |
| Texto delimitado | Campos separados por um caractere definido | read_delim() |
| Largura fixa | Campos definidos por posições específicas | read_fwf() |
| Arquivo por linhas | Um registro textual por linha | read_lines() |
Na importação, é necessário verificar:
Arquivos de texto podem utilizar diferentes codificações de caracteres. Uma configuração incorreta pode produzir erros em acentos, símbolos e nomes próprios.
Codificações comuns:
A localização também pode alterar a interpretação dos dados:
| Elemento | Exemplo |
|---|---|
| Separador decimal | 10,5 ou 10.5 |
| Separador de milhar | 1.000 ou 1,000 |
| Data | 17/08/2026 ou 2026-08-17 |
| Idioma dos meses | agosto ou August |
| Fuso horário | America/Sao_Paulo ou UTC |
Antes da análise, deve-se confirmar a codificação, a localização, o formato das datas e o separador decimal utilizados pela fonte.
CSV e XLSX são formatos comuns para armazenar dados tabulares.
| Característica | CSV | XLSX |
|---|---|---|
| Extensão | .csv |
.xlsx |
| Estrutura | Texto delimitado | Arquivo compactado do Excel |
| Número de tabelas | Uma por arquivo | Várias planilhas |
| Formatação visual | Não | Sim |
| Fórmulas | Não | Sim |
| Tipos preservados | Limitadamente | Parcialmente |
| Desempenho | Geralmente mais rápido | Geralmente mais lento |
| Compatibilidade | Muito alta | Dependente de software ou biblioteca |
| Pacotes comuns | readr |
readxl e openxlsx |
O R Base possui funções como read.csv() e
write.csv(). O pacote readr oferece funções
alternativas com comportamento consistente.
O pacote readxl é usado para leitura. O pacote
openxlsx permite leitura, escrita e formatação.
Use CSV quando:
Use XLSX quando:
O pacote haven permite importar e exportar arquivos
produzidos por programas estatísticos.
| Formato | Extensão | Função de leitura |
|---|---|---|
| SPSS | .sav |
read_sav() |
| Stata | .dta |
read_dta() |
| SAS | .sas7bdat |
read_sas() |
Esses arquivos podem conter metadados que não existem em um CSV, como:
Variáveis importadas podem utilizar a classe labelled.
Antes da análise, é necessário verificar se elas devem ser mantidas como
rotuladas ou convertidas para fatores.
RDS é um formato binário nativo do R usado para serializar e armazenar um único objeto.
Ele pode preservar:
O objeto carregado pode receber qualquer nome:
| Característica | RDS | RData |
|---|---|---|
| Função para salvar | saveRDS() |
save() |
| Função para carregar | readRDS() |
load() |
| Quantidade de objetos | Um | Um ou vários |
| Nome armazenado no arquivo | Não | Sim |
| Atribuição na leitura | Explícita | Automática |
Arquivos RDS são específicos do ecossistema R. Para interoperabilidade com outros sistemas, considere CSV, JSON ou Parquet.
O Tidyverse é uma coleção de pacotes para ciência de dados que compartilham princípios de organização, sintaxe e interoperabilidade.
Sua filosofia utiliza o conceito de dados arrumados (tidy data):
| Pacote | Finalidade |
|---|---|
dplyr |
Manipulação de linhas e colunas |
tidyr |
Organização e remodelagem |
ggplot2 |
Visualização |
readr |
Importação de arquivos de texto |
purrr |
Programação funcional |
stringr |
Manipulação de textos |
forcats |
Manipulação de fatores |
tibble |
Estruturas tabulares modernas |
O dplyr fornece funções conhecidas como
verbos, que tornam as transformações tabulares mais
legíveis.
| Função | Finalidade |
|---|---|
filter() |
Selecionar linhas |
select() |
Selecionar ou excluir colunas |
mutate() |
Criar ou modificar colunas |
arrange() |
Ordenar linhas |
summarise() |
Calcular medidas-resumo |
group_by() |
Agrupar observações |
|> ou
%>%)O pipe encaminha o resultado de uma operação para a função seguinte.
dados_filtrados <- base_dados |>
filter(ano == 2026) |>
group_by(categoria) |>
summarise(
media_valor = mean(valor, na.rm = TRUE),
.groups = "drop"
) |>
arrange(desc(media_valor))O pipe nativo |> está disponível nas versões atuais
do R. O operador %>% é fornecido pelo pacote
magrittr e carregado com o Tidyverse.
filter()Seleciona linhas com base em condições lógicas.
select()Seleciona ou exclui colunas.
Exclusão de uma coluna:
mutate()Cria ou modifica colunas.
arrange()Ordena as linhas.
Ordem decrescente:
summarise()Reduz várias observações a medidas-resumo.
Feather é um formato binário baseado no Apache Arrow e voltado à leitura e escrita rápida de dados tabulares.
É adequado para:
Principais funções do pacote arrow:
write_feather(): salva um objeto em formato
Feather;read_feather(): lê um arquivo Feather.O Feather é indicado para intercâmbio rápido. Para armazenamento analítico, particionamento e consulta de grandes volumes, o Parquet costuma ser mais apropriado.
Apache Parquet é um formato binário de armazenamento
colunar. No R, ele pode ser manipulado por meio do pacote
arrow.
dataset <- open_dataset(
"diretorio_dos_arquivos",
format = "parquet"
)
resultado <- dataset |>
select(id, categoria, valor) |>
filter(valor > 100) |>
collect()
collect()materializa o resultado no R. Antes disso, operações compatíveis podem ser executadas sem carregar todo o conjunto na memória.
| Característica | Parquet | CSV |
|---|---|---|
| Estrutura | Binária e colunar | Texto e linhas |
| Compactação | Alta | Não incorporada |
| Tipos de dados | Preservados | Inferidos na leitura |
| Leitura seletiva | Sim | Limitada |
| Leitura humana | Não | Sim |
| Grandes volumes | Mais adequado | Menos eficiente |
| Interoperabilidade | Alta | Muito alta |
Grandes conjuntos de dados podem ser distribuídos em vários arquivos Parquet e organizados em diretórios de partição.
Exemplos de variáveis de particionamento:
A função write_dataset() grava um conjunto particionado,
enquanto open_dataset() permite consultá-lo sem carregar
todos os arquivos na memória.
O particionamento permite que o mecanismo leia somente os arquivos relacionados ao filtro solicitado. Essa otimização é conhecida como partition pruning.
A variável escolhida para o particionamento deve:
JSON (JavaScript Object Notation) é um formato textual usado para representar e trocar dados entre sistemas.
É comum em:
No R, o pacote jsonlite converte dados entre JSON e
estruturas como listas e data frames.
Acesso aos elementos:
Para APIs que exigem autenticação, tratamento de erros ou parâmetros, faça a requisição com
httr2e depois processe a resposta.
| Característica | JSON | CSV | Parquet |
|---|---|---|---|
| Estrutura | Hierárquica | Tabular | Tabular e colunar |
| Formato | Texto | Texto | Binário |
| Dados aninhados | Sim | Não | Limitado pelo esquema |
| Leitura humana | Sim | Sim | Não |
| Uso comum | APIs | Intercâmbio simples | Processamento analítico |
O read.dbc é um pacote e função da linguagem R criado para importar diretamente arquivos no formato .dbc (arquivos .dbf comprimidos) utilizados pelo DATASUS e pela ANS para disponibilizar dados públicos de saúde, eliminando a necessidade de conversão manual prévia.Instalação e Uso BásicoInstale o pacote executando install.packages(“read.dbc”) no seu console R.Carregue o pacote com library(read.dbc).Leia o arquivo diretamente para um data frame usando dados <- read.dbc(“arquivo.dbc”).Como a Função FuncionaO arquivo .dbc é descomprimido automaticamente em um arquivo .dbf temporário no computador.A função usa rotinas internas para ler os dados convertidos diretamente para a memória do R como um data frame.É amplamente integrado a ferramentas de manipulação de dados em saúde pública, como o pacote microdatasus. # Referências
ALCOFORADO, Luciane Ferreira. Utilizando a linguagem R: conceitos, manipulação, visualização, modelagem e elaboração de relatórios. Rio de Janeiro: Alta Books, 2021. 367 p. Disponível em: https://altabooks.com.br/produto/utilizando-a-linguagem-r. Acesso em: 17 ago. 2026.
FIGUEIRA, Leonardo. Criando funções no R. Estatística é com R! Disponível em: http://www.estatisticacomr.uff.br/?p=224. Acesso em: 17 ago. 2026.
GROLEMUND, Garrett. Hands-on programming with R. 1. ed. Sebastopol: O’Reilly Media, 2014. Disponível em: https://rstudio-education.github.io/hopr/. Acesso em: 17 ago. 2026.
IBPAD. Curso de R. Disponível em: https://cdr.ibpad.com.br/. Acesso em: 17 ago. 2026.
R-HTA. R for Health Technology Assessment. Disponível em: https://r-hta.org/. Acesso em: 17 ago. 2026.
WICKHAM, Hadley. Advanced R. 1. ed. Boca Raton: CRC Press, 2014. Disponível em: http://adv-r.had.co.nz/. Acesso em: 17 ago. 2026.
WICKHAM, Hadley; GROLEMUND, Garrett. R for data science: import, tidy, transform, visualize, and model data. Sebastopol: O’Reilly Media, 2017. Disponível em: https://r4ds.had.co.nz/. Acesso em: 17 ago. 2026.