From f30acf6aa61baad4b69468824a75b812bc88a4fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Paulo=20Barbosa?= Date: Sun, 4 Jan 2026 20:37:40 -0500 Subject: [PATCH 1/5] Primeiro procedimento --- R/plot_series_comparison.R | 2 +- README.md | 233 +++++++++++++++------------------- figures/series_comparison.png | Bin 0 -> 7776 bytes 3 files changed, 104 insertions(+), 131 deletions(-) create mode 100644 figures/series_comparison.png diff --git a/R/plot_series_comparison.R b/R/plot_series_comparison.R index a320306..d20d6cc 100644 --- a/R/plot_series_comparison.R +++ b/R/plot_series_comparison.R @@ -29,7 +29,7 @@ #' #' comparison_plot <- plot_series_comparison( #' data_list = list(SELIC = selic, IPCA = ipca, IGP-M = igpm), -#' y_vars = c("rate", "value", "value"), +#' y_vars = c("value", "value", "value"), #' date_vars = c("date", "date", "date"), #' scale_type = "index", #' title = "Comparison of Brazilian Economic Indicators", diff --git a/README.md b/README.md index 283e3bb..b2ae7ff 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,24 @@ [![GitHub stars](https://img.shields.io/github/stars/efram2/brfinance.svg)](https://github.com/efram2/brfinance/stargazers) [![GitHub forks](https://img.shields.io/github/forks/efram2/brfinance.svg)](https://github.com/efram2/brfinance/network) +**brfinance** is an R package that brings together **official Brazilian macroeconomic data** and **practical financial calculators** in a simple, ready-to-use interface. -# Overview +If you work with **Brazilian data**, **interest rates**, **inflation**, or **financial math**, this package is for you. -The `brfinance` package simplifies access to official Brazilian macroeconomic data from reliable institutions such as the Central Bank of Brazil (BCB) and the IBGE. -It is designed to make it easier to collect, organize, and visualize key indicators like inflation, interest rates, and unemployment, directly from R. +--- + +## Why brfinance? + +With **brfinance**, you can: + +- Access **official Brazilian macroeconomic indicators** (BCB & IBGE) +- Run **financial calculations** (NPV, IRR, PV, FV, PMT, rates) +- Plot key indicators with **one line of code** +- Use **Portuguese or English** outputs seamlessly + +No APIs. No scraping. No manual cleaning. + +--- # Installation @@ -26,171 +39,131 @@ devtools::install_github("efram2/brfinance") library(brfinance) ``` +# 🚀 Quick Start -# Quick Start - -```R -library(brfinance) - -# Download inflation data for 2023 -inflation <- get_inflation_rate("2023-01-01") +Inflation (IPCA) +```r +inflation <- get_inflation_rate("2020-01-01", "2024-01-01") head(inflation) - -# Retrieve SELIC rate from 2020 to 2024 -selic <- get_selic_rate(2020, 2024) -head(selic) - -# Retrieve unemployment data -unemployment <- get_unemployment(2020, 2024) -head(unemployment) ``` -# Language Support - -All functions support both English and Portuguese through the language parameter: - -* language = "eng" (default): Returns English column names and labels -* language = "pt": Returns Portuguese column names and labels - -# About the data -All data used in brfinance is retrieved from official Brazilian institutions: - -* SGS (Sistema Gerenciador de Séries Temporais) by the Central Bank of Brazil -* SIDRA (Sistema IBGE de Recuperação Automática) by IBGE - -The package aims to simplify the access and visualization of key Brazilian macroeconomic indicators, especially for researchers, students, and analysts who work with national economic data. -# Functions Overview - -## 1. Inflation Analysis +SELIC interest rate +```r +selic <- get_selic_rate(2020, 2024) +plot_selic_rate(selic) +``` -### `get_inflation_rate()` +Unemployment rate +```r +unemp <- get_unemployment("2019", "2024") +plot_unemployment(unemp) +``` -Downloads monthly IPCA inflation data from the Central Bank of Brazil. +✅ Flexible date input +All get_* functions accept dates in the following formats: -**Parameters** +* "YYYY" +* "YYYY-MM" +* "YYYY-MM-DD" -- `start_date`: Start date `"YYYY-MM-DD"` (default: `"2012-01-01"`) -- `end_date`: End date `"YYYY-MM-DD"` (default: `NULL`, most recent) -- `language`: Column names — `"eng"` (default) or `"pt"` -- `labels`: Whether to add variable labels (`TRUE`, default) +Strings ("") are always required except when passing only the year, where 2025 is also valid. +Financial calculations -**Usage** +🔍 Compare multiple indicators in one chart +Want to analyze how different economic indicators evolve together? +Use *plot_series_comparison()* to compare multiple time series in a single, clean visualization. ```r -devtools::install_github("efram2/brfinance") -library(brfinance) - -# Complete data (default) -inflation <- get_inflation_rate() - -# Specific period in English -inflation_eng <- get_inflation_rate( - start_date = "2020-01-01", - end_date = "2024-12-01", +selic <- get_selic_rate(2020, 2024) +ipca <- get_inflation_rate("2020-01", "2024-01") +unemp <- get_unemployment("2020-01-01", "2024-01-01") + +comparison_plot <- plot_series_comparison( + data_list = list( + "SELIC" = selic, + "IPCA" = ipca, + "Unemployment" = unemp + ), + y_vars = c("value", "value", "value"), + date_vars = c("date", "date", "date"), + scale_type = "index", + title = "Brazilian Economic Indicators", + subtitle = "Indexed comparison (base = first observation)", + y_label = "Index", language = "eng" ) -# Portuguese version -inflation_pt <- get_inflation_rate( - start_date = "2020-01-01", - language = "pt" -) +print(comparison_plot) ``` -## 2. Selic and Interest Rates - -### `get_selic_rate()` - -Downloads daily SELIC rate from the Central Bank of Brazil. - -**Parameters** - -- `start_year`: Start date `"YYYY-MM-DD"` -- `end_year`: End date `"YYYY-MM-DD"` -- `language`: Column names — `"eng"` (default) or `"pt"` +![Comparison of Brazilian Economic Indicators](man/figures/series_comparison.png) -**Usage** -```R -library(brfinance) +```r +# Net Present Value +calc_npv(rate = 0.1, cashflows = c(-1000, 300, 400, 500)) -# English version -selic_eng <- get_selic_rate(2020, 2024) -head(selic_eng) +# Internal Rate of Return +calc_irr(c(-1000, 300, 400, 500)) -# Portuguese version -selic_pt <- get_selic_rate(2020, 2024, language = "pt") -head(selic_pt) +# Loan payment +calc_pmt(rate = 0.02, n = 24, pv = 10000) ``` -### `plot_selic_rate()` -Creates a time series plot of the SELIC rate. -**Parameters** -- `data`: Output from `"get_selic_rate()"` -- `language`: Column names — `"eng"` (default) or `"pt"` - -**Usage** -```r -# Get data -selic_data <- get_selic_rate(2020, 2024) +# Quick Start -# Create plot -selic_plot <- plot_selic_rate(selic_data, language = "eng") -print(selic_plot) +```R +library(brfinance) -# Portuguese version -selic_data_pt <- get_selic_rate(2000, 2005, language = "pt") -selic_plot_pt <- plot_selic_rate(selic_data_pt, language = "pt") -print(selic_plot_pt) -``` +# Download inflation data for 2023 +inflation <- get_inflation_rate("2023-01-01") +head(inflation) -## 3. Unemployment Data +# Retrieve SELIC rate from 2020 to 2024 +selic <- get_selic_rate(2020, 2024) +head(selic) -### `get_unemployment()` +# Retrieve unemployment data +unemployment <- get_unemployment(2020, 2024) +head(unemployment) +``` +# Available Features -Retrieves Brazil’s quarterly unemployment rate from IBGE’s PNAD Contínua. +* Inflation (IPCA) +* SELIC and CDI rates +* Exchange rates +* GDP growth +* Unemployment (PNAD Contínua) +* Central Bank time series (SGS) -**Parameters** +# Financial Calculators -- `start_year`: Start date `"YYYY-MM-DD"` -- `end_year`: End date `"YYYY-MM-DD"` -- `language`: Column names — `"eng"` (default) or `"pt"` +* Present & Future Value (PV / FV) +* Compound & continuous interest +* NPV, IRR, PMT, rate, nper +* Annuities and amortization schedules +* Rule of 72 and Rule of 114 -**Usage** -```r -library(brfinance) +# Visualization -# English version -unemp_eng <- get_unemployment(2018, 2024, language = "eng") -head(unemp_eng) +* Inflation, SELIC, CDI and exchange rate plots +* Unemployment time series +* Multi-series comparison plots -# Portuguese version -unemp_pt <- get_unemployment(2018, 2024, language = "pt") -head(unemp_pt) -``` +# Language Support -### `plot_unemployment()` +All main functions support bilingual output: -Generates a line chart of Brazil’s unemployment rate. +* language = "eng" (default): Returns English column names and labels +* language = "pt": Returns Portuguese column names and labels -**Parameters** +# Data sources -- `data`: Output from `"get_unemployment()"` -- `language`: Column names — `"eng"` (default) or `"pt"` +All data come from *official Brazilian institutions:* -**Usage** -```r -# English -unemp_data <- get_unemployment(2020, 2024) -unemp_plot <- plot_unemployment(unemp_data, language = "eng") -print(unemp_plot) - -# Portuguese -unemp_data2 <- get_unemployment(2020, 2024, language = "pt") -unemp_plot_pt <- plot_unemployment(unemp_data2, language = "pt") -print(unemp_plot_pt) -``` +* Central Bank of Brazil (BCB / SGS) +* IBGE (SIDRA / PNAD Contínua) # Contribution diff --git a/figures/series_comparison.png b/figures/series_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..278795b2c38ce4885ffb1633602029ac01f9b1a4 GIT binary patch literal 7776 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 literal 0 HcmV?d00001 From b96bf2bc22a79cc04f050b9e1c78db4ebc29fe78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Paulo=20Barbosa?= Date: Sun, 4 Jan 2026 21:09:38 -0500 Subject: [PATCH 2/5] Novo readme perfeito --- README.Rmd | 158 ++++++++++++++++++++ README.md | 174 ++++++++++------------ README_files/figure-gfm/fig.compare-1.png | Bin 0 -> 11351 bytes README_files/figure-gfm/fig.ipca-1.png | Bin 0 -> 10041 bytes README_files/figure-gfm/fig.selic-1.png | Bin 0 -> 8793 bytes README_files/figure-gfm/fig.unemp-1.png | Bin 0 -> 10366 bytes figures/series_comparison.png | Bin 7776 -> 0 bytes man/plot_series_comparison.Rd | 2 +- 8 files changed, 241 insertions(+), 93 deletions(-) create mode 100644 README.Rmd create mode 100644 README_files/figure-gfm/fig.compare-1.png create mode 100644 README_files/figure-gfm/fig.ipca-1.png create mode 100644 README_files/figure-gfm/fig.selic-1.png create mode 100644 README_files/figure-gfm/fig.unemp-1.png delete mode 100644 figures/series_comparison.png diff --git a/README.Rmd b/README.Rmd new file mode 100644 index 0000000..2945b59 --- /dev/null +++ b/README.Rmd @@ -0,0 +1,158 @@ +--- +title: "README" +author: "brfinance" +date: "2026-01-05" +output: github_document +--- + +```{r setup, include=FALSE} +knitr::opts_chunk$set( + echo = TRUE, + message = FALSE, + warning = FALSE, + fig.align = "center" +) +library(brfinance) +``` + +# brfinance 📊🇧🇷 + +[![CRAN Status](https://www.r-pkg.org/badges/version/brfinance)](https://cran.r-project.org/package=brfinance) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![R-CMD-check](https://github.com/efram2/brfinance/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/efram2/brfinance/actions/workflows/R-CMD-check.yaml) +[![Downloads](https://cranlogs.r-pkg.org/badges/grand-total/brfinance)](https://cran.r-project.org/package=brfinance) +[![Downloads](https://cranlogs.r-pkg.org/badges/brfinance)](https://cran.r-project.org/package=brfinance) +[![GitHub stars](https://img.shields.io/github/stars/efram2/brfinance.svg)](https://github.com/efram2/brfinance/stargazers) +[![GitHub forks](https://img.shields.io/github/forks/efram2/brfinance.svg)](https://github.com/efram2/brfinance/network) + +**brfinance** is an R package that brings together **official Brazilian macroeconomic data** and **practical financial calculators** in a simple, ready-to-use interface. + +If you work with **Brazilian data**, **interest rates**, **inflation**, or **financial math**, this package is for you. + +--- + +## Why brfinance? + +With **brfinance**, you can: + +- Access **official Brazilian macroeconomic indicators** (BCB & IBGE) +- Run **financial calculations** (NPV, IRR, PV, FV, PMT, rates) +- Plot key indicators with **one line of code** +- Use **Portuguese or English** outputs seamlessly + +No APIs. No scraping. No manual cleaning. + +--- + +# Installation + +```r +install.packages("brfinance") + +# Or development version from GitHub +install.packages("devtools") +devtools::install_github("efram2/brfinance") + +library(brfinance) + +``` +# 🚀 Quick Start + +Inflation (IPCA) + +```{r fig.ipca, fig.width=7, fig.height=4} +plot_inflation_rate( + get_inflation_rate("2020", "2024") +) +``` + +SELIC interest rate + +```{r fig.selic, fig.width=7, fig.height=4} +plot_selic_rate( + get_selic_rate(2020, 2024) +) +``` + +Unemployment rate + +```{r fig.unemp, fig.width=7, fig.height=4} +plot_unemployment( + get_unemployment("2019", "2024") +) +``` + +Compare multiple indicators in one chart + +* Want to analyze how different economic indicators evolve together? +* Use *plot_series_comparison()* to compare multiple time series in a single, clean visualization. + +```{r fig.compare, fig.width=8, fig.height=5} +plot_series_comparison( + data_list = list( + "SELIC" = get_selic_rate(2020, 2024), + "IPCA" = get_inflation_rate("2020", "2024"), + "Unemployment" = get_unemployment("2020", "2024") + ), + y_vars = rep("value", 3), + date_vars = rep("date", 3), + scale_type = "index", + title = "Brazilian Economic Indicators", + subtitle = "Indexed comparison (base = first observation)" +) +``` + +## Financial Calculators (minimalista) + +```r +# Net Present Value +calc_npv(0.1, c(-1000, 300, 400, 500)) + +# Internal Rate of Return +calc_irr(c(-1000, 300, 400, 500)) + +# Loan payment +calc_pmt(rate = 0.02, n = 24, pv = 10000) +``` + + +# Available Features + +* Inflation (IPCA) +* SELIC and CDI rates +* Exchange rates +* GDP growth +* Unemployment (PNAD Contínua) +* Central Bank time series (SGS) + +# Financial Calculators + +* Present & Future Value (PV / FV) +* Compound & continuous interest +* NPV, IRR, PMT, rate, nper +* Annuities and amortization schedules +* Rule of 72 and Rule of 114 + +# Visualization + +* Inflation, SELIC, CDI and exchange rate plots +* Unemployment time series +* Multi-series comparison plots + +# Language Support + +All main functions support bilingual output: + +* language = "eng" (default): Returns English column names and labels +* language = "pt": Returns Portuguese column names and labels + +# Data sources + +All data come from *official Brazilian institutions:* + +* Central Bank of Brazil (BCB / SGS) +* IBGE (SIDRA / PNAD Contínua) + +# Contribution + +Suggestions, feature requests, and pull requests are welcome! diff --git a/README.md b/README.md index b2ae7ff..7f4f2b5 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,30 @@ +README +================ +brfinance +2026-01-05 + # brfinance 📊🇧🇷 -[![CRAN Status](https://www.r-pkg.org/badges/version/brfinance)](https://cran.r-project.org/package=brfinance) -[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![CRAN +Status](https://www.r-pkg.org/badges/version/brfinance)](https://cran.r-project.org/package=brfinance) +[![License: +MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![R-CMD-check](https://github.com/efram2/brfinance/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/efram2/brfinance/actions/workflows/R-CMD-check.yaml) [![Downloads](https://cranlogs.r-pkg.org/badges/grand-total/brfinance)](https://cran.r-project.org/package=brfinance) [![Downloads](https://cranlogs.r-pkg.org/badges/brfinance)](https://cran.r-project.org/package=brfinance) -[![GitHub stars](https://img.shields.io/github/stars/efram2/brfinance.svg)](https://github.com/efram2/brfinance/stargazers) -[![GitHub forks](https://img.shields.io/github/forks/efram2/brfinance.svg)](https://github.com/efram2/brfinance/network) +[![GitHub +stars](https://img.shields.io/github/stars/efram2/brfinance.svg)](https://github.com/efram2/brfinance/stargazers) +[![GitHub +forks](https://img.shields.io/github/forks/efram2/brfinance.svg)](https://github.com/efram2/brfinance/network) -**brfinance** is an R package that brings together **official Brazilian macroeconomic data** and **practical financial calculators** in a simple, ready-to-use interface. +**brfinance** is an R package that brings together **official Brazilian +macroeconomic data** and **practical financial calculators** in a +simple, ready-to-use interface. -If you work with **Brazilian data**, **interest rates**, **inflation**, or **financial math**, this package is for you. +If you work with **Brazilian data**, **interest rates**, **inflation**, +or **financial math**, this package is for you. ---- +------------------------------------------------------------------------ ## Why brfinance? @@ -25,11 +37,11 @@ With **brfinance**, you can: No APIs. No scraping. No manual cleaning. ---- +------------------------------------------------------------------------ # Installation -```r +``` r install.packages("brfinance") # Or development version from GitHub @@ -37,70 +49,68 @@ install.packages("devtools") devtools::install_github("efram2/brfinance") library(brfinance) - ``` + # 🚀 Quick Start Inflation (IPCA) -```r -inflation <- get_inflation_rate("2020-01-01", "2024-01-01") -head(inflation) + +``` r +plot_inflation_rate( + get_inflation_rate("2020", "2024") +) ``` + + SELIC interest rate -```r -selic <- get_selic_rate(2020, 2024) -plot_selic_rate(selic) -``` + +``` r +plot_selic_rate( + get_selic_rate(2020, 2024) +) +``` + + Unemployment rate -```r -unemp <- get_unemployment("2019", "2024") -plot_unemployment(unemp) -``` - -✅ Flexible date input -All get_* functions accept dates in the following formats: - -* "YYYY" -* "YYYY-MM" -* "YYYY-MM-DD" - -Strings ("") are always required except when passing only the year, where 2025 is also valid. -Financial calculations - -🔍 Compare multiple indicators in one chart -Want to analyze how different economic indicators evolve together? -Use *plot_series_comparison()* to compare multiple time series in a single, clean visualization. -```r -selic <- get_selic_rate(2020, 2024) -ipca <- get_inflation_rate("2020-01", "2024-01") -unemp <- get_unemployment("2020-01-01", "2024-01-01") - -comparison_plot <- plot_series_comparison( + +``` r +plot_unemployment( + get_unemployment("2019", "2024") +) +``` + + + +Compare multiple indicators in one chart + +- Want to analyze how different economic indicators evolve together? +- Use *plot_series_comparison()* to compare multiple time series in a + single, clean visualization. + +``` r +plot_series_comparison( data_list = list( - "SELIC" = selic, - "IPCA" = ipca, - "Unemployment" = unemp + "SELIC" = get_selic_rate(2020, 2024), + "IPCA" = get_inflation_rate("2020", "2024"), + "Unemployment" = get_unemployment("2020", "2024") ), - y_vars = c("value", "value", "value"), - date_vars = c("date", "date", "date"), + y_vars = rep("value", 3), + date_vars = rep("date", 3), scale_type = "index", title = "Brazilian Economic Indicators", - subtitle = "Indexed comparison (base = first observation)", - y_label = "Index", - language = "eng" + subtitle = "Indexed comparison (base = first observation)" ) - -print(comparison_plot) ``` -![Comparison of Brazilian Economic Indicators](man/figures/series_comparison.png) + +## Financial Calculators (minimalista) -```r +``` r # Net Present Value -calc_npv(rate = 0.1, cashflows = c(-1000, 300, 400, 500)) +calc_npv(0.1, c(-1000, 300, 400, 500)) # Internal Rate of Return calc_irr(c(-1000, 300, 400, 500)) @@ -109,63 +119,43 @@ calc_irr(c(-1000, 300, 400, 500)) calc_pmt(rate = 0.02, n = 24, pv = 10000) ``` - - -# Quick Start - -```R -library(brfinance) - -# Download inflation data for 2023 -inflation <- get_inflation_rate("2023-01-01") -head(inflation) - -# Retrieve SELIC rate from 2020 to 2024 -selic <- get_selic_rate(2020, 2024) -head(selic) - -# Retrieve unemployment data -unemployment <- get_unemployment(2020, 2024) -head(unemployment) -``` # Available Features -* Inflation (IPCA) -* SELIC and CDI rates -* Exchange rates -* GDP growth -* Unemployment (PNAD Contínua) -* Central Bank time series (SGS) +- Inflation (IPCA) +- SELIC and CDI rates +- Exchange rates +- GDP growth +- Unemployment (PNAD Contínua) +- Central Bank time series (SGS) # Financial Calculators -* Present & Future Value (PV / FV) -* Compound & continuous interest -* NPV, IRR, PMT, rate, nper -* Annuities and amortization schedules -* Rule of 72 and Rule of 114 +- Present & Future Value (PV / FV) +- Compound & continuous interest +- NPV, IRR, PMT, rate, nper +- Annuities and amortization schedules +- Rule of 72 and Rule of 114 # Visualization -* Inflation, SELIC, CDI and exchange rate plots -* Unemployment time series -* Multi-series comparison plots +- Inflation, SELIC, CDI and exchange rate plots +- Unemployment time series +- Multi-series comparison plots # Language Support All main functions support bilingual output: -* language = "eng" (default): Returns English column names and labels -* language = "pt": Returns Portuguese column names and labels +- language = “eng” (default): Returns English column names and labels +- language = “pt”: Returns Portuguese column names and labels # Data sources All data come from *official Brazilian institutions:* -* Central Bank of Brazil (BCB / SGS) -* IBGE (SIDRA / PNAD Contínua) +- Central Bank of Brazil (BCB / SGS) +- IBGE (SIDRA / PNAD Contínua) # Contribution Suggestions, feature requests, and pull requests are welcome! - diff --git a/README_files/figure-gfm/fig.compare-1.png b/README_files/figure-gfm/fig.compare-1.png new file mode 100644 index 0000000000000000000000000000000000000000..006523acb5afd0a77674471a0ee0231c06064476 GIT binary patch literal 11351 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�(?QepjAOFbhCep6zf~QEqQEzoXb66mxwM3| zq4a-Pz&o2CZjLz~)@VBoUB`by(OPs*m(c}}fn(k31X0=D)=PnijL(Y2_U!iZ@|ehg zrQ)NC)Ym6BPSC@WUOc34N*X%=smhQAf}Ou1!<#b+vJfGuEL-iDv7PnW)kuHqT9+1# zzAP$2+8$_omZQfTcCyO{{FJ~zDsR^X!>5V?lULV_KE7mcu!1s8mJH2sDuOsKHUP}= z=wp{ndls0c8SAy&o?dZOKYm@kJTU1F7lOW?x_ZtYSF>gwzv%HYMI>;oG}l>m?4v&U z`1Xz1FCJp;`-^$b$c9&(JTAEh=2kC!MsB8U_D?#$u`?LFMWq{?z=!nJ?Vi8wIQQs+ zsw{5&;jnpWi%Z|G%#~YIGHahdW-ri59f?*EkH1e#=#wz~wR+Y5^<`LZ8Ig6VbncXU zH7EcPrLT$iWN5~xGH!uxwJQ^WO9&RvlvD;dtTiKoa`f(8qNjl1l@x3&A^*7KFf5uk zDXLD2(-KN7n<=xj?))TqbrGE44Nh8wP5uVgPh9^Dg2peuX&d_nzRp)*LE5VaKCMm!Hdo<|}(i808i9vz- zkvpurP%j&r<>zDAQ1&sp(~sA!OyWnA`J=B+7K~&fYbK#lrrfN#Em^dX6Bdv@W(P&u zoW@9GXzgWu%}}??RRJ>=pn1}d7kn6Hds(5P^3)}3W&#&K6topht2J@D=L4b8%p?&9 z*TBYIzoZxsT90T6DP%z1QuE&x7BN)iX4pqg3ZTn$wPjvFdL3nWk`F<>T;5Bpl0a8^ zhy&QZaHAF*Y_R@kLX=zB#1GMx{7#3Sz5d#mc%|IVC(GscD_@XeLeJheg7gmS&T$+K zdgUAtPF{wNOW>dt*N>~AmOcgrS!Ns3Nq4*NJ$amMO@hSjcEs<`crmS_mV?s~SjV3C z(~?&DP#{-ZHb2A))5D8~5_;g(o%=JWWl*zQjfOBOlgkRRE3eagPRb1unb2*~E-rYq z$A&hil>?n>w{!bF+)H%(6R5*j#!C;(<<#({J>PRq4I*><#VvXyyi_>*Eg9Wm5=PBn{n!-%*uZS}n(6sRC!ef4qVt(UJfS&0<97PYtM4@en<=Hz-Q_QUB*7x< zE<1*r-qt2=3YP?wDgUv?6MnLwU$H5bg;!yFjBF-u&aa%{*g6YF%O`DRV|WqL zr!u+rE^>t$*o54D0HSwzPBO-1Q#M+tjo6>N;|1Mm2zD$ekCr4v7w%Q(lvA5aRzcsF zY0|U#S`C7?ttgypXj1Mq3CcfT;*0zGWP|gDvd@|QTELs}`lreLZMU(ATQ>6#YQG|2 z)>O$SWe;>tIVP1(5}C6%$Zdo1H0I^*@%Wn+zbDwFXdr(1H8S2)*I1ao>w3_%<0Sjc z*wrD4K}C2yA(ZS6U-ud|4IX1I+a_&Rmou1C1G*Vzh(xX-XencP;NxQiakuBwRV+Q& zn_$6xDru8VYIXRqB)~{?C+=oXJAP!E8aDSn>g()YI2)g~CI-W4l1Sv2c$Q?#;lajp zg1*Jlbr3entFfJClO{qim!%~vZ<^ebL+X17muOJp&1HAb-Jr(^eeA{)rPJeO-1+gr zT5Ee#n zzfQW^xk-?JTcuLK395_M5!r!?`{0dNuMgdZW7`k1(6^@Cd1ZenE2z0Tmqdo=(${DR zjg_njn%N-%Hha~oeV$m}@{*dQ5^QQw+8Qn-mOlV^vMA0DY$F}7&3R;PraAwx5DuS7 zr>WT@GfxZOhhf89ByyW6R#gRQGmv01K7}~sCQjIw$)`^4qw0Yg%C5Q|av|a8n)XKS zqo2&FvG}=7?nE;_ssTL7#a=db{pm*>;h|>Q^8B4`UML(M$Saq5=yLIR+z&CM2S!;J z?((JK(9Wdb%da{~Kr)@uHTHJ{UL6BoM#$|6q#^7K>cLh|`FE?VvqKhs8|Q8((|gfE zk`^O196OTKmvyDAF}!XOzDgFpf%DX`O1^(-Y2sMTu5vnuII~H5U88VBDt@93sad-C zPil|Vi;q00{>|Ssb#POLdVuHiIF9s>igW+@7cFwr(bf%dR@<{TWoc___-Ubbv78ws zT5q2$cYTy;V3{}(TwJu~d+GbQ{U9Zb3hmbS$?_0_n9H7WUe};NzbtwXVH_Yaa6vi#*ct*tHET?QHb1TXfJ~EL0%=c_N4+1ciQkIPwE@7 z=B5Mucp>f~%J*rZubTUt5#6A=gE*;AL>9C{;5#?!^~nN>eSuv%#y)%{PO7W zTWPhu6tCKD-?1nAiC_L%t!0u9!>6Uc_(>bU82R~fnxIWn`>bwjizYMSsUl?&e~b0L zyFZoGz9|m@q+qbz3$KJr|Byzu$$H*Z=DYPM0u;Bq7tJTX@%Sdh?n8vqm@~{x6$&-? z1C+*GoxNnL#0MXyolUUbxA3jq1y;hx=fS z9MuhpGxz<)f`9+khBl*IB~CjALQ1u>?h*RbUkB|SyQ&UepT6Oy{%J$Sg5jzhd5js> z5`Qs)u1m5j;-D2@@-&$S?c}pxNb!wYw7dCh&4U@_PE^cRnUIG$-M9Y$$@M_lAFbuN z6MT?crW7Bw7|`U{`rJ(lmfzbdz}+e4FT2q|0;yueS>MALoM6cLYU)y-w%T z9n&JL1K(@5O7O!g>GyBJgLNidUP2OV>JqpUw@%;J7E%P853fxZP6Ps}bbuO6J7vt_ zr2P5$tG8`El4^4#bP3X*B2RJ6^yA@!>VAauoqGkFHtV@IEH4J9NVJt!8IDgrZpCrx zcuy-`;}M72k~gm^O_b}{!3^A$v$z|lfgtOXXmgYYQ_0o4#<~j~z zUu&p`rhbK*M!GX2_RFUWI(W zJDOVl2eQq!)Mm7dVbNlm70x`^GkD3YrxMTh_458tLL{F}&A3G*vd?)BtxojdC5Dna zGo`dtXlg?5vXQxoqpOLg+#cA^hh!E{YxG}A=T-pGfxeZK4101VB&KsNG7nSe{bCgE=_*Gf^Ln+GQ6yw9(oBmcCskUj zd2lVn<4{vYj(y97-E^S1u!^T?U~X5^4ymLj{Fs`{?;fjFLLvuG?>-DPIwjG^b7Rg< zsvyI|di1$TMSG#WYB$V9)$1MBg}$|+1&7jPn^>+8Ji5NGJYj>nv21myZL&0PAH?0H zt=^6P3@23kc8*BEXQ#^9{Kz$0(vJh|OS;@J{u+T&{>FeQCwz@Yt*Q*Rs$E!lDsAWE zJH1)aIfn&Nr4#%h1Y{9*gw(6NH^cMpZTu5=;3!n!yPV_&JiYQWRB@8P=Y0Gql;LAs zP4l|yR4Ht!+2-X398;y&1tknyIMD0Vh=XFCxFFE<(w0cPB2#y~v}R&9dslX#Q_|}Y zq8nl7VXsl1DJ`DN3?08)&*oln90l`gJK^8=0G4npS7MoPZ?6>4{PZ<{xg9;i zW41f#eWNFr4iJXa`NnVu@uU;&0?ZK2;l5M@_h?d2VvkBGkWy?PD_KgOucBH3g5`EZ z!Hw)!x&j0b(-a)4pJyhb76MZBO8J6^FYPWo-Lpi%;aP?owi~_&u1TB2;A4JV^4x;8lKq~ZCg^pq1DPDT;8BToz z!V7KCPaxi$T-0pO4k$?|xunp3B+^Y@+K1Iv-ls$d4+-v6K<>Nc$`9ZXt3!`glG7D9 z%E@t7Tbs0CIQAHc#6g{2P*}$sE+ECzp-dnX`(2*~+h;@fd)=Ma#a8v_<>4O=v^(8J zw7;P+;4lnel#c`x2*oA>2t)oloX>lQgNxWF+{NDF#$QgeIKr)D8W`umqkB8RT&ln~0IKX-bLN{|g=`0L?WdU4q77U-( zd;31ZQW4t3Q}WDN(7C%R-)WQsm&B>CS=#B6R@)N^v6={5kd*kqa9v)YEevC1PNEQ; z43d=iEAa%G>?%W(ZQ8=5ivE6#FOWR;SAGv(RT)D~7Byj`wBQ4C;O2x8JvxuAMk-9d z(en<8Bj6Ew7X;Y@6B`GxyGn5S0Cc2;u}H7}$+A2KvjunFkHva0{M(1NTk3%JPYOosmbhD2mex~fgR3G&>Lg=uI;cb z@BHpTjra0**r%E%N=x#6;&qhHq<%jH_%n$|e6tWhIB3zxy8@N#XgDY`*s9xORG|en zJoNpjQS03&$A{15@k4e+65i@gH-d`aD@ZNG$Vo};%4Swl5qj|qva9Xbx>(#L4|$gA z3BwnjXOB-|bWIp`Rh=ZU_YA7a61a$k*Vr!(!j63KR!>x1P96)d$#^~)fWdO-e*vuj zMGSFcOlVgNjPu}v_ic`M;nA+rtQ5{4X&CN#40jX54Z+w9|W0?jr5g#g1JS-?u5b|>8!$wr|5e?7qX zcQ%d!0FL7Spgp(P?5Z5;`UHt)LxGduZI)jeO;vuJ7FwU)d$~_iIj&7faPj>zw=`uq zB{a4ZH|MeOIV_>S+vj9k^47#UiG$xEs4PI-FOj1BWb1Q-=LRNdy?m3d0zWND?2gi5 z!04g^E}a{fy-7(kwfEEKq~yZ_he~L;mmj9rgXYF92Hhn3~0Y{nh^fS-Q1?4rP@TEix<@obZ=Kx^Y>r`PS}-j$WF z^XHY?w3kyv@Os|Qwl*c+nA+zvZfq~-1eEUtw6uC*yK-yni^i15H4gINl||7*Y)!ZtVPOOs0zkK_qN6aR6Q{`>%ogzOqQ zEP^LJ`_%Jt(kl5qacZ$xouRyN*7BH+)ve`b>wejSl%QElA`4w0X^Rqg0R-RcP!mo) z_#-0_n!i28;g$Kg`q<`fzP^<_o}dRaQ@@nIJS@GwkhFuCa-x8Sz- z5|=HSO%V7@?sYHyQ{rx?yvC@Ob=i+|)8ic4@QZLK|H{RmvPD-Mx~4iGA;L*``p?M% z4@8Rk9cri8p~k%C+KC5<{1nUdHZm+Z{N~vwl+P>HYZmCZ=bq_U*RYgd-k^e;|9w!7 zeP#(lB5H+brt-^+HfYgmw9a}r-mAyFZwtp(v!tB=v872IRLm%N`Kd&I99#X4$f8LE zp8pj+sX*pdyGe|)Rv`f#<;pPVD>JIf(sNayb|#Op$ns*9DfttX{M3)0Eksx8%*UU? z!q~Zn8CSLnON&sOssq2O`E1TjI+)w8P}ejpiPtXh93@&GC@lR|T~eCnS(IC_fgAoa zHl*;T>cNB0L2JrW(++$&;!}YjQ?1!&A3NGR@G0iXP=)=C9T3MAs+v5P=ziDaK60bi zcBNlL-c+?uYe#r@dzoof8Da5u`c!t&n`GkSx`^rOwE%f}({qzfkC!fwvVpi>1y5N{fPZ)lMa^Dz%i`r#^R44 zulI<2Sk57io|$wYU!LsT)>EL;Is%}6^#6mF!viwp-bjDnig!^-)8;afe#sHMyEq;K z`gOkDne~2=_vS=WVP&wxG>cDlw#AraY4gP4O7(jU>vsz)a|$@$5VewK%nk;HcQ18E zol48IUwOopV(f}1eN{an%aICgN6de69&3I|uTfrDnHOiEb+|s<%_VNxJElOI(fhxH;us8ax;spq|+}iMG&U>?M(1Q1?_PnU95V+K@5$z)2MS8y1 zMn%<?a)8$7TPI6soH8D;bmrKn+M(jL z%wNbe-8G>i)qBbfKauAD*7y2XT5Dqlss-p_>h^)$b|(iHQOdJQNu}& zM}&Q!T)dz84_H}p^cu7))n7tTDb>~5jUit}F%WFBYp!oz&y0Y$9x;oy^Kvu-nWuCg zBH0CxW^v@_T`?h5^8x144O0pYzvm7GRSyVK=)+D`VjoPOTto58vwwaXu8FNYeKo$o z0Ws7~#qtvi)Nb?;v$fc%++032cJ;lk>b>Y=1dGx@+uE9Vk1LHr5{7x)=#Oto1LfU7 z`c4h+HMmg)#UbyFb15@2G^E7ThK;)GBem(Q`st4uAeVS|j_bO&-fUw;C_DWDDAHNz zyIYXR4BLyvv?JCSc}u5#6gbRD2jvn1%MMQBm=RKZmZY5W*#Hu?JblUcIR&_KDSF7Z zqr-ImA`#knsq8)24&mAs4-3CgH3){$yZxU9SDl_#lLgQ3ice7l zqbn(5iY$?1-4X#$5%fZnY|?1QB_<#kMgu{|E9dEdFzxwIrbhph&bC0!yrY5cO3N0u PkO2*K?K8QmR(Jjf5j91R literal 0 HcmV?d00001 diff --git a/README_files/figure-gfm/fig.ipca-1.png b/README_files/figure-gfm/fig.ipca-1.png new file mode 100644 index 0000000000000000000000000000000000000000..87f709b6c285e452cb52116e5fd949f64def67b4 GIT binary patch literal 10041 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 r(=o|BJdTxlcZ2Sp!T;q;rZpMOkq zN|7$TgCJcXd*l1~*u{i@QA|kiNcdB_61wn7P$0<}e4qqM1X?(P6oeKI{3PMP zdNOGemoy31c&vvZ7NppP#da-XyYSe>F6`nWb`g(r25`<$PzYQS6bF(3kqBiHL*@e6Dm zi&&4vu7rOvTjMBZt%N^Frzhqi09*rfHPp-lbGCBhBRI5!I*%AmyxU~GU>UeaCRcS2a5;`1s+&j!UR$pFQMs;V#R;a^tx z)~Y{+IOk=a%rtJzcwA|@|5O~I2(UcPgP5>9B1Yf%N(OsSNR4dKVF#jukxFWHk{4P2jrKMizT*8`rU`Fx(n?M{U%OF=?NQUj@z&#M4>(TTkZQ) z>br*ZYmZuA7ETT+jxK$@x6J(E#?~5=6eX%5-!uSkq&v^d4)M_4dpTn8{?2lIP$epmo_az3{ifc(1)ShY zw*rvsxpO%zu|T{ltY+E)Ruj-hu`KNtbJ{Cnp@LrHWhz#tGen8DY2bGFD>A>uq?4MP z+txM9c1qPfnHg&t*O6@zzTn90^qJ3f8v)Y%tl3RiIVy_1i4Ez{mp`ZNJby#O5FRY% z3~~AtHKP6Cc<=QnrwlRXYz3kG4ch)FagXx#O!GC~24tt&&epnP=-cMEa>v6@<%Fnm z?y%M*dQCxRq>#&GV*zBCmw%-pmS!u+#U|&5sAuNxjSmHP%p6W}`Ictoubur+hjs3< zcVwte8SAqfkMHltDe_7v+~`+f!%%q8J9%Hfd=%K`kighb7>nUGh)qxNzxV!9d*Ky_ z8_wJ%8+CA{5al8JJ(Na~r5~zWi$8cym0VQ4X=+)uWTiJ1jmdZ3tyBp^L5J+u z{RAAlocU5~J{ElIb-!=~O487mOjzYT=`HVA9h!Ca6WP&!7KqUjzoqA_Q6S8;UFuXZ z7ChyvyA}5&w_h!UU21XWaI>ydO2Lz^BdY$rYD6->?ebT}{9-dpftwJET)iHYX?gUw z0|eLijOeW$?sl(T;RDCMgfBTl$;x94KH6 zv}J;1*)=~~7br>8?k3V;;E_bIll^zxHJ5%HD9a{_vB#nF$vtk+01zI0An@~)2^JMH_q z)agk+6v21m`dI}bKN%8&mT~5U6-bC0OdPi~yABHLowMLCwSQ{}g`LD+x2S$R5zO)n zVz}hd=jQ-B@jda9k}9rD<_p~my3yl)mO>^is^%e1Nt2>9ALO$BQ2{@Q)eN2LVCyaT z*y5yTbLds3T~^Xx+0LWwGgu%#GSrK4rmYc&4;gu7$dH@NbqC0e^%>hDRNE?|1<_aI zQ$hCD(kFCPKQ=|f4-2kM*o?)c8`{!3UWmevq~vcxt!MhWD{rP5N?l?3Fp|*>7rR~xN1MfhU2CqanGZbLM&5if!}>YWh%)m@K+^IPFl+7CcY63Nw9g!Q zB6Gc;Vz-%-Llm(i|l?o8s@IIa$Lkn|Gmt^>QSz0|`JRa`thGT}{(y?G=D zEQlLd!fl2W?7Rvqi1Ak)ncw_kMQ($CO}o3Sm|~N7J0|C5pc0el2D0u;0&8i4oq1BAG8%J1^svV5FBR8WpH+^y}O5GZMK5#?K#gJQL9; zOWEzbEH?viJ7xBrXxl&RrGE&?rI~+KEGHqD{cB>kFsYlj86fQ z$9w$mhHf9Ay^n5(-!DM*lbW-a_pxR?;TFQX^NSZLA_Vk_ODwC-&kHt&Og(Oo*!n)^ zt>p>N+iG&Wwg^KriwkWPYMM?OuubV+ZHG5{j^D}dzUppkVxiB0%rvZYSD}zvGO~)C z>OfJ`XZ($k^l0>WvrN~(S@LZt(M{&6=PlL|R2}R-Ka{(<|Dh!szQM~-z{=ry>z$9| zE{C~|{cSh*3tkZg)(FLHZyI!WJ1^PN+B16b>n_}TW`*KQ)ww&*ZESi3Bpg)rZ1sz; zZ56`5GBZ2``X@0fW|En!#&29>g>=T_Paj$<+_j=wA%cw*<4uR-Gz7YUEa^!9gr)f5 z-7c*=Z^HP7ZurEE=sZ5w9||nC+>l~uVx96Bwx4$?uC`E8mE0F=)-`1_@jI9j+vBjN zfKf@--kQ+5H-)R`n?38O0-_G8BAZ$8>YVC@NKIiTV%Ol9&6=qQ z4n|YO^V}XSd!Yn#dlLW=xUX_#-e9UrA%)BmyZPY<6YH`&PnTJ)eVpa4O--RON(%M~ z&v!Ayz#d$t9mikB%8|2P`bc5YV5LpVN7DL@v(QFdMOwAg!ee!d1**0%VB)2r-n}rL z&bLuL8A>ZQ+fG5FvYf-8rpo;<*|}=5JLZRX=9)(NS1(mJR0PDhIyfd@0^B>=tW=;5 zDPl&&e4(2DPA6DBqoz0>bc=-EFx%v_y-dMW zYp1?60Kty(R55${wdCaqJwS>s6aXk;y7~ZvkI7ehpj|YtnglkP3=bR8jpV8#LhB1a zOaMK78|h71a)j*4s938y5jwo^nc%aLQAc;HXYnMkCLMuv32KOq^N_h5B`^_0fwW8m zgn=?nQedmO`W1bjnvVbwYZ1C746G_7EqWAgG;Zbwa+Fy;izb0V5dRDV2pI~btgw?y z?iTSxn<+KY->l~@a}CYvn|=}pi%T%})II<72{LIR!TB*MViUkd5oD!HfvisggqP7Z z1*-r$0=Z;O8I5bDOJA$j=tU%$z_N69G9M~M&}HRLfBNows!Y}uarX9VUwUd zBrqxg7bIoKNznG3=qOZLMF6l7t|J|OT|*OZyfy{s1<;gSwz_438lXi#wA$@?-*2u9 z)kbD5&ks>$=34BdX9NJKwl^h4(Tx+-Gmy&%8T2oVO^J|0Rg^N7uI2`3nlcSG)k@mc z?_s`=eZ}l9+LY9X&1>zYS`1`0->gVYCG*8Gk~FDZ`S|gj&WUin*pf_39kFzAlAs$+ z(^u2O;6W7GY1zRa^a&|7jz`ZI`` zUnAaO&Suf|Rq>zzLYa*t;u}lhsV45BdMVtcr``NU| z`O|Yh*W+#|anS5k;%O?#E0WLwsNt^Q- zA#Qu)BlKMP6!{W9VnOo-j|w<{PQ7a^dFZk8Tzl+fVZO!!wJsX){Pt&|Su&?@Cf8Ag zpmu!*i=$??ZiJqQcyL*Q>w`1vRwa^QxtSCv*z4#U(gBPWESFEOysaEGHTB?lD=d^J z?|h^feem*LjGaC(%#JRY*^ry%`WX`ODU>CY&OVD6O~N0Ry(V@>mHTb1jcj#jcFwI6 zNJW~HU~chQ&1ad$R7?XV&rvtq$TK|P-iLv-*~0aFX(tXWfS)jHTw$UFSw-W*diev{ zJHA??XX}Rgbf#rO0rbt%AxZugNn=b;t-b*HcD12Fe86G?B4r7W+_>8c|HfM)&naizNC>`xX4I z_;nN@3=s(t)D=g)kEMkW+7cIg=%dqkpcs0U!e@}FsBgreX^Sq(=W)_d83HBjRW$E=Z?xH<4*^L@B0n0s8_u*~b~NWVcmpviJ9&Yssmsmmz+%^QORlW;bqrL?zz z1Q_kqx>@E^9)LlzY^foO0!g1*X`I#IHNN(1c{xX+(2|wF>8G%U3vxiQ*04+pM0ocA zwgL}R`_ul%lRaU6=93jKH8aL)xaWw#yq=THSK@VE>!46S$q{Fb$B}WGqSmR5fV(>ASaPuJGq}<}Z6O%@1w51~dQ{AjE`Lk=qs|}4 z%l^QRy-c}f)j^~}q45#+hOS)!VlMY#>3g`-6^ep-a9xSWi%8nd5IN6q>rJ;uh27Wa zwfsPNW`Hp05B-AYq4E2Fyj?I#hh;>7?ancgFLX7`T{VXUJkcKfJ<%ol()5UeqI<;ysO+2C95&gpp$>1?q&*$+twjXAeuX$nj3tr)s+sC)(X zI488bCMFt`-X0mtX(C&l|5&D(HVY*+Rw-vO-{8OHO-kn#1;shhoM#?40r#%}A_Wu*z}%)l`s=@eU^=6z zfUR^5B9nYuRiN6Io)qRID+EC(fI0$(r9KDIgR>;CwLjv-{-Qy&`V8izXdlq?^AEk4 zpCX=E6;&yYD9^YC-qkUzaGOkX*e~U^x{P`JO#;i71||v#=Q|rdHDJPhZHhQn0Z}WU zjf94#o?|PZ1}|-&8F#L=vfUU%4ycV;dS6)l7>KB4QAVVUsu%;+z4Xd3<~|mPaFcL4 zrOA;S8!+J%!-l5bq=XDgfFbl7VIhck5(r4t6*&+hW#`9dz3Txw*L6lTHJx7h{4}T~ zYY7;2H|y&~(V2LHER?XxFOC$eGc*Cb*Du-GCp1~8}( zccmTQ(w%_KMIau*Kh?bN5eJmQB>v7Soip?m41j{#u)GJhLqO+`yvlT6@ zvCDq)jm%u{xmDo-i96O+mi=*e%;v6|cW?OKiYXU|ecAr?o>u%Wc3GhQC1t6_9*Sq% z20Ho^8veyw>WPiv4s%Jabc<7y*6p%?W_ zE0`?is_BO3jF)PT=KFi0Gp}Dgua<4w>FJQKW*;pH+AUxEo>!v>cR8wiF77JR=>Po4 zzYLVFy|tl3^g>cD`v}_XlPFh>IU5Dy1-~>{#+&wwDP3f|CvqEUq`@!8D7!K?T^u(s zch25ddG4uVeYTthFO_&@7QJRcT0vY#zYM_OUnUD1f6n{RZE~FY) zIK3*0{FrcVnwuN<>#uu zKSxEmHF&DL|D_I}?!lT{ay<+5k`xY7$Ch%^oES>_&z`+b0}*ZD0+p^;234D{$j!3D zuRi!bZ4^(-(%6RgEuQL^OtLE8tL!RKfSrg78_VtNxd9h0-#lJXEYQ>TPM0$U`H4zq zm$GfDjTbM-jj7jV-1qXi0|4rn@o<_YEs_^v%vRsd+2vkM$ zEehfa%|7UfMKH@a?OhB%9}E8-vgil@C7Nqdg$*2!$iR0X!LL~8C&l@at;Y65vn?Ev zT(fg_DtL5i^EKO<^`B3=Tn2Avub5n`Fj{g-voHgv>%`vn%LXV}SkZj%8%(x3+N z;elyBkGQ5Pywr6OAh1D3`x9G`x-{$?!c4n`$_+RbpXq=xj=dtIE! zU&lv_Js{_Gjnjn^?38|2rZ$$DdDnK}>A*H^f#)5bieK3ohL-V=o>t4+r6VVU_r3R_R(*IO~)HY^>!h#~V<-J9}wG(J7}htm#IT_=&f;ZA)^bAH!|M z`uCDOtryR(!ppw{h)Kay&LIu|@SX=b2idfkv!=iK6wEhM!-aNEt6L1@(|DWBDU3&* zJlW2jWFJUsNS$Q_H%I{!xJT|^$m_ycGN#!@6&ZuqP z-L9e{MVC!Jm6Mm7F**|>^Bv3}S9tk`u4dbGW1sgC^u83kQ5}CMY1=xCC2=$~kC`H- z)AxNcb;}be)XSMHfUTc2a+6$G*>Cai|-}#@}_(-7^>5D~lm17MVwU`{x zOxo-B8A2!rlT)=Ek{?!5!(zU7pGKd@tgAS{+5?3`#OnA*gL%ucWB8|yyRUu-l|7Zu zOX0a>vfx)w_jK+dKWj<2G!-T|VBeFYxNl6}IS{;r8)@lzMGu(pcCfjrpx?EdkN~z> z8m44}DSmawH-IG(w#ZH00s#XRv{yb`P$iP2s1CVTK7;< zUR~=>v%6c#WByBenjyWEJFf6Dnh2*WNrmCjNlZDY;pcXIAqT`O6$F|h1*2mGOS;)9 zA!!1-K>HQrUM=sK!Ndr8u`2OsW8R--?D1b8a!aFlrvi!fvjRQkbRazu?2+m^hc8Iu z_&>zTp*Y(30+mwkeWPlH_e>i%@9WZN8J*fIkS^T@uORu|ISeHVI0aM$&VE&3(#L8u zgC|dqtD`S7 n?d&aD+j-whu>M~e$0VLOw~XxPu-kJO$OF*TG}0(nzaRM@J0Ndb literal 0 HcmV?d00001 diff --git a/README_files/figure-gfm/fig.unemp-1.png b/README_files/figure-gfm/fig.unemp-1.png new file mode 100644 index 0000000000000000000000000000000000000000..2ad159a0708ad5de6c973666457a1deb08478c5d GIT binary patch literal 10366 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 literal 0 HcmV?d00001 diff --git a/figures/series_comparison.png b/figures/series_comparison.png deleted file mode 100644 index 278795b2c38ce4885ffb1633602029ac01f9b1a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7776 zcmb_>c|6o#)bOB?n$k~6CP|W%CB>HzNrq&|z7@tYwy!lUKeB|z)-WRbl5H$wnHgKM zjMK$t2!9)HYOSk`Raj1cHJnC_ogL7z;r$p;GWg`OWv@ z%noL&0tEG^^G{(`unH)Y0*Z+%6|h(ZEEA6){uDO^A`0Q=hH%3pqL@HM{Z)#BFuDK8 zqZF_xX2D`n*h&<31XWpys$^mYQ;aF&hKO?eQ9U`k9e7>kRGOskAaEK@IoN@dFb zF*1e!tL%?8rb-5rm%(^wGsVhWjUyhKW>1*wcI(fNr6fgV4gxvnbN`;I;fvIzG)%y` zHnTR}<0V5}mql{*wFwun@o=F#&K0@uv{LTg(FuI?FM{|!w>h*wi|B6ufp=M94>hgX zxQ>8#gkC|fTq3Z%J_NkSUhZstdAVXUw~YPM;v~ITqeVrgs*L_@mU}v?#w>b-dI=JTQkW&L+Pga&b%eT)i`QCDz_TEW(L;-nX zIN*Vcx&o}pHJTMx_dqVI*5=2cRV`5S^liW%|8Hu8_r(r-WiS1+25+FHTL}SGH+?6* zMpzWMY|Z?5E!X_Sa`AO(x{-5|*U*O=-R15|f0Y2z%@H5Us-t4NEKEdjcs!%4{#W!+ zqK%O>xf|hb9C0swD`3>#VRtRG&eBt(-(hk$)J8iA-)UR$Dj%6mm>67Mm=&p-dG|Si z)-TB0jwmqJ>!x9MWo7#c(3PnkP5_r6E(@8RuYbsec17c2x|pwiPoh>VilTFjhPM!$ zQArr~lTKOUf^F$rt@Nq1!VPQEU3^C*++|Q3(`7wdJ5Pq-RVq_#i3Xpp&LZ}v%S3N( zu2kAkyt0Ddf_#FVHorR~1`BOC@U3xLmv(xlJ<16>wvb|0n8iwmNy}4dw)ML*#OLW* zp%=&IX>8S9=o?nGd%7Q0Vnm)v;8QEOef#%Z)Cy8L&jRHq?8)h&g;ceI>uH+Lrhi+s z5ahAOub}%Z`epAHqZ=Bs`}%WJDTegxz$R!)&-DNJu&$=WKH<~sP(yN}SA-c-%`Bua z(b_&SUGp9z-vCRNaRTf__kTw1K?*uIDr{0G{FDN`=>*WO;s#8;e!@Oj7H#xNGTM%^ zIZC~a&JM}K*>7y?@h_i2$F9r_f&C=-Yc4ztYaM7#C}L7xyx_SwUsil*)j znc4e4IG#IneF_w-Up9G|0??fE^ig=;X59_-1xbNlbk+_z!a`PiV<#8_;?Ow`ylU?DUbS^MXpkZ&N z|0sNb=Q1wt+eJr1M~;}hgSt)>*l=7+uUUkV#y{%`k8|I^{OSv>mTe;B{4h~YEjxP7 zjzV&>Q7hK%*keqN4?cJ|ZH`lFgty;cwpA;NtT%joX4Txd%xp9_9x2a8=yh|CrtLy=O zqZIZHj9u_W|B4ZkCvkEFrMJnu*wC6Db8b4~BH`p`{U5!KZLNL2CibP^ROH669T!N5 zo_n;E{5^VnvgcQ;fPa7V2R-ZI+Dh>d-rXqK&4ZTi;jL-7qFzkH=ZYzyP-?X+F||1N z%V@TXxvEEau;nrXz1Ubh6I(vb5fd8w^cOF@Zp6Sya?fOREqQI=h3KW*S|^??u9>P< zoo6&9v%`L5eDbRg)&+B?o_mD*@;|3rjASKzERGd;RDGQmSf%)| z!u0TRM4gDFQbYINhuWRa7;o+yl27qjlZ}QqSv=?c{65aB+mq2#Mnhuex`O?`NqD8fmrab(&?nlH4GYEt zkHXS&M`q@dq3)j}r&LZ{hXT!Am#ccF=7}*+oO}$nSiTIg$@{vB-?NWhPuf-we<30{ z{p#On_p#}OM^TTm0+g=|%BXUNu4O&oSi91vnw!kXIR+bzEU~3se}`cdS{SXr_xA2W z%Q@=K4C(dTs2#8Vai54cf5y67LF9ht1cud6evR3tK&$(IU+6^Fy6co7&*eKC2iC`4 zC1x%T5cHm2b6z-UBv==Z;m%)@l>j>S*%Nkq5AA=f9Jj9D+i&$keRQUvH~g%f(Z4Zo zgY{*LJ?fEP<2}9+h^YcJfs{#O3{RDR^VOv61iD9%<+?wmT`vA&|6WYHXuMKJ{uJzn zy37td9QqWIu%;}X0HyaPW{#lLqPEX-fXCaP)PR>i5 zkM??4Xx!;M`gd+0*5j6%0tSn@LUgMmvK80kygn}~=t?_KHHMyV9P%GYepxsi|N7xm zzwGAL(iLi4pp@XKzm0N~jj@t}QJ21IIJBbvr>x7qs{9qBqxfr)W{W2 zZxcRyA7-AM|8onApe7BxklJF}8r312pi;n-m3JrB_GTu=>e^;9b^31+F|q<-7(69= zPmD6Lq0G=#8E{e%tt8^uh(Gs=+ja)!l&u**^A<8onnH9yTLg#AS z`0JTGBc}bCYtVRP?XLJX>8DtE$wi{)(_ewJusJ#7c5m8CHn8Zen3rDSRzMN@(FPgU zi7W%BAa9e7zl$uaD8;K0=W@?4$fWT^%5=$`>jzhlkWLoQr<&%7(einNpkf3)i9;}b z>uhsQAg2*t!3}EK^G7)W@-)qF5HJwaj5~IWFu`OLB20)Kg59;I7;pk1@_hgNFFgO* z+KA5M2033rb%ki({xJ=NGAWPy;>`{Hpa&tQk%b0+qwJCaRQM9$}COf z5HlZ;;k9DS31l`^poGil`Hd5{l(vVVkk;#mVL7&Rm19SMEW~gU=1nVnUVuPk1x+pF zN6L`zj5$s-)ftM>!ek%Y0yhY~UEam?EANciPfNl4<>Bs3$C%Las~s-IW3=$WnA7%@ zu_pR5znyh<_Pj#bL>xQKBZAzDBE{@5os#e2N~c~0KXe@jfJjVGm_AH{pw}>%UG44N zU*V8F+N=l8?O>uY`enXH$*tyPNQpNgwdSwi9Xk!qiQ?PP`-jcdlg13rTW5Q|XMtVo zgri(L^0k(Qi$=Y_p`?w4Xq>zyd@wWPPw3G~qdK!A;077}%a$y6qD7Elc;cy+m(8>O zcskWCgWLOk<;EbPw|p*U*j*5m6!_{b59r*2vK=ga6Mv$-x%Y3iQwp6^;>k(g2W0jn z%=)-tK#2eQhFg{b$HjqEF-<6pY%A;E&I;s%qqPhJ_Tb&JjRjTTIrTxoTLi6*{#7X< z83sJaWuhQvDwNlFXPDm+RPtL@YDQZLByIj+m)eBowk@p29CmY%5Gl*OJFY{%v=6t= z8t7fTaNH4ms?1mgzN|JqB{qP4?<7 z5`b-mBs8MyO1=of(r@WGlv3m`^dJu(Q|m(dxmpk={9C?6VfvD57;aVfz$qA+eeurn z=@U;EPMN^%)NbPmNU7H$(MBkW!_;slJBeJJEY5cFw& zI_-*7+hLt+Uly&82UTAQoorkT&B>$_^24l!^GJG%mzd`bmkQrd1W`JpYfRovCC5AL z+AkJiV$8HB$l3p`^t1&S7aF2im#;kJG0|9^&!-b_%kQy2d^2A?$%!>Ehr{x$6=Ni8sSu9;>5A<)f6~y z8+?ok{~=l%ShFz1c+R(=QHbLS6Gt?%!;IV*vp-9QPpY#Kk@3|<>Nrh+YYQcMTaJ#M^T&6so~!_P)dfurH} zlU`Ot>0e4Mk7~%Y)u*s&mIhNJVNwhSSdCrXfkwrbDeyYszu2dBjv3!L#GMIYA8wX zLQG9hN1GM}&8869qM1I)D*p4wH8?CyDS=y#e8*H`X4ia_T_#NdXGg)AHb zEc|xb|LJZgTvqJD%ISK#Ai5%P-*5?Sr*=$Ki>=3iF$xyl@ac}NZn#)EKS1)TiiyM6Y~56by*&O&cH`VLA5cDXXSOj* z=E-h(IT&~R^ve4bC;O#Hm$`~kUU0Q9zB<6ttUX`a6(yWa(hHCGf4mo)ftZuy*RS3H z2kabr!4D7k$&l}K$Mmyu@^g+0C4MpMn2?6;&#M-v_gq(2yvh$Sk&4f$xUPoHn3I&S z=%Iu87~03jQx0l6#^&4n#lJD;Bg(r_lGBrhiRSq7@e3(H{IeA~1^fwM?`Us7GMMj< z3@pTm$7eo*)GL2jy9FI@sZ6U8( zJP9X<-Mx85BnJmFa*X65t@lDd<=%QW7=aOQ^5&saJ6sD(Rb>u;aos`q6|E&W^;=Vx z&7h$UD2}F9F!oNMU@wQITx!SDI$I=x1fQ0AKrD z?kj@WFdqCQ;oa~7oq${oQjMy>d9&`bXWEl)z%m>8kGde9j?HVdQOaE0}Ng!mj8%;CRhuu@NnL`dk!r4JB!Xd=HyXf!a6|b-+aY zL)TJey5_fc14-o$l(V<(atLsU90_%h-)I@qAR0^fWnmc zUF4*W6v!9;;(n6WMOO$cU4`}G@|`}SDu7vaHjH)uoC4tF)*}7QuaV)#V%pnBPTt9cgyQ)e=MSKU`5*7Tzx~nzr4oc|3inq~ZxNJgH7yCRO zl02Mq9L;1$Qm%fL0V4cJ`!Y)rgbB0uRXZUhN9^@YeQxvn?pw~1cLt!JUE0v~$E_)! z;JSH-0rX8oH=2I8P6r%Sdb0<6&kVB)>2r(atw`ZrcaC7Ft`o7wA43acq)c|7xX_XH zLbO?fk50?n`zmII?goEN2b#{yDUCM{DkKIvE%>Vq zK!>eD{V7reRXgE}ftvk;NJ=%@r3tQIzO_Nw|l=G92+{c|WuFJ6XD?K!1nY^4=Q+DEytSVEM>%W>spnsd+%K>mG1kCY(0FABhnT~&rdtxJo*mu;vY0O+C zF`8y3GYQaQ`uQ$1Ns0R}2AB&MVEu(bY;66Q6a;0a6ygM;8_t>yw=Z}UEJ~TTqX!QC zA1)OCM_P2+?_lLSk`qX8_;PB|zVmrjeGv%^>}P z+fpL(eCH7v%8uX)FYaIAwUfBktv%NvO6t&-rG&N-XB`Q-R?%OF6Dr3z-GfNubjRHs zR{)$zsJq-0?IiBC>$-LUrhqHc1n|*X@&RtUn^!v8?taPuMD$ML>a2pS4nm?E_oKx2 zbDrH!vD`-p;!d*URJgh`V_u)|SZpaXJoWy->0?U~_xxu~Hn9)E@#ei05Fw&tUe9ij zJdZuOG31^o(%t$Jij&5%!9UL?zKs;=o?((F|BzOaS{C0!oQmc>PHr@zANk~pdp60m zdVk~GwN{g=1El^^bDTcb*(IJwRnExf9OH z!n$BXQ_n=z!tn0I(@tw1qUXBD%3R#|H4SABPYQK#VxRG9SRq9^7y;l?SAGgW%3-7_ zPL1lpW0o4nfXDShJ1(_Ckq8N!-!P8%*VRuGX z)2TdBTW-Zac=-I+f9i0^$sG$p=BLgh+<|^oHMQ-(s4K0qgypiZgEL2 ziFU|J_LiyH47+7i@0yTf-Pv%6(p#X=KgR!n6Se%YB{9F?3{^mXzr;)PVWBt z=9NKt@$>r;sRNER^}4+!o)JB_GGukm;n-kk#HGJ?pj*``k(DN(xalV;(^oIZD)Cw4 ziDi9}0ta@+%j!2YhAaTs-p!J7TKBAo;PXeP-ILtN6!f(IB9BR~wYTO9XNT0bL)Q3C zM>m-AvmwnYV4LG**mv{~Sw*Wc2cn|{kJ0^));+@P%v`96eMMxZ*5RArop+I3rt-&0 zae5c6R)?l&ooT$81hToO6I^`kwD^Nb6DX`!`kq$i8pbsRvv5JvCOD1jXxPtWDYuND zksj4OCFDra;kNIOjH1iq3ZOTyC535qw3u(h_OfoC<7H*Mwo|(()WW0M-m0G)%P~=& zb5-$-1pix=SPF~Yu@mm~6Uc03zSIA}LQYj2GZ_1_5OC1=F?`MUM}d9T7~#>S;Q<== zW7XG~TO78%F;KsqPRNDJ=dX4NDf;{j0dNBx1|c~GUkeGu+WnjN)8;N#?(BUfumJyazXk&&0m*XR$Kx0A{C*uoCM;#^IU z>9%2h+vH24eF|sN+THvrubq34VAwS+{zw*-%sZQl4oHKYT4(yhE-7D&y>#KKo&y2{ zjWMsCEOB4G7V!H>MsNI(T-J@(MsN8HI{1+o@0Y;)LM2dqu1^2zD~woSQ)`RPfc6#4 d|MPy@4T#q>0lbIGNPk|6@2l(FE4gbO^dH)}ZlVAH diff --git a/man/plot_series_comparison.Rd b/man/plot_series_comparison.Rd index b8a41f2..5607701 100644 --- a/man/plot_series_comparison.Rd +++ b/man/plot_series_comparison.Rd @@ -63,7 +63,7 @@ igpm <- get_igpm(2020, 2024) comparison_plot <- plot_series_comparison( data_list = list(SELIC = selic, IPCA = ipca, IGP-M = igpm), - y_vars = c("rate", "value", "value"), + y_vars = c("value", "value", "value"), date_vars = c("date", "date", "date"), scale_type = "index", title = "Comparison of Brazilian Economic Indicators", From 11135cf6c6bc691ed3eedcdc04d8aefe7171fce8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Paulo=20Barbosa?= Date: Sun, 4 Jan 2026 21:10:26 -0500 Subject: [PATCH 3/5] Update README.Rmd --- README.Rmd | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.Rmd b/README.Rmd index 2945b59..325dc14 100644 --- a/README.Rmd +++ b/README.Rmd @@ -1,7 +1,5 @@ --- title: "README" -author: "brfinance" -date: "2026-01-05" output: github_document --- From 1cca373d0cf94af35d2dad40318475226856a90e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Paulo=20Barbosa?= Date: Sun, 4 Jan 2026 21:16:51 -0500 Subject: [PATCH 4/5] README final --- README.Rmd | 52 +++++++++++++++++++++++++++++++++---------------- README.md | 57 ++++++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 77 insertions(+), 32 deletions(-) diff --git a/README.Rmd b/README.Rmd index 325dc14..e72dcfd 100644 --- a/README.Rmd +++ b/README.Rmd @@ -112,30 +112,48 @@ calc_irr(c(-1000, 300, 400, 500)) # Loan payment calc_pmt(rate = 0.02, n = 24, pv = 10000) ``` +# Function Reference +## Data retrieval functions (`get_*`) -# Available Features +* `get_inflation_rate()` → Retrieves Brazil’s official inflation rate (IPCA) +* `get_selic_rate()` → Retrieves the SELIC interest rate +* `get_cdi_rate()` → Retrieves the CDI interest rate +* `get_exchange_rate()` → Retrieves official exchange rates +* `get_gdp_growth()` → Retrieves GDP growth rates +* `get_unemployment()` → Retrieves unemployment rate from PNAD Contínua +* `get_sgs_series()` → Retrieves any Central Bank (SGS) time series by code -* Inflation (IPCA) -* SELIC and CDI rates -* Exchange rates -* GDP growth -* Unemployment (PNAD Contínua) -* Central Bank time series (SGS) +All `get_*` functions support flexible date inputs: +`"YYYY"`, `"YYYY-MM"`, or `"YYYY-MM-DD"`. -# Financial Calculators +--- + +## Plotting functions (`plot_*`) -* Present & Future Value (PV / FV) -* Compound & continuous interest -* NPV, IRR, PMT, rate, nper -* Annuities and amortization schedules -* Rule of 72 and Rule of 114 +* `plot_inflation_rate()` → Plots IPCA inflation over time +* `plot_selic_rate()` → Plots the SELIC interest rate +* `plot_cdi_rate()` → Plots the CDI interest rate +* `plot_exchange_rate()` → Plots exchange rate time series +* `plot_gdp_growth()` → Plots GDP growth over time +* `plot_unemployment()` → Plots unemployment rate time series +* `plot_series_comparison()` → Compares multiple economic indicators in one chart -# Visualization +--- -* Inflation, SELIC, CDI and exchange rate plots -* Unemployment time series -* Multi-series comparison plots +## Financial calculators (`calc_*`) + +* `calc_pv()` → Present Value +* `calc_fv()` → Future Value +* `calc_npv()` → Net Present Value +* `calc_irr()` → Internal Rate of Return +* `calc_pmt()` → Loan payment calculation +* `calc_rate()` → Interest rate calculation +* `calc_nper()` → Number of periods +* `calc_compound_interest()` → Compound interest calculation +* `calc_continuous_interest()` → Continuous compounding +* `calc_rule72()` → Rule of 72 approximation +* `calc_rule114()` → Rule of 114 approximation # Language Support diff --git a/README.md b/README.md index 7f4f2b5..0aa83e2 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,5 @@ README ================ -brfinance -2026-01-05 # brfinance 📊🇧🇷 @@ -119,22 +117,51 @@ calc_irr(c(-1000, 300, 400, 500)) calc_pmt(rate = 0.02, n = 24, pv = 10000) ``` -# Available Features +# Function Reference -- Inflation (IPCA) -- SELIC and CDI rates -- Exchange rates -- GDP growth -- Unemployment (PNAD Contínua) -- Central Bank time series (SGS) +## Data retrieval functions (`get_*`) -# Financial Calculators +- `get_inflation_rate()` → Retrieves Brazil’s official inflation rate + (IPCA) +- `get_selic_rate()` → Retrieves the SELIC interest rate +- `get_cdi_rate()` → Retrieves the CDI interest rate +- `get_exchange_rate()` → Retrieves official exchange rates +- `get_gdp_growth()` → Retrieves GDP growth rates +- `get_unemployment()` → Retrieves unemployment rate from PNAD Contínua +- `get_sgs_series()` → Retrieves any Central Bank (SGS) time series by + code -- Present & Future Value (PV / FV) -- Compound & continuous interest -- NPV, IRR, PMT, rate, nper -- Annuities and amortization schedules -- Rule of 72 and Rule of 114 +All `get_*` functions support flexible date inputs: `"YYYY"`, +`"YYYY-MM"`, or `"YYYY-MM-DD"`. + +------------------------------------------------------------------------ + +## Plotting functions (`plot_*`) + +- `plot_inflation_rate()` → Plots IPCA inflation over time +- `plot_selic_rate()` → Plots the SELIC interest rate +- `plot_cdi_rate()` → Plots the CDI interest rate +- `plot_exchange_rate()` → Plots exchange rate time series +- `plot_gdp_growth()` → Plots GDP growth over time +- `plot_unemployment()` → Plots unemployment rate time series +- `plot_series_comparison()` → Compares multiple economic indicators in + one chart + +------------------------------------------------------------------------ + +## Financial calculators (`calc_*`) + +- `calc_pv()` → Present Value +- `calc_fv()` → Future Value +- `calc_npv()` → Net Present Value +- `calc_irr()` → Internal Rate of Return +- `calc_pmt()` → Loan payment calculation +- `calc_rate()` → Interest rate calculation +- `calc_nper()` → Number of periods +- `calc_compound_interest()` → Compound interest calculation +- `calc_continuous_interest()` → Continuous compounding +- `calc_rule72()` → Rule of 72 approximation +- `calc_rule114()` → Rule of 114 approximation # Visualization From d6f95e21266bb102c7ac1b15d7fb90df6bc877af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Paulo=20Barbosa?= Date: Sun, 4 Jan 2026 21:31:37 -0500 Subject: [PATCH 5/5] =?UTF-8?q?Atualiza=C3=A7=C3=A3o=20final=20est=C3=A9ti?= =?UTF-8?q?co=20do=20pacote?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DESCRIPTION | 4 ++-- R/plot_series_comparison.R | 8 +++++-- R/zzz.R | 45 +++++++++++++++++------------------ README.Rmd | 15 ++++++++---- README.md | 20 +++++++--------- man/plot_series_comparison.Rd | 8 +++++-- 6 files changed, 55 insertions(+), 45 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index def0fc1..869b140 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: brfinance Title: Simplified Access to Brazilian Financial and Macroeconomic Data -Version: 0.7.1.900 +Version: 0.7.2.900 Authors@R: person(given = "João Paulo", family = "dos Santos Pereira Barbosa", email = "joao.31582129@gmail.com",role = c("aut", "cre")) Description: It offers simplified access to Brazilian macroeconomic and financial indicators selected from official sources, such as the 'IBGE' (Brazilian Institute of Geography and Statistics) via the 'SIDRA' API and the 'Central Bank of Brazil' via the 'SGS' API. It allows users to quickly retrieve and visualize data series such as the unemployment rate and the Selic interest rate. This package was developed for data access and visualization purposes, without generating forecasts or statistical results. For more information, see the official APIs: and . @@ -10,7 +10,7 @@ BugReports: https://github.com/efram2/brfinance/issues Encoding: UTF-8 LazyData: true Roxygen: list(markdown = TRUE) -RoxygenNote: 7.3.2 +RoxygenNote: 7.3.3 Depends: R (>= 4.1.0) Imports: diff --git a/R/plot_series_comparison.R b/R/plot_series_comparison.R index d20d6cc..9ae7d34 100644 --- a/R/plot_series_comparison.R +++ b/R/plot_series_comparison.R @@ -6,8 +6,12 @@ #' @param y_vars Vector of column names containing the values to plot from each data frame #' @param date_vars Vector of column names containing dates from each data frame #' @param language Language for labels: "pt" (Portuguese) or "eng" (English) -#' @param scale_type Type of scaling: "none" (raw values), "index" (index to 100), -#' "percent_change" (percentage change from first observation) +#' @param scale_type Scaling applied to the series: +#' \describe{ +#' \item{"none"}{Plots raw values as provided} +#' \item{"index"}{Indexes all series to 100 at the first observation} +#' \item{"percent_change"}{Plots percentage change relative to the first observation} +#' } #' @param title Plot title #' @param subtitle Plot subtitle #' @param y_label Y-axis label diff --git a/R/zzz.R b/R/zzz.R index 595c445..5c06bdb 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -1,32 +1,31 @@ .onAttach <- function(libname, pkgname) { packageStartupMessage( - "====================================================\n", - "brfinance - Democratizing access to Brazilian economic data\n", - "====================================================\n\n", + "brfinance: Brazilian macroeconomic data and financial tools\n", + "------------------------------------------------------------\n\n", - "DOWNLOAD ECONOMIC DATA:\n", - " * get_selic_rate() - SELIC interest rate (annual)\n", - " * get_inflation_rate() - IPCA inflation with YTD & 12-month rates\n", - " * get_unemployment() - Quarterly unemployment rate (IBGE PNAD)\n", - " * get_exchange_rate() - US Dollar exchange rate (commercial)\n", - " * get_cdi_rate() - CDI interbank rate\n", - " * get_gdp_growth() - Quarterly GDP growth rate\n\n", + "Data access functions (examples):\n", + " get_selic_rate() SELIC interest rate\n", + " get_inflation_rate() IPCA inflation indicators\n", + " get_unemployment() Unemployment rate (PNAD Continua)\n", + " get_exchange_rate() Exchange rates\n", + " get_cdi_rate() CDI interbank rate\n", + " get_gdp_growth() GDP growth rates\n\n", - "VISUALIZE DATA:\n", - " * plot_selic_rate() - Plot SELIC evolution\n", - " * plot_unemployment() - Plot unemployment trends\n", - " * More plots coming soon!\n\n", + "Visualization helpers:\n", + " plot_selic_rate()\n", + " plot_unemployment()\n", + " plot_series_comparison()\n\n", - "KEY FEATURES:\n", - " * Set language = 'pt' for Portuguese column names\n", - " * Flexible date formats: YYYY, YYYY-MM, or YYYY-MM-DD\n", - " * Automatic variable labels with labelled package\n", - " * Built-in data validation and error handling\n\n", + "General features:\n", + " Flexible date inputs: YYYY, YYYY-MM, YYYY-MM-DD\n", + " Language support: English (default) or Portuguese\n", + " Consistent outputs across data sources\n\n", - "Learn more: browseVignettes('brfinance')\n", - "Report issues: https://github.com/efram2/brfinance/issues\n\n", + "See documentation:\n", + " ?brfinance\n", + " browseVignettes('brfinance')\n\n", - "Developed by Joao Paulo dos Santos P. Barbosa (efram2)\n", - "Contribute: https://github.com/efram2/brfinance" + "Issues & contributions:\n", + " https://github.com/efram2/brfinance" ) } diff --git a/README.Rmd b/README.Rmd index e72dcfd..1fdbfb7 100644 --- a/README.Rmd +++ b/README.Rmd @@ -56,7 +56,7 @@ library(brfinance) ``` # 🚀 Quick Start -Inflation (IPCA) +**Inflation (IPCA)** ```{r fig.ipca, fig.width=7, fig.height=4} plot_inflation_rate( @@ -64,7 +64,7 @@ plot_inflation_rate( ) ``` -SELIC interest rate +**SELIC interest rate** ```{r fig.selic, fig.width=7, fig.height=4} plot_selic_rate( @@ -72,7 +72,7 @@ plot_selic_rate( ) ``` -Unemployment rate +**Unemployment rate** ```{r fig.unemp, fig.width=7, fig.height=4} plot_unemployment( @@ -80,7 +80,12 @@ plot_unemployment( ) ``` -Compare multiple indicators in one chart +**Compare multiple indicators in one chart** + +You can compare different economic indicators using: +1. raw values +2. indexed series (base = first observation) +3. percentage change from the first observation * Want to analyze how different economic indicators evolve together? * Use *plot_series_comparison()* to compare multiple time series in a single, clean visualization. @@ -100,7 +105,7 @@ plot_series_comparison( ) ``` -## Financial Calculators (minimalista) +**Financial Calculators (minimalista)** ```r # Net Present Value diff --git a/README.md b/README.md index 0aa83e2..768d4f5 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ library(brfinance) # 🚀 Quick Start -Inflation (IPCA) +**Inflation (IPCA)** ``` r plot_inflation_rate( @@ -61,7 +61,7 @@ plot_inflation_rate( -SELIC interest rate +**SELIC interest rate** ``` r plot_selic_rate( @@ -71,7 +71,7 @@ plot_selic_rate( -Unemployment rate +**Unemployment rate** ``` r plot_unemployment( @@ -81,7 +81,11 @@ plot_unemployment( -Compare multiple indicators in one chart +**Compare multiple indicators in one chart** + +You can compare different economic indicators using: 1. raw values 2. +indexed series (base = first observation) 3. percentage change from the +first observation - Want to analyze how different economic indicators evolve together? - Use *plot_series_comparison()* to compare multiple time series in a @@ -104,7 +108,7 @@ plot_series_comparison( -## Financial Calculators (minimalista) +**Financial Calculators (minimalista)** ``` r # Net Present Value @@ -163,12 +167,6 @@ All `get_*` functions support flexible date inputs: `"YYYY"`, - `calc_rule72()` → Rule of 72 approximation - `calc_rule114()` → Rule of 114 approximation -# Visualization - -- Inflation, SELIC, CDI and exchange rate plots -- Unemployment time series -- Multi-series comparison plots - # Language Support All main functions support bilingual output: diff --git a/man/plot_series_comparison.Rd b/man/plot_series_comparison.Rd index 5607701..b330588 100644 --- a/man/plot_series_comparison.Rd +++ b/man/plot_series_comparison.Rd @@ -29,8 +29,12 @@ plot_series_comparison( \item{language}{Language for labels: "pt" (Portuguese) or "eng" (English)} -\item{scale_type}{Type of scaling: "none" (raw values), "index" (index to 100), -"percent_change" (percentage change from first observation)} +\item{scale_type}{Scaling applied to the series: +\describe{ +\item{"none"}{Plots raw values as provided} +\item{"index"}{Indexes all series to 100 at the first observation} +\item{"percent_change"}{Plots percentage change relative to the first observation} +}} \item{title}{Plot title}