Sobre el autor:

  1. Jimmy Cueva Ruesta

  2. E-mail: jcueva@usat.edu.pe

  3. LinkedIn: https://www.linkedin.com/in/jimmy-cueva-ruesta-30852811b/

Parámetros

rm(list = ls())
i <- 0.1  # tasa de interés
Y <- 5000 # gasto mensual
F <- 5    # costo por transacción
# Rango de número de transacciones
N <- 1:20

Cálculos

C1 <- F * N                                # Costo de corretaje
C2 <- i * (Y / (2 * N))                    # Costo de oportunidad
C_total <- C1 + C2                         # Costo total
Demanda_dinero <- Y / (2 * N)              # Demanda de dinero

DataFrame

df <- data.frame(
  N = N,
  `Costo de Corretaje (FN)` = C1,
  `Costo de Oportunidad (iY/2N)` = C2,
  `Costo Total` = C_total,
  Demanda_de_dinero = Demanda_dinero,
  check.names = FALSE
) #el check.names impide que R modifique internamente los nombres de columna, así puedes referirte a ellos exactamente como los escribiste.

print(df)
##     N Costo de Corretaje (FN) Costo de Oportunidad (iY/2N) Costo Total
## 1   1                       5                    250.00000   255.00000
## 2   2                      10                    125.00000   135.00000
## 3   3                      15                     83.33333    98.33333
## 4   4                      20                     62.50000    82.50000
## 5   5                      25                     50.00000    75.00000
## 6   6                      30                     41.66667    71.66667
## 7   7                      35                     35.71429    70.71429
## 8   8                      40                     31.25000    71.25000
## 9   9                      45                     27.77778    72.77778
## 10 10                      50                     25.00000    75.00000
## 11 11                      55                     22.72727    77.72727
## 12 12                      60                     20.83333    80.83333
## 13 13                      65                     19.23077    84.23077
## 14 14                      70                     17.85714    87.85714
## 15 15                      75                     16.66667    91.66667
## 16 16                      80                     15.62500    95.62500
## 17 17                      85                     14.70588    99.70588
## 18 18                      90                     13.88889   103.88889
## 19 19                      95                     13.15789   108.15789
## 20 20                     100                     12.50000   112.50000
##    Demanda_de_dinero
## 1          2500.0000
## 2          1250.0000
## 3           833.3333
## 4           625.0000
## 5           500.0000
## 6           416.6667
## 7           357.1429
## 8           312.5000
## 9           277.7778
## 10          250.0000
## 11          227.2727
## 12          208.3333
## 13          192.3077
## 14          178.5714
## 15          166.6667
## 16          156.2500
## 17          147.0588
## 18          138.8889
## 19          131.5789
## 20          125.0000

Ver el N óptimo

optimo <- df[which.min(df$`Costo Total`), ]
print(optimo)
##   N Costo de Corretaje (FN) Costo de Oportunidad (iY/2N) Costo Total
## 7 7                      35                     35.71429    70.71429
##   Demanda_de_dinero
## 7          357.1429

Convertir a formato largo para ggplot

library(tidyr)
## Warning: package 'tidyr' was built under R version 4.3.3
df_long <- pivot_longer(
  df,
  cols = c("Costo de Corretaje (FN)", 
           "Costo de Oportunidad (iY/2N)", 
           "Costo Total"),
  names_to = "Tipo",
  values_to = "Costo"
)

Gráficos por separado

par(mfrow = c(2, 2))  #Para juntar los 4 gráficos

# 1. Costo de oportunidad
g1 <- plot(df$N, df$`Costo de Oportunidad (iY/2N)`, type = "b", col = "blue",
           main = "Costo de Oportunidad", xlab = "N transacciones", ylab = "Costo")

# 2. Costo de corretaje
g2 <- plot(df$N, df$`Costo de Corretaje (FN)`, type = "b", col = "red",
           main = "Costo de Corretaje", xlab = "N transacciones", ylab = "Costo")

# 3. Costo total
g3 <- plot(df$N, df$`Costo Total`, type = "b", col = "purple",
           main = "Costo Total", xlab = "N transacciones", ylab = "Costo")

# 4. Demanda promedio de dinero
g4 <- plot(df$N, df$Demanda_de_dinero, type =  "b", col = "darkgreen",
           main = "Demanda Promedio de Dinero", xlab = "N transacciones", 
           ylab = "Demanda Promedio")

Gráfico según el modelo

library(ggplot2)
ggplot(df_long, aes(x = N, y = Costo, color = Tipo)) +
  geom_line(size = 1) +
  geom_point() +
  labs(
    title = "Modelo de Baumol-Tobin: Costos según número de transacciones",
    x = "Número de transacciones (N)",
    y = "Costo"
  ) +
  theme_minimal() +
  scale_color_manual(values = c(
    "Costo Total" = "black",
    "Costo de Corretaje (FN)" = "red",
    "Costo de Oportunidad (iY/2N)" = "blue"
  )) +
  theme(legend.position = "top")