options(scipen = 999) # Desactivar notación científica library(ggplot2) library(knitr) library(scales)
cat(“¿Qué es una amortización?”) cat(“————————”) cat(“Proceso financiero para cancelar una deuda gradualmente con pagos periódicos.”)
cat(“Tipos principales:”) cat(“- Amortización gradual: Pagos iguales (interés disminuye, abono a capital aumenta)”) cat(“- Amortización constante: Abono a capital fijo (pagos decrecientes)”)
generar_tabla_amortizacion <- function(monto, tasa, periodos, tipo = “gradual”) { if (tipo == “gradual”) { pago <- monto * tasa / (1 - (1 + tasa)^-periodos) saldo <- monto tabla <- data.frame( Periodo = integer(), Pago = numeric(), Interes = numeric(), Capital = numeric(), Saldo = numeric() )
for (i in 1:periodos) {
interes <- saldo * tasa
capital <- pago - interes
saldo <- saldo - capital
if (i == periodos) { # Ajuste por decimales
saldo <- 0
capital <- pago - interes
}
tabla <- rbind(tabla, data.frame(
Periodo = i,
Pago = round(pago, 2),
Interes = round(interes, 2),
Capital = round(capital, 2),
Saldo = round(saldo, 2)
))
}
return(tabla)
} else { # Amortización constante capital <- monto / periodos saldo <- monto tabla <- data.frame( Periodo = integer(), Pago = numeric(), Interes = numeric(), Capital = numeric(), Saldo = numeric() )
for (i in 1:periodos) {
interes <- saldo * tasa
pago <- capital + interes
saldo <- saldo - capital
tabla <- rbind(tabla, data.frame(
Periodo = i,
Pago = round(pago, 2),
Interes = round(interes, 2),
Capital = round(capital, 2),
Saldo = round(saldo, 2)
))
}
return(tabla)
} }
cat(“ - Depósitos para obtener $750,000”) cat(“—————————————–”)
tasa_trimestral <- 0.15/4 monto_deseado <- 750000 deposito <- 25000
n_periodos <- log(1 + (monto_deseado * tasa_trimestral / deposito)) / log(1 + tasa_trimestral) cat(sprintf(“Se necesitan aproximadamente %d depósitos trimestrales.”, ceiling(n_periodos)))
cat(“ - Cancelar deuda de $690,000”) cat(“————————————-”)
tasa_mensual <- 0.18/12 deuda <- 690000 pago_mensual <- 120000
n_pagos <- -log(1 - (deuda * tasa_mensual / pago_mensual)) / log(1 + tasa_mensual) cat(sprintf(“Se necesitan aproximadamente %d pagos mensuales.”, ceiling(n_pagos)))
cat(“ - Financiamiento de automóvil”) cat(“————————————–”)
precio_auto <- 100000 enganche <- precio_auto * 0.3 financiamiento <- precio_auto - enganche tasa_mensual_efectiva <- 0.15/12 # Asumiendo que es nominal anual periodos <- 7
pago_mensual <- financiamiento * tasa_mensual_efectiva / (1 - (1 + tasa_mensual_efectiva)^-periodos) cat(sprintf(“Pago mensual aproximado: $%s”, comma(round(pago_mensual, 2))))
tabla_auto <- generar_tabla_amortizacion(financiamiento, tasa_mensual_efectiva, periodos) print(kable(tabla_auto, align = ‘c’))
cat(“ - Crédito empresarial”) cat(“——————————”)
credito <- 15000 tasa_trimestral <- 0.11 trimestres <- 8
pago_trimestral <- credito * tasa_trimestral / (1 - (1 + tasa_trimestral)^-trimestres) cat(sprintf(“Pago trimestral aproximado: $%s”, comma(round(pago_trimestral, 2))))
tabla_credito <- generar_tabla_amortizacion(credito, tasa_trimestral, trimestres) print(kable(tabla_credito, align = ‘c’))
grafico_amortizacion <- function(tabla, titulo) { tabla_larga <- reshape2::melt(tabla[, c(“Periodo”, “Interes”, “Capital”)], id.vars = “Periodo”)
ggplot(tabla_larga, aes(x = Periodo, y = value, fill = variable)) + geom_bar(stat = “identity”) + labs(title = titulo, x = “Periodo”, y = “Monto”, fill = “Componente”) + scale_fill_manual(values = c(“Interes” = “#FF6B6B”, “Capital” = “#4ECDC4”)) + theme_minimal() + scale_y_continuous(labels = dollar) }
print(grafico_amortizacion(tabla_credito, “Composición de Pagos - Crédito Empresarial”))
cat(“entre Valor Presente y Valor Futuro”) cat(“——————————————–”)
vp <- 10000 tasa <- 0.10 n <- 5
vf <- vp * (1 + tasa)^n intereses_vf <- vf - vp
pago_anual <- vp * tasa / (1 - (1 + tasa)^-n) intereses_vp <- n * pago_anual - vp
cat(sprintf(“Valor Presente ($10,000): Intereses totales = $%s”, comma(round(intereses_vp, 2)))) cat(sprintf(“Valor Futuro ($10,000): Intereses totales = $%s”, comma(round(intereses_vf, 2))))