1 Introdução

Este tutorial tem como objetivo demonstrar, de forma prática e simplificada, a implementação de um modelo de transição de estados (Markov) para a comparação de custo-efetividade entre duas estratégias de saúde utilizando o pacote {heemod} no R.

Nota Importante: Este é um exemplo estritamente ilustrativo. Os parâmetros de eficácia, custos e utilidades utilizados foram criados para fins didáticos e não representam dados reais de uma tecnologia específica ou de uma condição de saúde real.

O foco aqui não está no resultado numérico em si, mas na superioridade do fluxo de trabalho:

  • Reprodutibilidade: Como o uso de scripts elimina a ambiguidade de planilhas complexas.

  • Auditabilidade: A facilidade de conferir premissas e fórmulas em um código centralizado.

  • Agilidade: A rapidez em visualizar a progressão da coorte e a fronteira de eficiência sem a necessidade de macros ou vínculos manuais exaustivos.

Abaixo, seguimos o passo a passo da construção do modelo, desde a definição dos parâmetros até a geração do ICER (Incremental Cost-Effectiveness Ratio).

2 O pacote {heemod}

O heemod (Health Economic Evaluation MODelling) Filipovic-Pierucci et al. (2016) é um dos pacotes mais robustos e populares da linguagem R para a área de Economia da Saúde. Ele foi desenvolvido especificamente para facilitar a criação, simulação e análise de modelos de Avaliação de Tecnologias em Saúde (ATS).

Diferente de uma planilha comum, o heemod organiza o modelo em camadas lógicas, o que o torna o padrão ouro para quem busca rigor científico Xin et al. (2022).

O que o heemod faz por você?

  • Modelos de Markov: Ele simplifica a criação de modelos de transição de estados, permitindo que você defina como os pacientes se movem entre diferentes condições de saúde ao longo do tempo.

  • Análise de Sensibilidade: Possui funções nativas para realizar tanto a Análise de Sensibilidade Determinística (DSA) quanto a Probabilística (PSA), essencial para lidar com incertezas nos dados.

  • Gestão de Custos e Utilidades: Permite aplicar taxas de desconto financeiro e de saúde de forma automática, garantindo que o cálculo do ICER (Razão de Custo-Efetividade Incremental) seja preciso.

  • Visualização de Dados: Gera automaticamente gráficos complexos, como o Markov Trace (evolução da coorte) e o Plano de Custo-Efetividade.

O pacote pode ser instalado e utilizado com os códigos a seguir:

# Instale o pacote digitando antes: install.packages("heemod")

# Carregue o pacote para uso dos scripts a seguir
library(heemod)

3 Definindo Parâmetros

No heemod, a primeira etapa é isolar todas as variáveis fundamentais. A função define_parameters() cria um ambiente dinâmico onde os valores podem ser referenciados por nomes intuitivos, facilitando a leitura e futuras atualizações.

Para ilustrar a implementação de parâmetros, imagine que queremos comparar o custo e efetividade de um tratamento novo em relação ao que já é utilizado para hipertensão arterial:

# 1. Definir Parâmetros

param <- define_parameters(
  rr = 0.927,    # Risco Relativo (Eficácia)
  dr = 0.00416,  # Taxa de decontos
  c0 = 148,      # Custo unitário do Tratamento padrão
  c1 = 1690      # Custo unitário do Tratamento novo
)

Diferente de amarrar valores em fórmulas, aqui estamos criando um “centro de controle”. Se a taxa de desconto ou os custos mudarem após uma revisão de literatura, você só precisa alterar este bloco. O heemod garantirá que essa mudança seja propagada por todo o modelo de Markov e nas análises de sensibilidade.

4 Definindo a Matriz de Transição

Após definir os parâmetros, precisamos descrever como os pacientes se movem entre os estados de saúde a cada ciclo. No heemod, utilizamos a função define_transition(). Fazemos isso por meio de uma matriz com as probabilidades de um paciente sair de um estado de saúde para o outro. Neste exemplo, vou usar 3 estados:

# Matriz de Transição para o Tratamento Padrão

mat_padrao <- define_transition(
  state_names = c("Estavel", "AVC", "Obito"),
  
  C,    0.05, 0.01, # Probabilidades a partir de Estavel
  0.03, C,    0.15, # Probabilidades a partir do AVC
  0,    0,    1     # Obito é um estado absortivo 
)

