Introducción

Este documento es un ejemplo básico de informe en R Markdown para publicar en RPubs.
Incluye texto, una tabla con formato y una gráfica generada con código de R.

Datos de ejemplo

datos <- tibble(
  Activo = c("KO", "AMZN", "INTC"),
  Retorno_Anual = c(0.0554, 0.1927, 0.0303),
  Volatilidad_Anual = c(0.1825, 0.3236, 0.4175),
  Peso_Portafolio = c(0.30, 0.50, 0.20)
)

datos

Tabla de resultados

datos %>%
  mutate(
    Retorno_Anual = percent(Retorno_Anual, accuracy = 0.01),
    Volatilidad_Anual = percent(Volatilidad_Anual, accuracy = 0.01),
    Peso_Portafolio = percent(Peso_Portafolio, accuracy = 0.01)
  ) %>%
  kable(
    col.names = c("Activo", "Retorno anual", "Volatilidad anual", "Peso en portafolio"),
    align = "c",
    caption = "Indicadores básicos del portafolio"
  ) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive"),
    full_width = FALSE,
    position = "center"
  ) %>%
  row_spec(0, bold = TRUE, color = "white", background = color_principal)
Indicadores básicos del portafolio
Activo Retorno anual Volatilidad anual Peso en portafolio
KO 5.54% 18.25% 30.00%
AMZN 19.27% 32.36% 50.00%
INTC 3.03% 41.75% 20.00%

Gráfica

datos_largos <- datos %>%
  pivot_longer(
    cols = c(Retorno_Anual, Volatilidad_Anual),
    names_to = "Metrica",
    values_to = "Valor"
  ) %>%
  mutate(
    Metrica = recode(
      Metrica,
      Retorno_Anual = "Retorno anual",
      Volatilidad_Anual = "Volatilidad anual"
    )
  )

ggplot(datos_largos, aes(x = Activo, y = Valor, fill = Metrica)) +
  geom_col(position = "dodge", width = 0.7) +
  scale_y_continuous(labels = percent_format(accuracy = 1)) +
  scale_fill_manual(values = c(color_principal, color_secundario)) +
  labs(
    title = "Comparación de retorno y volatilidad anual",
    x = "Activo",
    y = "Porcentaje",
    fill = "Métrica"
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5, color = color_principal),
    legend.position = "bottom",
    panel.grid.minor = element_blank()
  )

Cálculo del portafolio

retorno_portafolio <- sum(datos$Retorno_Anual * datos$Peso_Portafolio)

volatilidad_aproximada <- sqrt(sum((datos$Volatilidad_Anual * datos$Peso_Portafolio)^2))

tasa_libre_riesgo <- 0.04279

sharpe_aproximado <- (retorno_portafolio - tasa_libre_riesgo) / volatilidad_aproximada

resumen <- tibble(
  Indicador = c("Retorno esperado", "Volatilidad aproximada", "Tasa libre de riesgo", "Sharpe aproximado"),
  Valor = c(
    percent(retorno_portafolio, accuracy = 0.01),
    percent(volatilidad_aproximada, accuracy = 0.01),
    percent(tasa_libre_riesgo, accuracy = 0.01),
    round(sharpe_aproximado, 4)
  )
)

resumen %>%
  kable(
    col.names = c("Indicador", "Valor"),
    align = "c",
    caption = "Resumen del portafolio"
  ) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "responsive"),
    full_width = FALSE,
    position = "center"
  ) %>%
  row_spec(0, bold = TRUE, color = "white", background = color_principal)
Resumen del portafolio
Indicador Valor
Retorno esperado 11.90%
Volatilidad aproximada 19.01%
Tasa libre de riesgo 4.28%
Sharpe aproximado 0.401

Conclusión

El ejemplo muestra cómo estructurar un documento publicable en RPubs con secciones claras, tablas formateadas y gráficas generadas directamente desde R. Esta misma lógica se puede aplicar al trabajo completo, reemplazando los datos de ejemplo por los datos reales del Excel y el código del análisis final.