Avaliação de Indicadores Financeiros e Desempenho (2022-2024)
Author
Jonathan de sena e Rayanne Ferreira
Published
2025-04-29
1 Introdução
Esta análise compara o desempenho financeiro da CEMIG (Companhia Energética de Minas Gerais) e da CTEEP (Companhia de Transmissão de Energia Elétrica Paulista) entre 2022 e 2024.
Foram avaliados indicadores financeiros fundamentais, incluindo liquidez, rentabilidade, endividamento e eficiência operacional.
A análise apresenta médias ponderadas, notas finais para cada empresa, e visualizações comparativas geradas com ggplot2.
Note
Os dados foram extraídos dos arquivos dados_cemig.csv e dados_cteep.csv, com cálculos realizados em R.
2 Metodologia
2.1 Dados
Fonte: Balanços patrimoniais, demonstrações de resultados e fluxos de caixa de CEMIG e CTEEP disponibilizados no site da B3.
em EBITDA: EBITDA / Receita de Vendas : Eficiência operacional;
Grau de Endividamento: Dívida Bruta / Patrimônio Líquido : Estrutura de capital;
Composição do Endividamento: Passivo Circulante / Passivo Total : Perfil das dívidas.
2.3 Critérios
Média Ponderada: Pesos por ano (2024: 40%, 2023: 35%, 2022: 25%).
Nota Final: Ponderação dos indicadores com normalização:
maior é melhor para Liquidez, ROE, Margem EBITDA;
menor é melhor para Dívida Líquida/EBITDA, Grau e Composição de Endividamento.
Visualizações: Gráficos comparativos por indicador e médias ponderadas.
3 Cálculo dos índices contábeis
3.1 CEMIG
Code
# Carregar pacotes library(tidyverse)
Warning: pacote 'tidyverse' foi compilado no R versão 4.4.3
Warning: pacote 'readr' foi compilado no R versão 4.4.2
Warning: pacote 'dplyr' foi compilado no R versão 4.4.3
Warning: pacote 'lubridate' foi compilado no R versão 4.4.3
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.4 ✔ readr 2.1.5
✔ forcats 1.0.0 ✔ stringr 1.5.1
✔ ggplot2 3.5.1 ✔ tibble 3.2.1
✔ lubridate 1.9.4 ✔ tidyr 1.3.1
✔ purrr 1.0.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
Code
library(dplyr)library(ggplot2)# 1. Análise da empresa CEMIG - Companhia Energética de Minas Gerais -------cemig <-read.csv("dados_cemig.csv")# 1.1 Criando as variáveis para o cálculo dos índices da CEMIG 2022 a 2024 -----## Dados do Balanço Patrimonial Ativoativo_circulante_cemig <- cemig |>filter(Descrição =="Ativo Circulante") |>select(3:5) |>as.numeric()caixa_equivalentes_cemig <- cemig |>filter(Descrição =="Caixa e Equivalentes de Caixa") |>select(3:5) |>as.numeric()ativo_total_cemig <- cemig |>filter(Descrição =="Ativo Total") |>select(3:5) |>as.numeric()## Dados do Balanço Patrimonial Passivopassivo_circulante_cemig <- cemig |>filter(Descrição =="Passivo Circulante") |>select(3:5) |>as.numeric()passivo_nao_circulante_cemig <- cemig |>filter(Descrição =="Passivo Não Circulante") |>select(3:5) |>as.numeric()passivo_total_cemig <- cemig |>filter(Descrição =="Passivo Total") |>select(3:5) |>as.numeric()patrimonio_liquido_cemig <- cemig |>filter(Descrição =="Patrimônio Líquido Consolidado") |>select(3:5) |>as.numeric()divida_bruta_cemig <- cemig |>filter(Conta %in%c(# Passivo Circulante"02.01.04", # Empréstimos e Financiamentos (total circulante)"2.01.04.01", # Empréstimos e Financiamentos "2.01.04.02", # Debêntures (circulante)"2.01.04.03", # Financiamento por Arrendamento (circulante)# Passivo Não Circulante"02.02.01", # Empréstimos e Financiamentos (total não circulante)"2.02.01.01", # Empréstimos e Financiamentos"2.02.01.02", # Debêntures (não circulante)"2.02.01.03"# Financiamento por Arrendamento (não circulante) )) |>summarise(across(3:5, sum, na.rm =TRUE)) |>as.numeric()
Warning: There was 1 warning in `summarise()`.
ℹ In argument: `across(3:5, sum, na.rm = TRUE)`.
Caused by warning:
! The `...` argument of `across()` is deprecated as of dplyr 1.1.0.
Supply arguments directly to `.fns` through an anonymous function instead.
# Previously
across(a:b, mean, na.rm = TRUE)
# Now
across(a:b, \(x) mean(x, na.rm = TRUE))
Code
## Dados da Demonstração de Resultados (DRE)receita_venda_cemig <- cemig |>filter(Descrição =="Receita de Venda de Bens e/ou Serviços") |>select(3:5)|>as.numeric()lucro_liquido_cemig <- cemig |>filter(Descrição =="Lucro/Prejuízo Consolidado do Período") |>slice(1) |>select(3:5) |>as.numeric()resultado_bruto_cemig <- cemig |>filter(Descrição =="Resultado Bruto") |>select(3:5) |>as.numeric()resultado_financeiro_cemig <- cemig |>filter(Descrição =="Resultado Financeiro") |>select(3:5) |>as.numeric()## Dados da Demonstração do Fluxo de Caixadepreciacao_amortizacao_cemig <- cemig |>filter(Descrição =="Depreciação e Amortização") |>select(3:5) |>as.numeric()
# 2. Análise da empresa CTEEP - Companhia de Transmissão de Energia Elétrica Paulista----cteep <-read.csv("dados_cteep.csv")# 2.1 Criando as variáveis para o cálculo dos índices da CTEEP 2022 a 2024 -----## Dados do Balanço Patrimonial Ativoativo_circulante_cteep <- cteep |>filter(Descrição =="Ativo Circulante") |>select(3:5) |>as.numeric()caixa_equivalentes_cteep <- cteep |>filter(Descrição =="Caixa e Equivalentes de Caixa") |>select(3:5) |>as.numeric()ativo_total_cteep <- cteep |>filter(Descrição =="Ativo Total") |>select(3:5) |>as.numeric()## Dados do Balanço Patrimonial Passivopassivo_circulante_cteep <- cteep |>filter(Descrição =="Passivo Circulante") |>select(3:5) |>as.numeric()passivo_nao_circulante_cteep <- cteep |>filter(Descrição =="Passivo Não Circulante") |>select(3:5) |>as.numeric()passivo_total_cteep <- cteep |>filter(Descrição =="Passivo Total") |>select(3:5) |>as.numeric()patrimonio_liquido_cteep <- cteep |>filter(Descrição =="Patrimônio Líquido Consolidado") |>select(3:5) |>as.numeric()## Cálculo robusto da Dívida Bruta incluindo TODOS os componentes relevantesdivida_bruta_cteep <- cteep |>filter(Conta %in%c(# Passivo Circulante"02.01.04", # Empréstimos e Financiamentos (total circulante)"2.01.04.01", # Empréstimos e Financiamentos "2.01.04.02", # Debêntures (circulante)"2.01.04.03", # Financiamento por Arrendamento (circulante)# Passivo Não Circulante"02.02.01", # Empréstimos e Financiamentos (total não circulante)"2.02.01.01", # Empréstimos e Financiamentos "2.02.01.02", # Debêntures (não circulante)"2.02.01.03"# Financiamento por Arrendamento (não circulante) )) |>summarise(across(3:5, sum, na.rm =TRUE)) |>as.numeric()## Dados da Demonstração de Resultados (DRE)receita_venda_cteep <- cteep |>filter(Descrição =="Receita de Venda de Bens e/ou Serviços") |>select(3:5)|>as.numeric()lucro_liquido_cteep <- cteep |>filter(Descrição =="Lucro/Prejuízo Consolidado do Período") |>slice(1) |>select(3:5) |>as.numeric()resultado_bruto_cteep <- cteep |>filter(Descrição =="Resultado Bruto") |>select(3:5) |>as.numeric()resultado_financeiro_cteep <- cteep |>filter(Descrição =="Resultado Financeiro") |>select(3:5) |>as.numeric()## Dados da Demonstração do Fluxo de Caixadepreciacao_amortizacao_cteep <- cteep |>filter(Descrição =="Depreciação e Amortização") |>select(3:5) |>as.numeric()# 2.2 Cálculo das variáveis intermediárias --------------------------------------divida_liquida_cteep <- divida_bruta_cteep - caixa_equivalentes_cteepebitda_cteep <- resultado_bruto_cteep + depreciacao_amortizacao_cteep - resultado_financeiro_cteep# 2.3 Cálculo dos indicadores finais -------------------------------------------indicadores_cteep <-data.frame(Ano =c(2024, 2023, 2022),# Indicadoresliquidez_corrente_cteep = ativo_circulante_cteep / passivo_circulante_cteep,roe_cteep = lucro_liquido_cteep / patrimonio_liquido_cteep,divida_liquida_ebitda_cteep = divida_liquida_cteep / ebitda_cteep,margem_ebitda_cteep = ebitda_cteep / receita_venda_cteep,grau_endividamento_cteep = divida_bruta_cteep / patrimonio_liquido_cteep,composicao_endividamento_cteep = passivo_circulante_cteep / passivo_total_cteep)
4 Análise comparativa dos indicadores
Code
#| fig-width: 8 # Largura em polegadas#| fig-height: 5 # Altura em polegadas#| out-width: 50% # Redimensiona a saída (relativo ao slide)# 3. Gráficos - Análise comparativa dos indicadores CEMIG x CTEEP --------# 3.1 Configuração de cores -----cores_cemig <-c("#1f77b4", "#4292c6", "#6baed6") # Tons de azul (2024, 2023, 2022)cores_cteep <-c("#238b45", "#41ab5d", "#74c476") # Tons de verde (2024, 2023, 2022)# 3.2 Função para criar os valores dos gráficos comparativos ----- plot_comparativo <-function(indicador_cemig, indicador_cteep, titulo, eixo_y) {# Criar dataframe para CEMIG df_cemig <-data.frame(Ano =factor(c(2024, 2023, 2022), levels =c(2024, 2023, 2022)),Valor = indicador_cemig,Empresa ="CEMIG" )# Criar dataframe para CTEEP df_cteep <-data.frame(Ano =factor(c(2024, 2023, 2022), levels =c(2024, 2023, 2022)),Valor = indicador_cteep,Empresa ="CTEEP" )# Combinar os dados df_plot <-rbind(df_cemig, df_cteep)# Garantir ordem correta das empresas df_plot$Empresa <-factor(df_plot$Empresa, levels =c("CEMIG", "CTEEP"))ggplot(df_plot, aes(x = Ano, y = Valor, fill =interaction(Empresa, Ano))) +geom_bar(stat ="identity", position =position_dodge(width =0.8), width =0.7) +scale_fill_manual(values =c(# Cores CEMIG (2024, 2023, 2022)"CEMIG.2024"= cores_cemig[1],"CEMIG.2023"= cores_cemig[2],"CEMIG.2022"= cores_cemig[3],# Cores CTEEP (2024, 2023, 2022)"CTEEP.2024"= cores_cteep[1],"CTEEP.2023"= cores_cteep[2],"CTEEP.2022"= cores_cteep[3] )) +facet_wrap(~Empresa, ncol =2) +labs(title = titulo, x ="Ano", y = eixo_y) +theme_minimal() +theme(plot.title =element_text(hjust =0.5, face ="bold", size =14),axis.title =element_text(size =12),axis.text =element_text(size =10),strip.text =element_text(face ="bold", size =12),legend.position ="none" ) +scale_y_continuous(expand =expansion(mult =c(0, 0.1))) # Ajuste do eixo Y}# 3.3 Criar os gráficos para cada indicador ------# Liquidez Correnteplot_comparativo(indicadores_cemig$liquidez_corrente_cemig, indicadores_cteep$liquidez_corrente_cteep,"Comparativo de Liquidez Corrente (2022-2024)","Índice")
Code
# ROEplot_comparativo(indicadores_cemig$roe_cemig, indicadores_cteep$roe_cteep,"Comparativo de Return on Equity - ROE (2022-2024)","Índice")
Code
# Dívida Líquida/EBITDAplot_comparativo(indicadores_cemig$divida_liquida_ebitda_cemig, indicadores_cteep$divida_liquida_ebitda_cteep,"Comparativo de Dívida Líquida/EBITDA (2022-2024)","Razão")
Code
# Margem EBITDAplot_comparativo(indicadores_cemig$margem_ebitda_cemig, indicadores_cteep$margem_ebitda_cteep,"Comparativo de Margem EBITDA (2022-2024)","Percentual")
Code
# Grau de Endividamentoplot_comparativo(indicadores_cemig$grau_endividamento_cemig, indicadores_cteep$grau_endividamento_cteep,"Comparativo de Grau de Endividamento (2022-2024)","Razão")
Code
# Composição do Endividamentoplot_comparativo(indicadores_cemig$composicao_endividamento_cemig, indicadores_cteep$composicao_endividamento_cteep,"Comparativo de Composição do Endividamento (2022-2024)","Percentual")
5 Cálculo da nota final
Nesta etapa, calculamos uma média que atribui maior importância aos anos mais recentes, refletindo a premissa de que dados recentes são mais relevantes para análise:
Metodologia:
Pesos temporais:
- 2024: 40% (ano mais recente)
- 2023: 35%
- 2022: 25% (ano mais antigo)
Fórmula: Média Ponderada = Σ(valor_ano * peso_ano)
Implementação no Código:
Define-se um vetor de pesos (pesos) na ordem cronológica inversa
A função calcular_media_ponderada() multiplica cada valor pelo seu peso correspondente e soma os resultados
across(where(is.numeric)) aplica o cálculo a todas as colunas numéricas do dataframe
5.1 Critérios para ranquear os índices
A pontuação final combina múltiplos indicadores financeiros com pesos pré-definidos, seguindo práticas de análise fundamentalista:
Critérios e Pesos:
Indicador
Peso
Interpretação
Dívida líquida/EBITDA
25%
Saúde financeira (menor = melhor)
Margem EBITDA
20%
Eficiência operacional
Roe
20%
Retorno sobre patrimônio
Liquidez Corrente
15%
Capacidade de pagamento
Grau de Endividamento
10%
Risco financeiro
Composição do Endividamento
10%
Perfil de dívidas
Processo em 3 Etapas:
Normalização:
Padroniza os valores entre 0 e 1 usando normalizar()
Indicadores onde menor é melhor (como endividamento) são invertidos (inverter = TRUE)
Aplicação de Pesos:
Cada indicador normalizado é multiplicado por seu peso correspondente
Somatório:
A nota final é a soma ponderada de todos os indicadores
CEMIG:
Code
# 1.4 Calculando a média ponderada por ANO --------------------------------------# Definir os pesos para cada ano na ordem correspondente (2024, 2023, 2022)pesos <-c(0.40, 0.35, 0.25)# Função para calcular média ponderadacalcular_media_ponderada <-function(valores) {sum(valores * pesos) }# Calcular a média ponderada apenas nas colunas numéricasmedias_ponderadas_ano_cemig <- indicadores_cemig |>summarise(across(where(is.numeric), calcular_media_ponderada)) # 1.5 Calculando a nota final ponderando os indicadores (seguindo a análise fundamentalista) ----------------# Definir pesos para cada indicadorpesos_indicadores <-c(divida_liquida_ebitda_cemig =0.25,margem_ebitda_cemig =0.20,roe_cemig =0.20,liquidez_corrente_cemig =0.15,grau_endividamento_cemig =0.10,composicao_endividamento_cemig =0.10)# Função de normalização com inversão para indicadores onde menor é melhornormalizar <-function(x, inverter =FALSE) {if (inverter) {1- ((x -min(x)) / (max(x) -min(x))) # Inverte a escala para que menor = melhor } else { (x -min(x)) / (max(x) -min(x)) # Normal padrão para maior = melhor }}# Calcular nota final com normalização corretanota_final_cemig <- indicadores_cemig |>mutate(# Indicadores onde MAIOR é melhorliquidez_corrente_cemig =normalizar(liquidez_corrente_cemig),roe_cemig =normalizar(roe_cemig),margem_ebitda_cemig =normalizar(margem_ebitda_cemig),# Indicadores onde MENOR é melhor (inverter = TRUE)divida_liquida_ebitda_cemig =normalizar(divida_liquida_ebitda_cemig, inverter =TRUE),grau_endividamento_cemig =normalizar(grau_endividamento_cemig, inverter =TRUE),composicao_endividamento_cemig =normalizar(composicao_endividamento_cemig, inverter =TRUE) ) |>summarise(Ano ="Nota Final",Nota =sum( divida_liquida_ebitda_cemig * pesos_indicadores["divida_liquida_ebitda_cemig"], margem_ebitda_cemig * pesos_indicadores["margem_ebitda_cemig"], roe_cemig * pesos_indicadores["roe_cemig"], liquidez_corrente_cemig * pesos_indicadores["liquidez_corrente_cemig"], grau_endividamento_cemig * pesos_indicadores["grau_endividamento_cemig"], composicao_endividamento_cemig * pesos_indicadores["composicao_endividamento_cemig"] ),.groups ='drop' )# Visualizar resultadoprint("Nota final CEMIG")
[1] "Nota final CEMIG"
Code
print(nota_final_cemig)
Ano Nota
1 Nota Final 1.459683
CTEEP:
Code
# 2.4 Calculando a média ponderada por ANO --------------------------------------# Definir os pesos para cada ano na ordem correspondente (2024, 2023, 2022)pesos <-c(0.40, 0.35, 0.25)# Função para calcular média ponderadacalcular_media_ponderada <-function(valores) {sum(valores * pesos) }# Calcular a média ponderada apenas nas colunas numéricasmedias_ponderadas_ano_cteep <- indicadores_cteep |>summarise(across(where(is.numeric), calcular_media_ponderada)) # 2.5 Calculando a nota final ponderando os indicadores (seguindo a análise fundamentalista) ----------------# Definir pesos para cada indicadorpesos_indicadores <-c(divida_liquida_ebitda_cteep =0.25,margem_ebitda_cteep =0.20,roe_cteep =0.20,liquidez_corrente_cteep =0.15,grau_endividamento_cteep =0.10,composicao_endividamento_cteep =0.10)# Função de normalização com inversão para indicadores onde menor é melhornormalizar <-function(x, inverter =FALSE) {if (inverter) {1- ((x -min(x)) / (max(x) -min(x))) # Inverte a escala para que menor = melhor } else { (x -min(x)) / (max(x) -min(x)) # Normal padrão para maior = melhor }}# Calcular nota final com normalização corretanota_final_cteep <- indicadores_cteep |>mutate(# Indicadores onde MAIOR é melhorliquidez_corrente_cteep =normalizar(liquidez_corrente_cteep),roe_cteep =normalizar(roe_cteep),margem_ebitda_cteep =normalizar(margem_ebitda_cteep),# Indicadores onde MENOR é melhor (inverter = TRUE)divida_liquida_ebitda_cteep =normalizar(divida_liquida_ebitda_cteep, inverter =TRUE),grau_endividamento_cteep =normalizar(grau_endividamento_cteep, inverter =TRUE),composicao_endividamento_cteep =normalizar(composicao_endividamento_cteep, inverter =TRUE) ) |>summarise(Ano ="Nota Final",Nota =sum( divida_liquida_ebitda_cteep * pesos_indicadores["divida_liquida_ebitda_cteep"], margem_ebitda_cteep * pesos_indicadores["margem_ebitda_cteep"], roe_cteep * pesos_indicadores["roe_cteep"], liquidez_corrente_cteep * pesos_indicadores["liquidez_corrente_cteep"], grau_endividamento_cteep * pesos_indicadores["grau_endividamento_cteep"], composicao_endividamento_cteep * pesos_indicadores["composicao_endividamento_cteep"] ),.groups ='drop' )print("Nota final CTEEP")
[1] "Nota final CTEEP"
Code
print(nota_final_cteep)
Ano Nota
1 Nota Final 1.604329
6 Análise comparativa nota final ponderada
Code
# 4. Gráfico comparativo média ponderada dos indicadores CEMIG x CTEEP ----# Transformando as médias ponderadas em data frames com uma coluna de empresacemig_df <- medias_ponderadas_ano_cemig |>select(-Ano) |># Remove a coluna Anoas.data.frame() |>mutate(Empresa ="CEMIG") |>rename_with(~str_remove(., "_cemig"))cteep_df <- medias_ponderadas_ano_cteep |>select(-Ano) |># Remove a coluna Anoas.data.frame() |>mutate(Empresa ="CTEEP") |>rename_with(~str_remove(., "_cteep"))# Combinar os dadosdados_comparativos <-bind_rows(cemig_df, cteep_df) |>pivot_longer(cols =-Empresa,names_to ="Indicador",values_to ="Valor" ) |>mutate(Indicador =case_when( Indicador =="liquidez_corrente"~"Liquidez Corrente", Indicador =="roe"~"ROE", Indicador =="divida_liquida_ebitda"~"Dívida Líquida/EBITDA", Indicador =="margem_ebitda"~"Margem EBITDA", Indicador =="grau_endividamento"~"Grau de Endividamento", Indicador =="composicao_endividamento"~"Composição Endividamento",TRUE~ Indicador ))# Criar o gráfico comparativoggplot(dados_comparativos, aes(x = Indicador, y = Valor, fill = Empresa)) +geom_bar(stat ="identity", position =position_dodge(), width =0.7) +scale_fill_manual(values =c("CEMIG"="#1f77b4", "CTEEP"="#238b45")) +labs(title ="Comparação de Indicadores Financeiros - Médias Ponderadas",subtitle ="CEMIG x CTEEP",x ="Indicadores",y ="Valor",fill ="Empresa" ) +theme_minimal() +theme(axis.text.x =element_text(angle =45, hjust =1),plot.title =element_text(hjust =0.5, face ="bold"),plot.subtitle =element_text(hjust =0.5),legend.position ="top" ) +scale_y_continuous(labels = scales::comma) +geom_text(aes(label =round(Valor, 2)),position =position_dodge(width =0.7),vjust =-0.5,size =3 )
7 Resultados
Os resultados demonstram que o programa desenvolvido automatiza a avaliação fundamentalista de empresas, transformando dados contábeis brutos em pontuações comparáveis. No exemplo analisado, a CTEEP obteve nota final de 1.6, enquanto a CEMIG alcançou 1.46.
Esta abordagem possibilita:
Padronizar critérios: Elimina subjetividade ao aplicar pesos e normalizações matemáticas;
Agilizar decisões: Compara empresas em segundos, mesmo com dados multi-anuais;
Identificar trade-offs: Gráficos side-by-side revelam pontos fortes e fracos relativos (ex: CTEEP tem melhor rentabilidade, mas CEMIG mostra menor risco financeiro);
Adaptar-se a diferentes contextos: Os pesos dos indicadores podem ser ajustados para setores específicos (ex: utilities vs. varejo).
Source Code
---------------------------------------------------------------------------------------------------------------------------------------------------title: "Análise Financeira Comparativa: CEMIG x CTEEP "subtitle: "Avaliação de Indicadores Financeiros e Desempenho (2022-2024)"author: "Jonathan de sena e Rayanne Ferreira"date: "`r Sys.Date()`"format: html: theme: cosmo toc: true toc-depth: 2 number-sections: true code-fold: true code-tools: true page-layout: full sidebar: style: "docked" contents: auto---# Introdução {style="margin-top: 0;"}Esta análise compara o desempenho financeiro da **CEMIG** (Companhia Energética de Minas Gerais) e da **CTEEP** (Companhia de Transmissão de Energia Elétrica Paulista) entre 2022 e 2024.Foram avaliados indicadores financeiros fundamentais, incluindo liquidez, rentabilidade, endividamento e eficiência operacional.A análise apresenta médias ponderadas, notas finais para cada empresa, e visualizações comparativas geradas com `ggplot2`.::: callout-noteOs dados foram extraídos dos arquivos `dados_cemig.csv` e `dados_cteep.csv`, com cálculos realizados em R.:::# Metodologia## Dados- **Fonte**: Balanços patrimoniais, demonstrações de resultados e fluxos de caixa de CEMIG e CTEEP disponibilizados no site da B3.- **Período**: 2022 a 2024.- **Arquivos**: `dados_cemig.csv` e `dados_cteep.csv`.## Indicadores Calculados- **Liquidez Corrente**: Ativo Circulante / Passivo Circulante : Saúde financeira de curto prazo.- **ROE**: Lucro Líquido / Patrimônio Líquido : Retorno sobre o patrimônio;- **Dívida Líquida/EBITDA**: (Dívida Bruta - Caixa) / EBITDA : Capacidade de pagamento;- **em EBITDA**: EBITDA / Receita de Vendas : Eficiência operacional;- **Grau de Endividamento**: Dívida Bruta / Patrimônio Líquido : Estrutura de capital;- **Composição do Endividamento**: Passivo Circulante / Passivo Total : Perfil das dívidas.## Critérios - **Média Ponderada**: Pesos por ano (2024: 40%, 2023: 35%, 2022: 25%).- **Nota Final**: Ponderação dos indicadores com normalização: - maior é melhor para Liquidez, ROE, Margem EBITDA; - menor é melhor para Dívida Líquida/EBITDA, Grau e Composição de Endividamento.- **Visualizações**: Gráficos comparativos por indicador e médias ponderadas.# Cálculo dos índices contábeis## CEMIG```{r}# Carregar pacotes library(tidyverse)library(dplyr)library(ggplot2)# 1. Análise da empresa CEMIG - Companhia Energética de Minas Gerais -------cemig <-read.csv("dados_cemig.csv")# 1.1 Criando as variáveis para o cálculo dos índices da CEMIG 2022 a 2024 -----## Dados do Balanço Patrimonial Ativoativo_circulante_cemig <- cemig |>filter(Descrição =="Ativo Circulante") |>select(3:5) |>as.numeric()caixa_equivalentes_cemig <- cemig |>filter(Descrição =="Caixa e Equivalentes de Caixa") |>select(3:5) |>as.numeric()ativo_total_cemig <- cemig |>filter(Descrição =="Ativo Total") |>select(3:5) |>as.numeric()## Dados do Balanço Patrimonial Passivopassivo_circulante_cemig <- cemig |>filter(Descrição =="Passivo Circulante") |>select(3:5) |>as.numeric()passivo_nao_circulante_cemig <- cemig |>filter(Descrição =="Passivo Não Circulante") |>select(3:5) |>as.numeric()passivo_total_cemig <- cemig |>filter(Descrição =="Passivo Total") |>select(3:5) |>as.numeric()patrimonio_liquido_cemig <- cemig |>filter(Descrição =="Patrimônio Líquido Consolidado") |>select(3:5) |>as.numeric()divida_bruta_cemig <- cemig |>filter(Conta %in%c(# Passivo Circulante"02.01.04", # Empréstimos e Financiamentos (total circulante)"2.01.04.01", # Empréstimos e Financiamentos "2.01.04.02", # Debêntures (circulante)"2.01.04.03", # Financiamento por Arrendamento (circulante)# Passivo Não Circulante"02.02.01", # Empréstimos e Financiamentos (total não circulante)"2.02.01.01", # Empréstimos e Financiamentos"2.02.01.02", # Debêntures (não circulante)"2.02.01.03"# Financiamento por Arrendamento (não circulante) )) |>summarise(across(3:5, sum, na.rm =TRUE)) |>as.numeric()## Dados da Demonstração de Resultados (DRE)receita_venda_cemig <- cemig |>filter(Descrição =="Receita de Venda de Bens e/ou Serviços") |>select(3:5)|>as.numeric()lucro_liquido_cemig <- cemig |>filter(Descrição =="Lucro/Prejuízo Consolidado do Período") |>slice(1) |>select(3:5) |>as.numeric()resultado_bruto_cemig <- cemig |>filter(Descrição =="Resultado Bruto") |>select(3:5) |>as.numeric()resultado_financeiro_cemig <- cemig |>filter(Descrição =="Resultado Financeiro") |>select(3:5) |>as.numeric()## Dados da Demonstração do Fluxo de Caixadepreciacao_amortizacao_cemig <- cemig |>filter(Descrição =="Depreciação e Amortização") |>select(3:5) |>as.numeric()```Variáveis intermediárias```{r}# 1.2 Cálculo das variáveis intermediárias --------------------------------------divida_liquida_cemig <- divida_bruta_cemig - caixa_equivalentes_cemigebitda_cemig <- resultado_bruto_cemig + depreciacao_amortizacao_cemig - resultado_financeiro_cemig```Indicadores finais```{r}# 1.3 Cálculo dos indicadores finais -------------------------------------------indicadores_cemig <-data.frame(Ano =c(2024, 2023, 2022),# Indicadoresliquidez_corrente_cemig = ativo_circulante_cemig / passivo_circulante_cemig,roe_cemig = lucro_liquido_cemig / patrimonio_liquido_cemig,divida_liquida_ebitda_cemig = divida_liquida_cemig / ebitda_cemig,margem_ebitda_cemig = ebitda_cemig / receita_venda_cemig,grau_endividamento_cemig = divida_bruta_cemig / patrimonio_liquido_cemig,composicao_endividamento_cemig = passivo_circulante_cemig / passivo_total_cemig)```## CTEEP```{r}# 2. Análise da empresa CTEEP - Companhia de Transmissão de Energia Elétrica Paulista----cteep <-read.csv("dados_cteep.csv")# 2.1 Criando as variáveis para o cálculo dos índices da CTEEP 2022 a 2024 -----## Dados do Balanço Patrimonial Ativoativo_circulante_cteep <- cteep |>filter(Descrição =="Ativo Circulante") |>select(3:5) |>as.numeric()caixa_equivalentes_cteep <- cteep |>filter(Descrição =="Caixa e Equivalentes de Caixa") |>select(3:5) |>as.numeric()ativo_total_cteep <- cteep |>filter(Descrição =="Ativo Total") |>select(3:5) |>as.numeric()## Dados do Balanço Patrimonial Passivopassivo_circulante_cteep <- cteep |>filter(Descrição =="Passivo Circulante") |>select(3:5) |>as.numeric()passivo_nao_circulante_cteep <- cteep |>filter(Descrição =="Passivo Não Circulante") |>select(3:5) |>as.numeric()passivo_total_cteep <- cteep |>filter(Descrição =="Passivo Total") |>select(3:5) |>as.numeric()patrimonio_liquido_cteep <- cteep |>filter(Descrição =="Patrimônio Líquido Consolidado") |>select(3:5) |>as.numeric()## Cálculo robusto da Dívida Bruta incluindo TODOS os componentes relevantesdivida_bruta_cteep <- cteep |>filter(Conta %in%c(# Passivo Circulante"02.01.04", # Empréstimos e Financiamentos (total circulante)"2.01.04.01", # Empréstimos e Financiamentos "2.01.04.02", # Debêntures (circulante)"2.01.04.03", # Financiamento por Arrendamento (circulante)# Passivo Não Circulante"02.02.01", # Empréstimos e Financiamentos (total não circulante)"2.02.01.01", # Empréstimos e Financiamentos "2.02.01.02", # Debêntures (não circulante)"2.02.01.03"# Financiamento por Arrendamento (não circulante) )) |>summarise(across(3:5, sum, na.rm =TRUE)) |>as.numeric()## Dados da Demonstração de Resultados (DRE)receita_venda_cteep <- cteep |>filter(Descrição =="Receita de Venda de Bens e/ou Serviços") |>select(3:5)|>as.numeric()lucro_liquido_cteep <- cteep |>filter(Descrição =="Lucro/Prejuízo Consolidado do Período") |>slice(1) |>select(3:5) |>as.numeric()resultado_bruto_cteep <- cteep |>filter(Descrição =="Resultado Bruto") |>select(3:5) |>as.numeric()resultado_financeiro_cteep <- cteep |>filter(Descrição =="Resultado Financeiro") |>select(3:5) |>as.numeric()## Dados da Demonstração do Fluxo de Caixadepreciacao_amortizacao_cteep <- cteep |>filter(Descrição =="Depreciação e Amortização") |>select(3:5) |>as.numeric()# 2.2 Cálculo das variáveis intermediárias --------------------------------------divida_liquida_cteep <- divida_bruta_cteep - caixa_equivalentes_cteepebitda_cteep <- resultado_bruto_cteep + depreciacao_amortizacao_cteep - resultado_financeiro_cteep# 2.3 Cálculo dos indicadores finais -------------------------------------------indicadores_cteep <-data.frame(Ano =c(2024, 2023, 2022),# Indicadoresliquidez_corrente_cteep = ativo_circulante_cteep / passivo_circulante_cteep,roe_cteep = lucro_liquido_cteep / patrimonio_liquido_cteep,divida_liquida_ebitda_cteep = divida_liquida_cteep / ebitda_cteep,margem_ebitda_cteep = ebitda_cteep / receita_venda_cteep,grau_endividamento_cteep = divida_bruta_cteep / patrimonio_liquido_cteep,composicao_endividamento_cteep = passivo_circulante_cteep / passivo_total_cteep)```# Análise comparativa dos indicadores ```{r}#| fig-width: 8 # Largura em polegadas#| fig-height: 5 # Altura em polegadas#| out-width: 50% # Redimensiona a saída (relativo ao slide)# 3. Gráficos - Análise comparativa dos indicadores CEMIG x CTEEP --------# 3.1 Configuração de cores -----cores_cemig <-c("#1f77b4", "#4292c6", "#6baed6") # Tons de azul (2024, 2023, 2022)cores_cteep <-c("#238b45", "#41ab5d", "#74c476") # Tons de verde (2024, 2023, 2022)# 3.2 Função para criar os valores dos gráficos comparativos ----- plot_comparativo <-function(indicador_cemig, indicador_cteep, titulo, eixo_y) {# Criar dataframe para CEMIG df_cemig <-data.frame(Ano =factor(c(2024, 2023, 2022), levels =c(2024, 2023, 2022)),Valor = indicador_cemig,Empresa ="CEMIG" )# Criar dataframe para CTEEP df_cteep <-data.frame(Ano =factor(c(2024, 2023, 2022), levels =c(2024, 2023, 2022)),Valor = indicador_cteep,Empresa ="CTEEP" )# Combinar os dados df_plot <-rbind(df_cemig, df_cteep)# Garantir ordem correta das empresas df_plot$Empresa <-factor(df_plot$Empresa, levels =c("CEMIG", "CTEEP"))ggplot(df_plot, aes(x = Ano, y = Valor, fill =interaction(Empresa, Ano))) +geom_bar(stat ="identity", position =position_dodge(width =0.8), width =0.7) +scale_fill_manual(values =c(# Cores CEMIG (2024, 2023, 2022)"CEMIG.2024"= cores_cemig[1],"CEMIG.2023"= cores_cemig[2],"CEMIG.2022"= cores_cemig[3],# Cores CTEEP (2024, 2023, 2022)"CTEEP.2024"= cores_cteep[1],"CTEEP.2023"= cores_cteep[2],"CTEEP.2022"= cores_cteep[3] )) +facet_wrap(~Empresa, ncol =2) +labs(title = titulo, x ="Ano", y = eixo_y) +theme_minimal() +theme(plot.title =element_text(hjust =0.5, face ="bold", size =14),axis.title =element_text(size =12),axis.text =element_text(size =10),strip.text =element_text(face ="bold", size =12),legend.position ="none" ) +scale_y_continuous(expand =expansion(mult =c(0, 0.1))) # Ajuste do eixo Y}# 3.3 Criar os gráficos para cada indicador ------# Liquidez Correnteplot_comparativo(indicadores_cemig$liquidez_corrente_cemig, indicadores_cteep$liquidez_corrente_cteep,"Comparativo de Liquidez Corrente (2022-2024)","Índice")# ROEplot_comparativo(indicadores_cemig$roe_cemig, indicadores_cteep$roe_cteep,"Comparativo de Return on Equity - ROE (2022-2024)","Índice")# Dívida Líquida/EBITDAplot_comparativo(indicadores_cemig$divida_liquida_ebitda_cemig, indicadores_cteep$divida_liquida_ebitda_cteep,"Comparativo de Dívida Líquida/EBITDA (2022-2024)","Razão")# Margem EBITDAplot_comparativo(indicadores_cemig$margem_ebitda_cemig, indicadores_cteep$margem_ebitda_cteep,"Comparativo de Margem EBITDA (2022-2024)","Percentual")# Grau de Endividamentoplot_comparativo(indicadores_cemig$grau_endividamento_cemig, indicadores_cteep$grau_endividamento_cteep,"Comparativo de Grau de Endividamento (2022-2024)","Razão")# Composição do Endividamentoplot_comparativo(indicadores_cemig$composicao_endividamento_cemig, indicadores_cteep$composicao_endividamento_cteep,"Comparativo de Composição do Endividamento (2022-2024)","Percentual")```# Cálculo da nota finalNesta etapa, calculamos uma média que atribui maior importância aos anos mais recentes, refletindo a premissa de que dados recentes são mais relevantes para análise:**Metodologia:**Pesos temporais:\- 2024: 40% (ano mais recente)\- 2023: 35%\- 2022: 25% (ano mais antigo)**Fórmula:**\`Média Ponderada = Σ(valor_ano * peso_ano)`**Implementação no Código:**1. Define-se um vetor de pesos (**`pesos`**) na ordem cronológica inversa2. A função **`calcular_media_ponderada()`** multiplica cada valor pelo seu peso correspondente e soma os resultados3. **`across(where(is.numeric))`** aplica o cálculo a todas as colunas numéricas do dataframe## Critérios para ranquear os índicesA pontuação final combina múltiplos indicadores financeiros com pesos pré-definidos, seguindo práticas de análise fundamentalista:**Critérios e Pesos:**+-----------------------------+--------------+-----------------------------------+| Indicador | Peso | Interpretação |+=============================+==============+===================================+| Dívida líquida/EBITDA | 25% | ``` || | | Saúde financeira (menor = melhor) || | | ``` |+-----------------------------+--------------+-----------------------------------+| ``` | 20% | ``` || Margem EBITDA | | Eficiência operacional || ``` | | ``` |+-----------------------------+--------------+-----------------------------------+| Roe | 20% | ``` || | | Retorno sobre patrimônio || | | ``` |+-----------------------------+--------------+-----------------------------------+| ``` | 15% | ``` || Liquidez Corrente | | Capacidade de pagamento || ``` | | ``` |+-----------------------------+--------------+-----------------------------------+| ``` | 10% | ``` || Grau de Endividamento | | Risco financeiro || ``` | | ``` |+-----------------------------+--------------+-----------------------------------+| ``` | ``` | ``` || Composição do Endividamento | ``` | Perfil de dívidas || ``` | | ``` || | 10% | |+-----------------------------+--------------+-----------------------------------+- **Processo em 3 Etapas:** 1. **Normalização**: - Padroniza os valores entre 0 e 1 usando **`normalizar()`** - Indicadores onde *menor é melhor* (como endividamento) são invertidos (**`inverter = TRUE`**) 2. **Aplicação de Pesos**:\ Cada indicador normalizado é multiplicado por seu peso correspondente 3. **Somatório**:\ A nota final é a soma ponderada de todos os indicadoresCEMIG:```{r}# 1.4 Calculando a média ponderada por ANO --------------------------------------# Definir os pesos para cada ano na ordem correspondente (2024, 2023, 2022)pesos <-c(0.40, 0.35, 0.25)# Função para calcular média ponderadacalcular_media_ponderada <-function(valores) {sum(valores * pesos) }# Calcular a média ponderada apenas nas colunas numéricasmedias_ponderadas_ano_cemig <- indicadores_cemig |>summarise(across(where(is.numeric), calcular_media_ponderada)) # 1.5 Calculando a nota final ponderando os indicadores (seguindo a análise fundamentalista) ----------------# Definir pesos para cada indicadorpesos_indicadores <-c(divida_liquida_ebitda_cemig =0.25,margem_ebitda_cemig =0.20,roe_cemig =0.20,liquidez_corrente_cemig =0.15,grau_endividamento_cemig =0.10,composicao_endividamento_cemig =0.10)# Função de normalização com inversão para indicadores onde menor é melhornormalizar <-function(x, inverter =FALSE) {if (inverter) {1- ((x -min(x)) / (max(x) -min(x))) # Inverte a escala para que menor = melhor } else { (x -min(x)) / (max(x) -min(x)) # Normal padrão para maior = melhor }}# Calcular nota final com normalização corretanota_final_cemig <- indicadores_cemig |>mutate(# Indicadores onde MAIOR é melhorliquidez_corrente_cemig =normalizar(liquidez_corrente_cemig),roe_cemig =normalizar(roe_cemig),margem_ebitda_cemig =normalizar(margem_ebitda_cemig),# Indicadores onde MENOR é melhor (inverter = TRUE)divida_liquida_ebitda_cemig =normalizar(divida_liquida_ebitda_cemig, inverter =TRUE),grau_endividamento_cemig =normalizar(grau_endividamento_cemig, inverter =TRUE),composicao_endividamento_cemig =normalizar(composicao_endividamento_cemig, inverter =TRUE) ) |>summarise(Ano ="Nota Final",Nota =sum( divida_liquida_ebitda_cemig * pesos_indicadores["divida_liquida_ebitda_cemig"], margem_ebitda_cemig * pesos_indicadores["margem_ebitda_cemig"], roe_cemig * pesos_indicadores["roe_cemig"], liquidez_corrente_cemig * pesos_indicadores["liquidez_corrente_cemig"], grau_endividamento_cemig * pesos_indicadores["grau_endividamento_cemig"], composicao_endividamento_cemig * pesos_indicadores["composicao_endividamento_cemig"] ),.groups ='drop' )# Visualizar resultadoprint("Nota final CEMIG")print(nota_final_cemig)```CTEEP:```{r}# 2.4 Calculando a média ponderada por ANO --------------------------------------# Definir os pesos para cada ano na ordem correspondente (2024, 2023, 2022)pesos <-c(0.40, 0.35, 0.25)# Função para calcular média ponderadacalcular_media_ponderada <-function(valores) {sum(valores * pesos) }# Calcular a média ponderada apenas nas colunas numéricasmedias_ponderadas_ano_cteep <- indicadores_cteep |>summarise(across(where(is.numeric), calcular_media_ponderada)) # 2.5 Calculando a nota final ponderando os indicadores (seguindo a análise fundamentalista) ----------------# Definir pesos para cada indicadorpesos_indicadores <-c(divida_liquida_ebitda_cteep =0.25,margem_ebitda_cteep =0.20,roe_cteep =0.20,liquidez_corrente_cteep =0.15,grau_endividamento_cteep =0.10,composicao_endividamento_cteep =0.10)# Função de normalização com inversão para indicadores onde menor é melhornormalizar <-function(x, inverter =FALSE) {if (inverter) {1- ((x -min(x)) / (max(x) -min(x))) # Inverte a escala para que menor = melhor } else { (x -min(x)) / (max(x) -min(x)) # Normal padrão para maior = melhor }}# Calcular nota final com normalização corretanota_final_cteep <- indicadores_cteep |>mutate(# Indicadores onde MAIOR é melhorliquidez_corrente_cteep =normalizar(liquidez_corrente_cteep),roe_cteep =normalizar(roe_cteep),margem_ebitda_cteep =normalizar(margem_ebitda_cteep),# Indicadores onde MENOR é melhor (inverter = TRUE)divida_liquida_ebitda_cteep =normalizar(divida_liquida_ebitda_cteep, inverter =TRUE),grau_endividamento_cteep =normalizar(grau_endividamento_cteep, inverter =TRUE),composicao_endividamento_cteep =normalizar(composicao_endividamento_cteep, inverter =TRUE) ) |>summarise(Ano ="Nota Final",Nota =sum( divida_liquida_ebitda_cteep * pesos_indicadores["divida_liquida_ebitda_cteep"], margem_ebitda_cteep * pesos_indicadores["margem_ebitda_cteep"], roe_cteep * pesos_indicadores["roe_cteep"], liquidez_corrente_cteep * pesos_indicadores["liquidez_corrente_cteep"], grau_endividamento_cteep * pesos_indicadores["grau_endividamento_cteep"], composicao_endividamento_cteep * pesos_indicadores["composicao_endividamento_cteep"] ),.groups ='drop' )print("Nota final CTEEP")print(nota_final_cteep)```# Análise comparativa nota final ponderada```{r}# 4. Gráfico comparativo média ponderada dos indicadores CEMIG x CTEEP ----# Transformando as médias ponderadas em data frames com uma coluna de empresacemig_df <- medias_ponderadas_ano_cemig |>select(-Ano) |># Remove a coluna Anoas.data.frame() |>mutate(Empresa ="CEMIG") |>rename_with(~str_remove(., "_cemig"))cteep_df <- medias_ponderadas_ano_cteep |>select(-Ano) |># Remove a coluna Anoas.data.frame() |>mutate(Empresa ="CTEEP") |>rename_with(~str_remove(., "_cteep"))# Combinar os dadosdados_comparativos <-bind_rows(cemig_df, cteep_df) |>pivot_longer(cols =-Empresa,names_to ="Indicador",values_to ="Valor" ) |>mutate(Indicador =case_when( Indicador =="liquidez_corrente"~"Liquidez Corrente", Indicador =="roe"~"ROE", Indicador =="divida_liquida_ebitda"~"Dívida Líquida/EBITDA", Indicador =="margem_ebitda"~"Margem EBITDA", Indicador =="grau_endividamento"~"Grau de Endividamento", Indicador =="composicao_endividamento"~"Composição Endividamento",TRUE~ Indicador ))# Criar o gráfico comparativoggplot(dados_comparativos, aes(x = Indicador, y = Valor, fill = Empresa)) +geom_bar(stat ="identity", position =position_dodge(), width =0.7) +scale_fill_manual(values =c("CEMIG"="#1f77b4", "CTEEP"="#238b45")) +labs(title ="Comparação de Indicadores Financeiros - Médias Ponderadas",subtitle ="CEMIG x CTEEP",x ="Indicadores",y ="Valor",fill ="Empresa" ) +theme_minimal() +theme(axis.text.x =element_text(angle =45, hjust =1),plot.title =element_text(hjust =0.5, face ="bold"),plot.subtitle =element_text(hjust =0.5),legend.position ="top" ) +scale_y_continuous(labels = scales::comma) +geom_text(aes(label =round(Valor, 2)),position =position_dodge(width =0.7),vjust =-0.5,size =3 )```# ResultadosOs resultados demonstram que o programa desenvolvido **automatiza** a avaliação fundamentalista de empresas, transformando dados contábeis brutos em **pontuações comparáveis**. No exemplo analisado, a CTEEP obteve nota final de **`r round(nota_final_cteep$Nota, 2)`**, enquanto a CEMIG alcançou **`r round(nota_final_cemig$Nota, 2)`**.Esta abordagem possibilita:1. **Padronizar critérios**: Elimina subjetividade ao aplicar pesos e normalizações matemáticas;2. **Agilizar decisões**: Compara empresas em segundos, mesmo com dados multi-anuais;3. **Identificar trade-offs**: Gráficos side-by-side revelam pontos fortes e fracos relativos (ex: CTEEP tem melhor rentabilidade, mas CEMIG mostra menor risco financeiro);4. **Adaptar-se a diferentes contextos**: Os pesos dos indicadores podem ser ajustados para setores específicos (ex: utilities vs. varejo).