Um detalhe elegante aqui é o uso da letra C. Ela indica ao R que aquele valor é o complemento da linha, ou seja, o pacote calcula automaticamente a probabilidade de permanecer no mesmo estado para que a soma da linha seja sempre 100%.

Também devemos montar uma matriz de probabilidades para o novo tratamento. Aqui, em vez de digitar um novo número, aplicamos o parâmetro rr (Risco Relativo) diretamente na transição. Se o rr mudar lá no primeiro passo, esta matriz se atualiza sozinha.

# Matriz de Transição para o Tratamento Novo

mat_novo <- define_transition(
  state_names = c("Estavel", "AVC", "Obito"),
  
  C,    0.05 * rr, 0.01, # O Risco Relativo (rr) atua reduzindo a prob. de AVC
  0.03, C,         0.15, 
  0,    0,         1     
)

Você pode gerar um diagrama de estados e transições para você validar se a lógica do seu modelo está correta antes mesmo de rodar a simulação. É a transparência que o código oferece de forma instantânea.

# Visualiza os estados e transições do tratamento padrão

plot(mat_padrao)

# Visualiza os estados e transições do tratamento novo

plot(mat_novo)

5 Definindo os Estados de Saúde

Agora que temos os caminhos (matriz de transição), precisamos definir o que acontece com o paciente em cada estado. No heemod, usamos a função define_state() para atribuir os custos e as utilidades.

Um dos recursos mais poderosos aqui é o dispatch_strategy(). Ele permite que o modelo entenda que o custo no estado “Estável” depende de qual braço da estratégia o paciente está (Tratamento Padrão ou Novo), mantendo o código limpo e transparente.

## Define os Estados de Saúde

# Estado Estável: O que acontece quando o paciente está no estado estável

state_A <- define_state(
  cost = discount(100 + dispatch_strategy(
    trat_padrao = c0, # Custo c0 se for a estratégia padrão
    trat_novo   = c1  # Custo c1 se for a estratégia nova
  ), dr),
  utility = 0.73
)

# Estado AVC: Custos fixos de hospitalização, sequela e etc.

state_B <- define_state(
  cost = discount(2800, dr),
  utility = 0.57
)

# Estado Óbito: sem custos ou utilidade

state_C <- define_state(
  cost = 0,
  utility = 0
)

O que está acontecendo aqui?

  • Desconto Automático: A função discount() aplica a taxa dr que definimos lá no início. Você não precisa criar colunas estras de cálculo; o R aplica o desconto financeiro e de saúde ciclo a ciclo.
  • Inteligência de Estratégia: O dispatch_strategy() evita que você tenha que criar dois estados “A” diferentes. O modelo sabe que se ele estiver rodando o tratamento novo, deve buscar o valor de c1.
  • Legibilidade: É fácil ler que o estado B custa 2800 e tem uma utilidade de 0.57. Qualquer pessoa que revise seu código entende os pressupostos clínicos em segundos.

6 Definindo as Estratégias

Agora que temos os caminhos e os valores de cada estado, utilizamos a função define_strategy() para montar os nossos dois cenários de comparação.

Esta etapa é puramente organizacional: estamos dizendo ao heemod qual matriz de transição deve ser usada com quais estados de saúde para cada braço do estudo.

# Define as Estratégias de Comparação

# Estratégia 0: Tratamento Padrão

strat0 <- define_strategy(
  transition = mat_padrao,
  Estavel = state_A,
  AVC     = state_B,
  Obito   = state_C
)

# Estratégia 1: Novo Tratamento

strat1 <- define_strategy(
  transition = mat_novo,
  Estavel = state_A,
  AVC     = state_B,
  Obito   = state_C
)

Note que usamos os mesmos estados (state_A, state_B e state_C) para ambas as estratégias. A inteligência do heemod está em:

  1. Usar a matriz específica para cada grupo (aplicando o efeito do tratamento onde ele deve estar).

  2. Usar o dispatch_strategy que configuramos no passo anterior para aplicar o custo correto (c0 ou c1) automaticamente, dependendo de qual estratégia está sendo processada.

Isso elimina o risco de você atualizar o custo de uma complicação em uma aba do modelo e esquecer de atualizar na outra. Aqui, o dado é único, a fonte é a mesma, e o erro de digitação torna-se praticamente impossível.

7 Rodando a Análise de Custo-Efetividade

Finalmente, unimos tudo na função run_model(). É neste comando que o R realiza a simulação dos ciclos (neste caso, 120 meses para cobrir um horizonte de 10 anos) e calcula os resultados agregados de custo e efetividade.

