22
1 Curso Teoría de Portafolios Taller: “CAPM con librería R PerfomanceAnalytics” N. Giraldo, EIO – UN Mayo 2009

1 Curso Teoría de Portafolios Taller: CAPM con librería R PerfomanceAnalytics N. Giraldo, EIO – UN Mayo 2009

Embed Size (px)

Citation preview

Page 1: 1 Curso Teoría de Portafolios Taller: CAPM con librería R PerfomanceAnalytics N. Giraldo, EIO – UN Mayo 2009

1

Curso Teoría de Portafolios

Taller: “CAPM con librería R PerfomanceAnalytics”

N. Giraldo, EIO – UNMayo 2009

Page 2: 1 Curso Teoría de Portafolios Taller: CAPM con librería R PerfomanceAnalytics N. Giraldo, EIO – UN Mayo 2009

2

###### CARGAR LIBRERIAS

library(PerformanceAnalytics) library(fAssets) library(fPortfolio)

Page 3: 1 Curso Teoría de Portafolios Taller: CAPM con librería R PerfomanceAnalytics N. Giraldo, EIO – UN Mayo 2009

3

###### LEER DATOS

D = read.table("C:/R/Portafolios/8 acciones 2001 2003.prn",

header=TRUE,stringsAsFactors=FALSE)

###### PREPARAR DATOS

x.Date = as.Date(D[,1],"%m/%d/%Y")

x = zoo(D[,2:11], x.Date)

Page 4: 1 Curso Teoría de Portafolios Taller: CAPM con librería R PerfomanceAnalytics N. Giraldo, EIO – UN Mayo 2009

4

# convierte columna 10 = cdt90 en tasa

# efectiva diaria

r = (1+x[2:731,10]/100)^(1/252)-1

# calcula los rendimientos de 8 acciones + # columna 9 = igbc

Ret = Return.calculate(x[,1:9], method="compound")

Page 5: 1 Curso Teoría de Portafolios Taller: CAPM con librería R PerfomanceAnalytics N. Giraldo, EIO – UN Mayo 2009

5

# el dato 121 del rendimiento de igbc hay

# que corregirlo

Ret[121,9] = ( as.numeric(Ret[120,9])+ as.numeric(Ret[122,9]) ) /2

# creamos variable igbc columna 9

igbc = Ret[,9]

Page 6: 1 Curso Teoría de Portafolios Taller: CAPM con librería R PerfomanceAnalytics N. Giraldo, EIO – UN Mayo 2009

6

# calcular un beta por regresion lineal

# calcular la prima de riesgo de las acciones

Ret.ex = Ret - r

# calcular la prima de riesgo del mercado

igbc.ex = igbc - r

Page 7: 1 Curso Teoría de Portafolios Taller: CAPM con librería R PerfomanceAnalytics N. Giraldo, EIO – UN Mayo 2009

7

# calcular un beta por regresion lineal

beta1 = lm(Ret.ex[,1] ~ igbc.ex)summary(beta1)

beta2 = lm(Ret.ex[,2] ~ igbc.ex)summary(beta2)

beta3, beta4, etc, …

