Professional Documents
Culture Documents
e-mail:
jjramos@.yahoo.com
Noviembre-2004
Resumen
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.
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:
3
Como vemos, desgraciadamente, en la mayorı́a de los problemas reales, estas
dos condiciones no se cumplen.
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)
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
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 #*#
#*#--------------------------------------------------------------#*#
#******************************************************************#
"Valor.Presente.Futuro"<-function(Fv,n,i)
{
Pf<-Fv/(1 + i)^n
return("Valor presente del valor futuro es",Pf)
}
"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.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.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.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.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.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.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))
}
}
4
}
"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)
}
}
#*******************************#
#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)