# Rodando o Modelo de Custo-Efetividade

res_mod <- run_model(
  trat_padrao = strat0,
  trat_novo   = strat1,
  
  parameters = param,
  
  cycles = 120,  # 10 anos
  cost = cost,
  effect = utility
)

E podemos visualizar os resultados aqui:

# Imprime os resultados da análise

res_mod
## 2 strategies run for 120 cycles.
## 
## Initial state counts:
## 
## Estavel = 1000L
## AVC = 0L
## Obito = 0L
## 
## Counting method: 'life-table'.
## 
##  
## 
## Counting method: 'beginning'.
## 
##  
## 
## Counting method: 'end'.
## 
## Values:
## 
##                 cost  utility
## trat_padrao 17952279 16784.16
## trat_novo   46394373 17601.90
## 
## Efficiency frontier:
## 
## trat_padrao -> trat_novo
## 
## Differences:
## 
##           Cost Diff. Effect Diff.     ICER        Ref.
## trat_novo   28442.09    0.8177429 34781.22 trat_padrao

Na saída, podemos ver que o modelo começou com uma coorte de 1000 pessoas, todas no Estado Estável. Ninguém começou com AVC ou Óbito. Isso é importante para garantir que a comparação entre as duas estratégias seja justa desde o tempo zero.

Esta saída mostra o custo total e a utilidade total para a coorte inteira ao final dos 10 anos (120 ciclos):

  • trat_padrao: Custou aproximadamente 17,9 milhões e gerou 16,784 anos de vida com qualidade.
  • trat_novo: Custou aproximadamente 46,3 milhões e gerou 17,601 anos de vida com qualidade.

O que isso diz? O tratamento novo é claramente mais eficaz (gera mais utilidade), mas também é consideravelmente mais caro.

Diferenças e o ICER é a parte da saída em que a CONITEC ou qualquer gestor olharia primeiro:

  • Cost Diff. (28.442,09): Em média, o tratamento novo custa R$ 28.442,09 a mais por paciente do que o padrão ao longo dos 10 anos.
  • Effect Diff. (0,8177): O tratamento novo gera, em média, 0,81 anos de vida a mais (quase 10 meses de vida com saúde plena extra) por paciente.
  • ICER (34.781,22): Esta é a Razão de Custo-Efetividade Incremental. Para cada 1 ano de vida com qualidade (QALY) extra que você deseja ganhar ao migrar do tratamento padrão para o novo, o sistema de saúde precisará desembolsar R$ 34.781,22.

8 Gráficos da Análise de Custo-Efetividade

Os gráficos são fundamentais para transformar os números da tabela em uma narrativa visual compreensível. O primeiro gráfico é o Diagrama de Transição de Estados. Ele mostra como os 1000 pacientes se espalham pelos estados de saúde ao longo dos ciclos.

plot(res_mod, type = "counts")

O segundo gráfico é o Plano de Custo-Efetividade. Ele visualiza o ICER. A inclinação da linha que liga o tratamento padrão ao novo representa o custo de vida ganho. É a ferramenta definitiva para o tomador de decisão ver se o novo tratamento está dentro da zona de aceitabilidade financeira.

plot(res_mod, type = "ce")

9 Conclusão

A transição da modelagem de custo-efetividade do Excel para o R, utilizando pacotes como o heemod, representa um salto qualitativo na Avaliação de Tecnologias em Saúde (ATS) Xin et al. (2022). Ao longo deste tutorial, vimos que a programação não é apenas uma alternativa, mas uma solução para os gargalos de reprodutibilidade e transparência que as planilhas muitas vezes apresentam.

Dominar o heemodexige uma curva de aprendizado inicial, mas esse investimento é exponencial. Enquanto no Excel cada novo modelo parece um recomeço do zero, no R cada script se torna uma base que pode ser adaptada, compartilhada e validada por pares com total integridade científica.

Referências

Filipovic-Pierucci, A., Zarca, K., & Durand-Zaleski, I. (2016). Markov models for health economic evaluation modelling in r with the heemod package. Value in Health, 19(7), A369.
Xin, Y., Gray, E., Robles-Zurita, J. A., Haghpanahan, H., Heggie, R., Kohli-Lynch, C., Briggs, A., McAllister, D. A., Lawson, K. D., & Lewsey, J. (2022). From spreadsheets to script: Experiences from converting a scottish cardiovascular disease policy model into r. Applied Health Economics and Health Policy, 20(2), 149–158.