8,...,2,1),())()(()()( jtetrtrtrtr jIjjj

Page 8: 1 Curso Teoría de Portafolios Taller: CAPM con librería R PerfomanceAnalytics N. Giraldo, EIO – UN Mayo 2009

8

# calcular betas con la libreria PerfomanceAnalytics# primero creamos vectores…

beta = double(8)alfa = betarisk.prima = betaSR = beta

# asignamos nombres a las entradas de los # vectores

names(beta)=colnames(Ret[,1:8])names(alfa)=colnames(Ret[,1:8])names(risk.prima)=colnames(Ret[,1:8])

Page 9: 1 Curso Teoría de Portafolios Taller: CAPM con librería R PerfomanceAnalytics N. Giraldo, EIO – UN Mayo 2009

9

# CAPM.RiskPremium is the premium returned # to the investor over the risk free asset # CAPM.RiskPremium =

for(j in 1:8){ beta[j] = CAPM.beta(Ret[,j], igbc, r)alfa[j] = CAPM.alpha(Ret[,j], igbc, r)risk.prima[j] = CAPM.RiskPremium(Ret[,j], r)SR[j] = SharpeRatio(Ret[,j],r)}

)]()([ trtrE j

Page 10: 1 Curso Teoría de Portafolios Taller: CAPM con librería R PerfomanceAnalytics N. Giraldo, EIO – UN Mayo 2009

10

# la linea del mercado para las acciones SML es

# se estima regresando la variable de la prima de riesgo # de las acciones contra beta: # CAPM.RiskPremium = a + b CAPM.beta + error

sml = lm(risk.prima ~ beta)

# Los parámetros a y b estimados están en el vectorbest = sml$coef

8,...,2,1,)]()([ jbatrtrE jj

Page 11: 1 Curso Teoría de Portafolios Taller: CAPM con librería R PerfomanceAnalytics N. Giraldo, EIO – UN Mayo 2009

11

(cbind(beta,alfa,risk.prima,SR))

beta alfa risk.prima SR

argos 0.7379387 0.0004334918 0.0012893807 0.08886241

exito 0.2878942 -0.0007373311 -0.0004034207 -0.02569264

bbog 0.5615122 0.0011660906 0.0018173534 0.10399453

bancol 0.8194878 0.0009649049 0.0019153776 0.10243814

bav 0.9013191 -0.0004622399 0.0005831438 0.03728501

fabri 0.1818629 0.0014131070 0.0016240385 0.05485461

choco 0.5188485 0.0006082874 0.0012100673 0.09353360

noel 0.2469992 0.0008681223 0.0011546012 0.09703422

Page 12: 1 Curso Teoría de Portafolios Taller: CAPM con librería R PerfomanceAnalytics N. Giraldo, EIO – UN Mayo 2009

12

Page 13: 1 Curso Teoría de Portafolios Taller: CAPM con librería R PerfomanceAnalytics N. Giraldo, EIO – UN Mayo 2009

13

SEGUNDA PARTE:

Calcular los betas de varios portafolios

Page 14: 1 Curso Teoría de Portafolios Taller: CAPM con librería R PerfomanceAnalytics N. Giraldo, EIO – UN Mayo 2009

14

# convertir la matriz Ret de 9 columnas en # un objeto “timeSeries” para poder aplicar # las funciones de la librería fPortfolio

Ds = as.timeSeries(Ret[,1:8])colnames(Ds)

# especificaciones iniciales:

Spec= portfolioSpec()setType(Spec) = "MV" Constraints = "LongOnly"setSolver(Spec) = "solveRquadprog"

Page 15: 1 Curso Teoría de Portafolios Taller: CAPM con librería R PerfomanceAnalytics N. Giraldo, EIO – UN Mayo 2009

15

# 50 portafolios frontera

fp = portfolioFrontier(Ds, Spec, Constraints)

# pesos de los portafolios

wp = getWeights(fp)

# rendimiento esperado y promedio (matriz N x 2 )

fRet = getTargetReturn(fp)

# volatilidad var y cvar (matriz N x 4: cov,sigma,cvar,var)

fRisk = getTargetRisk(fp)

Page 16: 1 Curso Teoría de Portafolios Taller: CAPM con librería R PerfomanceAnalytics N. Giraldo, EIO – UN Mayo 2009

16

# portafolio minima varianza

fm = minvariancePortfolio(Ds, Spec, Constraints)

(wm = getWeights(fm))

(um = getTargetReturn(fm)[1] )

(sm = getTargetRisk(fm)[2] )

# um = rendimiento medio min var = 0.00122

r = 0.0008

setRiskFreeRate(Spec) = r

Page 17: 1 Curso Teoría de Portafolios Taller: CAPM con librería R PerfomanceAnalytics N. Giraldo, EIO – UN Mayo 2009

17

# portafolio tangente

ft = tangencyPortfolio(Ds, Spec, Constraints)

( ut = getTargetReturn(ft)[1] )

( st = getTargetRisk(ft)[2] )

(wt = getWeights(ft))

Page 18: 1 Curso Teoría de Portafolios Taller: CAPM con librería R PerfomanceAnalytics N. Giraldo, EIO – UN Mayo 2009

18

• # otro portafolio porcentajes iguales

• we = rep(1/8,8)

• ue = sum(we*getMean(fp))

• se = sqrt(t(we)%*%getCov(fp)%*%we)

Page 19: 1 Curso Teoría de Portafolios Taller: CAPM con librería R PerfomanceAnalytics N. Giraldo, EIO – UN Mayo 2009

19

# escoger un portafolio eficiente:# meta de rendimiento igual a la media del IGBC

uIgbc = mean(igbc)

sIgbc = sd(igbc)

names(sIgbc) = "igbc"

setTargetReturn(Spec) = uIgbc

fI = efficientPortfolio(Ds, Spec, Constraints)

(wI = getWeights(fI))

(sI = getTargetRisk(fI)[2] )

names(sI) = "efi-igbc"

Page 20: 1 Curso Teoría de Portafolios Taller: CAPM con librería R PerfomanceAnalytics N. Giraldo, EIO – UN Mayo 2009

20

# comparar los cuatro portafolios

W = rbind(wm,wt,wI,we)

(beta.p = W%*%beta)

rownames(W) = c("minvar", "tangente", "igbc-eff", "iguales")

W2 = cbind(W,beta.p)colnames(W2)[9]="betas"

(t(W2))

Page 21: 1 Curso Teoría de Portafolios Taller: CAPM con librería R PerfomanceAnalytics N. Giraldo, EIO – UN Mayo 2009

21

minvar tangente igbc-eff iguales

argos 0.062260779 0.04276399 0.08010210 0.1250000

exito 0.206368850 0.00000000 0.09480452 0.1250000

bbog 0.075641357 0.28475348 0.13402230 0.1250000

bancol 0.004390349 0.23918113 0.06183030 0.1250000

bav 0.116837415 0.00000000 0.05609914 0.1250000

fabri 0.047827960 0.08543070 0.06007729 0.1250000

choco 0.166090165 0.10665685 0.18282807 0.1250000

noel 0.320583126 0.24121385 0.33023628 0.1250000

betas 0.430793727 0.51791082 0.45024565 0.5319828

Page 22: 1 Curso Teoría de Portafolios Taller: CAPM con librería R PerfomanceAnalytics N. Giraldo, EIO – UN Mayo 2009

22