You are on page 1of 15

Cálculo de la Tasa Interna de Retorno(TIR)

basado en una aplicación simple del Modelo


Lineal Generalizado

John Jairo Ramos Tapia

Universidad Nacional-Sede Medellı́n

e-mail:
jjramos@.yahoo.com

Noviembre-2004
Resumen

La mayorı́a de los autores coinciden en afirmar que el tercero de los tres


métodos más importante del análisis económico es el de Tasa Interna de Re-
torno. Sin embargo, este hecho no parece ser tenido profundamente en cuenta
en el momento de cuantificar el valor de ésta. A los ingenieros que yacen en
un proceso de aprendizaje de las herramientas fundamentales para el análisis
económico en ingenierı́a, se les presenta, sólo como alternativa, el menos exac-
to de los métodos para efectuar el cálculo de la TIR, asevero que es el menos
exacto porque sin lugar a dudas existen otros mejores, y las herramientas
de ingenierı́a básica que manejamos nos propenden desarrollar algunos con-
forme nuestra conveniencia. En este artı́culo presento con extremo cuidado
algunas disquisiciones sobre el método aprendido en clase, y se propone un
método sencillo basado en una aplicación de un modelo de regresión simple
y lineal. En general los conceptos son los mismos, sólo que éstas diferencias
permiten converger rápidamente con una seguridad absoluta que en el otro
método existe sólo por suerte, hacia un valor más real de la TIR.
1. Aspectos del cálculo de la Tasa Interna de Retorno

Es sabido que en la solución de problemas sencillos para ilustrar un con-


cepto especı́fico, los cálculos son por lo general, bastante sencillos. Esto no
sucede a medida que los problemas se vuelven más reales, donde cada com-
plicación adicional hace que los cálculos sean sustancialmente más largos.
Fenómenos como la depreciación, los impuestos, incertidumbre originada por
cambios drásticos en polı́ticas económicas, las estimaciones de la fluctuación
de los eventos futuros, el análisis de sensibilidad, todo esto se combina en la
realidad aumentando la complejidad de los cálculos en grado sumo.
En muchas situaciones será factible utilizar herramientas computacionales
adecuadas, pero en todas ellas es obligatorio apoyarse en métodos que mi-
nimicen el error en los cálculos numéricos. Como los cálculos de la TIR pueden
ser complicados y lentos, en el desarrollo del curso sólo se presentó una solu-
ción superficial, aunque de hecho, las soluciones expuestas en los textos de
ingenierı́a económica que manejamos, también lo son.
Para el cálculo de la TIR se estudió una ecuación que relacionaba el valor
presente neto con dos tasas de interés tomadas como referencia. Una tasa
de interés i1 produce un valor presente neto, V P N1 , y una tasa de interés i2
produce un valor presente neto, V P N2 . La fórmula expuesta para determinar
el valor de la TIR, es como sigue:

TIR = i2 − V P N2 ((i2 − i1 )/(V P N2 − V P N1 ) (1)

El cálculo por la ecuación anterior es poco exacto, y depende de los valores


de referencias de las tasas de interés que se tomen. Además, algo que es poco
susceptible de comprender de un todo, se puede caer en absurdos, aún en
problemas que parecı́an grandemente sencillos.

1.1 Los problemas del método tradicional


El método aprendido en clase tiene muchos problemas técnicos asociados a
su forma de operación que van desde la simple especulación hasta cálculos

1
indeseados. Hay que tener en cuenta que es sencillo de utilizar en polinomios
de tercer grado, de ahı́ en adelante aumenta la complejidad y se hace más
inseguro el cálculo numérico. En términos generales este método sólo nos pro-
porciona un valor cercano a la TIR(no en todas las circunstancias como se
expondrá más adelante), pero no garantiza valores óptimos para una evalu-
ación más robusta.Puede conducir a conclusiones absurdas sin que el analista
pueda detectar a su vez de que lo son, estadı́sticamente estarı́a cayendo en
el denominado Error Tipo I.

Ilustraremos las situaciones anteriores retomando el primer ejemplo re-


suelto en clase; cabe además recordar que en la primera operación aplicando
la fórmula se llegó a un valor absurdo, y al final, éste se resolvió con los va-
lores estimados para las tasas de referencias que eran de antemano conocidos
por el profesor, de no ser ası́ el tiempo para determinar un valor satisfactorio
habrı́a sido mayor.
La información que se tenı́a para el ejercicio era la sigiente:

Flujo de caja
0 -40.000
1 12.000
2 12.000
3 12.000
4 12.000
El primer gran problema técnico del método es la forma de establecer las
tasas de referencias para evaluar la ecuación (1), esto hace que no se tenga
en cuenta el concepto de la TIR y el horizonte que determina la tasa de interés
de oportunidad. Suponiendo que en este proyecto no se conoce, tomaremos
primero i1 = 0,06 y i2 = 0,09. Para facilitar el cálculo del valor presente
neto, emplearé un código de programación en lenguaje C que escribı́ para
ser compilado en plataforma R, al final del documento se anexa el código
utilizado. Con ayuda de este programa, se determinó un V P N1 = 1581,27 y
un V P N2 = −1123,36. Aplicando (1), el valor de TIR corespondiente según
éstos cálculos es T IR = 0,0775, al corroborar en la expresión de V P N , el
valor encontrado es -32.3. Ası́ de primer plano, luego de agotar esfuerzos, uno
encuéntrase en la situación inicial. Haciendo éstas operaciones repetitivas se

2
logra encontrar por fin un valor satisfactorio con i1 = 0,07 y i2 = 0,08 de
0,0772. Con este último valor V P N = −5,5. Este valor se aceptó como el
real de la TIR, o en torno al cual se tomarı́a la decisión. Observe que V P N
es muy grande con respecto a cero. Un punto interesante serı́a analizar las
implicaciones económicas a que ello conlleva. Supongamos que el valor real
de nuestra tasa de interés de oportunidad, io p, está comprendido entre el
valor real de la TIR y la TIR* estimada, de inmediato entendemos que el
proyecto se acepta según el criterio conocido, cuando en realidad debió re-
chazarse(Error Tipo I). Ello sucede porque la ecuación interpola linealmente
los dos puntos de referencia, y que esté cerca o lejos del valor real de la
TIR depende de cuan cerca estén los V P N calculados, en este escenario un
modelo de regresión lineal puede ajustarse con un mı́nimo error al valor re-
al, y es la idea central de la propuesta. Esto puede parecer una nimiedad
para un problema sencillo, pero en situaciones de mayor complejidad suele
presentarse con frecuencia y no es fácil caer en la cuenta sino se tiene una
herramienta de apoyo fuerte.
Los siguiente es un resumen de los problemas técnicos del método, a juz-
gar por mi propia intuición:

Para problemas complejos, es decir, reales, que relacionen diversos com-


portamientos económicos no es confiable
Sólo es aplicable, someramente, en situaciones sencillas en las cuales se
tiene un sólo cambio de signo en el flujo de caja
El número de cálculos que hay que hacer es mayor que un método que
entrega mejores resultados
No tiene en cuenta el horizonte de la tasa de interés de oportunidad
Sólo interpola dos puntos sin saber la magnitud del rango en el que
debe evaluarse para minizar el error en los cálculos.
La siguiente es una opinión de Donald G. Newnan1 al respecto:
“El cálculo de la TIR, relacionando los costos y los beneficios
(V P costos = V P beneficios) funciona muy bien si la situación re-
presenta adecuadamente una inversión pura o un préstamo puro
y si existe una sola tasa de rendimiento positiva”.
1
Analista económico de San Jose State University, California

3
Como vemos, desgraciadamente, en la mayorı́a de los problemas reales, estas
dos condiciones no se cumplen.

2. Los cambios de signo en un flujo de caja y sus implicaciones


sobre el cálculo de la TIR

Aunque existe un valor único para la TIR, sucede con frecuencia, que
parecen existir muchos valores. Esta situación es originada por los cambios
de signos en un flujo de caja debido a que los ingresos y los egresos figuran
intercalados en diferentes unidades de tiempo. El método que aprendimos en
clase no puede superar estas implicaciones que podrı́an originar una decisión
errónea.
2.1. Cero cambios de signo
Que no exista ningún cambio de signo, se debe a que todos los términos
tengan signo positivo, representando ingresos, o bien que todos los términos
tengan signo negativo cuando reflejan una serie de desembolsos.
2.2. Un cambio de signo
Este suele ser el patrón de flujo normal. Razonablemente se espera un único
valor positivo de i.
2.3. Dos o más cambios de signo
Esta situación ocasiona múltiples valores que imposibilitan el cálculo ver-
dadero de la TIR, la mayorı́a de autores hablan de múltiples TIR, cayendo
en el error de interpretar mal el concepto que tiene este ı́ndice de evaluación.
La consecuencia relevante cuando existen múltiples cambios de signo, es
que en general, no existe un método exacto para determinar el valor real de
la TIR.

3. Método propuesto
Se puede tener una manera sencilla de ajustar un valor de la TIR basado
en la aplicación de un modelo de Regresión Lineal Simple y todas sus im-
plicaciones. Tengamos en cuenta que en todas las alternativas económicas
se distingue un valor inicial que es menos afectado en la unidad de tiempo
por la tasa del inversionista, puede decirse que es menos sensible al impacto
inmerso en el criterio del valor presente neto.
Digamos que F (i) es la expresión que reune todos los valores del flujo de
caja que son afectados de una u otra manera por la tasa i de interés en el

4
tiempo “hoy”, y que Io es el valor que no es afectado. Entonces se presenta
la siguiente ecuación para el flujo de caja.

F(i)=Io (2)

Para una tasa de interés de oportunidad i0 se evalúa la ecuación (2) para


una secuencia de valores inferiores al valor i0 y para otra secuencia de valores
superiores a este mismo valor. Se obtendrá una secuencia de valores I0 ∗ para
cada uno de éstos valores. Se evalúa también (2) para la io correspondiente y
se obtiene igualmente su I0 ∗. Observe en la ecuación que Io es el valor que se
obtiene al evaluar la T IR del proyecto y es el que será estimado por el modelo
de regresión ajustado.En la tabla siguiente se refleja este procedimiento:

i∗, Io ∗ = F (i∗)
i1 ∗ I1 ∗
i2 ∗ I2 ∗
... ...
i0 Io ∗
... ...
ik ∗ Ik ∗
in ∗ In ∗
Aplicando este método usted puede establecer dos puntos por encima y dos
por debajo del valor de la tasa de interés de oportunidad y determinar un
valor satisfactorio de la TIR. Lo importante de esto es que las calculadoras
normales que manejamos, hacen el procedimiento de regresión de una manera
sencilla y rápida. Luego se evalúa el Io y el valor devuelto corresponde a la
TIR.
Tampoco es necesario determinar los valores de la tabla a través de (2),
con base en el valor de io , estos valores se pueden obtener directamente ha-
ciendo uso de los factores de equivalencia.

5
4. Una alternativa computacional de Libre distribución

En los problemas reales, los cálculos manuales son tediosos. Es recomend-


able valerse de métodos de simulación computacionales para la evaluación de
alternativas o determinación de valores especı́ficos. Como el concepto impor-
tante para la evaluación por medio de la TIR es el criterio del valor presente
neto, aquı́ les anexo un código de programación en R2 que facilitará el c´lculo
según la situación. El R es un lenguaje de programación de alto nivel de libre
distribución, la programación es iteractiva y el lenguaje es estructurado. Tan-
bién es poderoso como paquete estadı́stico, y para la obtención de gráficos
mediante programación, es lo mejor que esxiste. Su manejo exige sólo cier-
tas habilidades de programación y unos conocimientos básicos de algoritmos.
En plataforma R usted puede programa en código C o FORTRAN, o lograr
funciones hı́bridas poderosas. La que aquı́ se presenta es una función hı́bri-
da entre lenguaje C y R; usted puede modificarla para el cálculo de valores
futuros y adaptarla para evaluar otros conceptos de Ingenierı́a económica.
4.1 Procedimiento para utilizar el código de programación anexo
Iniciando una sesión normal en widow, aparece el promt(¿)del programa.
Selecione el código anexo y cópielo en la cosola de R. Después de haberlo
corrido el queda fijo en el programa activo, de modo que puede eliminarlo,
pues sólo se trabaja con la función de programación establecida llamándola.
4.2 Ejemplo calculando Valor Presente Neto de una anualidad,
un valor futuro, un gradiente aritmético y uno geométrico
Suponga que se tiene un proyecto a 20 años. Un valor futuro en el año 15 de
15000, una anualidad de 5500, un gradiente aritmético de 2200 y un gradiente
geométrico de 4000 que se incrementa en s = 2 %, a una tasa i = 7 %.
Para la situación anterior Fv = 15000, A = 5500, G = 2200, T = 4000. Se
llaman las funciones respectivas y se le entregan los argumentos que conlle-
van.
Para hallar el valor presente futuro se emplea la función
Valor.Presente.Futuro(Fv,n,i) con sus valores ası́:
Valor.Presente.Futuro(15000,15,0.07). La situación en R y lo que produce
2
Está disponible en la sala del Bloque 21 la versión 1.7.1. Lo puede bajar gratuitamente
de la página http://cran.r-project.org

6
es como sigue.
¿Valor.Presente.Futuro(15000,15,0.07)
[[1]]
[1] ”Valor presente del valor futuro es”
Pf
[1] $ 5436.69
Similarmente se obtienen los otros valores con
Valor.Presente.Anualidad(A,n,i)
Valor.Presente.GradienteA(G,n,i)
Valor.Presente.GradienteG(T,n,i,s)

7
#******************************************************************#
#*#--------------------------------------------------------------#*#
#*# UN CÓDIGO DE PROGRAMACIÓN EN R #*#
#*# PARA EL CÁLCULO DE FUNCIONES BÁSICAS DE INGENIERÍA ECONÓMICA #*#
#*# POR: JOHN JAIRO RAMOS T. e-mail: jjramost@yahoo.com #*#
#*#--------------------------------------------------------------#*#
#******************************************************************#

# Operaciones para valores escalares


------------------------------------

# VALOR PRESENTE DE UN FUTURO #


# Factor (P/F,i%,n)

"Valor.Presente.Futuro"<-function(Fv,n,i)
{
Pf<-Fv/(1 + i)^n
return("Valor presente del valor futuro es",Pf)
}

# VALOR PRESENTE DE UNA ANUALIDAD #


# Factor (P/A,i%,n)

"Valor.Presente.Anualidad"<-function(A,n,i)
{
if(i==0.0)
stop("El valor de la tasa de interés debe ser distinto de cero")
Pa<-A*((1+i)^n - 1)/(i*(1 + i)^n)
return("Valor presente de la anualidad es",Pa)
}

# VALOR PRESENTE DE UN GRADIENTE ARITMÉTICO #


# Factor (P/G,i%,n)

"Valor.Presente.GradienteA"<-function(G,n,i)
{
if(i==0.0)
stop("El valor de la tasa de interés debe ser distinto de cero")
a<-(1+i)^n - 1
b<-(i*(1 + i)^n)
c<-(1 + i)^n
G<-G/i
Pg<-G*((a/b) - (n/c))
return("Valor presente del gradiente es",Pg)
}

# VALOR PRESENTE DE UN GRADIENTE GEOMÉTRICO #


# Factor (P/T,i%,s%,n)

"Valor.Presente.GradienteG"<-function(T,n,i,s)
{
a<-((1+s)/(1+i))^n - 1
b<-s-i
c<-(1 + i)
if(i==s)
Pt<-(T*n)/c
else
Pt<-T*(a/b)
return("Valor presente del gradiente es",Pt)
}

# CALCULAR VALOR DE LA TIR #

Calcular.TIR<-fucntion(VPF=true,VPA=true,VPGA=true,VPGG=true,
Fv=true,A=true,G=true,T=true,n=true,s=true)
{
Valor.Presente.Futuro<-function(Fv,n,i)
VPF<-Valor.Presente.Futuro

Valor.Presente.Anualidad<-function(A,n,i)
VPA<-Valor.Presente.Anualidad

Valor.Presente.GradienteA<-function(G,n,i)
VPGA<-Valor.Presente.GradienteA

2
Valor.Presente.GradienteG<-function(T,n,i,s)
VPGG<-Valor.Presente.GradienteG

#---------------------------------
# Operaciones en forma matricial
#----------------------------------

# VALOR PRESENTE DE UN FUTURO #


# Factor (P/F,I%,n)

"Valor.Presente.Futuro"<-function(Fv,n,I)
{
nf<-nrow(n)
nc<-ncol(n)
PF<-matrix(rep(NA,1*nf),nc=nc)
for(i in 1:nf)
for(j in 1:nc)
{
{
PF[i,j]<-Fv[i,j]/(1 + I)^n[i,j]
}
}
return("Valor presente del valor futuro es",PF)
}

# VALOR PRESENTE DE UNA ANUALIDAD #


# Factor (P/A,I%,n)

"Valor.Presente.Anualidad"<-function(A,n,I)
{
if(I==0.0)
stop("El valor de la tasa de interés debe ser distinto de cero")
nf<-nrow(n)
nc<-ncol(n)

3
PA<-matrix(rep(NA,1*nf),nc=nc)
for(i in 1:nf)
for(j in 1:nc)
{
{
PA<-A[i,j]*((1+I)^n[i,j] - 1)/(I*(1 + I)^n[i,j])
}
}
return("Valor presente de la anualidad es",PA)
}

# VALOR PRESENTE DE UN GRADIENTE ARITMÉTICO #


# Factor (P/G,I%,n)

"Valor.Presente.GradienteA"<-function(G,n,I)
{
if(I==0.0)
stop("El valor de la tasa de interés debe ser distinto de cero")
nf<-nrow(n)
nc<-ncol(n)
PG<-matrix(rep(NA,1*nf),nc=nc)

for(i in 1:nf)
for(j in 1:nc)
{
{
# Reemplazo de términos de la ecuación
a<-((1+I)^n[i,j]) - 1
b<-I*(a+1)
c<-a+1
G[i,j]<-(G[i,j])/I
PG[i,j]<-G[i,j]*((a/b) - ((n[i,j])/c))
}
}

return("Valor presente del gradiente es",PG)

4
}

# VALOR PRESENTE DE UN GRADIENTE GEOMÉTRICO #


# Factor (P/T,I%,s%,n)

"Valor.Presente.GradienteG"<-function(T,n,I,s)
{

nf<-nrow(n)
nc<-ncol(n)
PT<-matrix(rep(NA,1*nf),nc=nc)
c<-(1 + I)
b<-(s-I)
for(i in 1:nf)
for(j in 1:nc)
{
{
a<-(((1+s)/(1+I))^n[i,j]) - 1
if(I==s)

PT[i,j]<-((T[i,j])*(n[i,j]))/c
else
PT[i,j]<-(T[i,j])*(a/b)
}
}

return("Valor presente del gradiente es",PT)


}

#*******************************#
#CALCULAR TIR

Evalue.Tir<-function(tasas,beneficios,costos){
nc<-ncol(tasas)
nf<-nrow(tasas)
vpn<-matrix(rep(NA,1*nf),nc=nc)
for(i in 1:(nf)){

5
for(j in 1:(nc)){
vpn[i,j]<-beneficios[i,j] - costos[i,j]
}
}
vpn
}
temp<-apply(tasas,1,vpn)
temp<-matrix(unlist(apply(tasas,1,vpn)),ncol=1)
temp1<-which.min(temp)

You might also like