Foro de debate

Acceso a lista

 
Imagen de David Tarin Bernad
Acceso a lista
de David Tarin Bernad - sábado, 11 de febrero de 2017, 21:39
 


Tengo una duda, quiero coger numero por numero en una lista de 100 datos, os paso el script a ver si me podeis ayudar.Quiero que Rho, vaya cogiendo datos uno a uno para que me calcule W, ya que me da mal.

rm(list=ls())

r=matrix(c(0.095, 0.070, 0.090, 0.075), nrow=4)

x=matrix(c(0.038, 0.0085, 0.0089, 0.0066, 0.0085, 0.0331, 0.0156, 0.0039, 0.0089, 0.0156, 0.0334, 0.007, 0.0066, 0.0039, 0.007, 0.0240),nrow=4)

varcov=solve(x)

t<-matrix(c(1,1,1,1),nrow=4)

rho <- seq(0.05, 0.15, 0.001)

lrho=length(rho)

a=t(t)%*%solve(x)%*%t

ba=t(t)%*%solve(x)%*%r

c=t(r)%*%solve(x)%*%r

d=a%*%c-ba^2

g=varcov%*%((t%*%c-r%*%ba))%*%solve(d)

h=varcov%*%((r%*%a-t%*%ba))%*%solve(d)

i=seq(1,lrho)

w=g+h*rho[i]


Imagen de Manuel Muñoz Márquez
Re: Acceso a lista
de Manuel Muñoz Márquez - lunes, 13 de febrero de 2017, 12:14
 

Buenas:

Si explicas lo que quieres hacer sería más fácil. Si lo que quieres es hacer un cálculo para cada valor de rho, entonces puedes usar un bucle:

for (rho in seq(0.05, 0.15, 0.001)) {
Hacer cálculos
}

Un saludo.

Imagen de David Tarin Bernad
Re: Acceso a lista
de David Tarin Bernad - lunes, 13 de febrero de 2017, 18:24
 

lo que pretendo es que rho vaya cogiendo como bien has puesto valores de 0.05 a 0.15, 1x1, y me vaya calculando la w, que es una salida 4x1 y me acumule todos los resultados de w en una salida (en forma de matriz, por ejemplo).

No soy nada experto haciendo bucles.

un saludo 

David 

Imagen de Manuel Muñoz Márquez
Re: Acceso a lista
de Manuel Muñoz Márquez - lunes, 13 de febrero de 2017, 23:20
 

Buenas:

¿Qué significa acumular para ti? ¿Que se vayan sumando todos los resultados? ¿o...?

Saludos.

Imagen de David Tarin Bernad
Re: Acceso a lista
de David Tarin Bernad - lunes, 13 de febrero de 2017, 23:57
 

cuando digo acumular es que, el resultado de W me lo almacene en una matriz que deba tener 4 filas T columnas. Tendra tantas T como veces calcule rho.

Lo he diseñado de golpe como abajo te adjunto. y si que me da, ahora lo que quiero es poder calcular la w, para cada rho de manera individual, que supongo que sera con un for pero no se muy bien como implementarlo, en el tema de los bucles ando bastante perdido.


A continuacion, te presento lo que he hecho: 

rm(list=ls())

r=matrix(c(0.095, 0.070, 0.090, 0.075), nrow=4)

x=matrix(c(0.038, 0.0085, 0.0089, 0.0066, 0.0085, 0.0331, 0.0156, 0.0039, 0.0089, 0.0156, 0.0334, 0.007, 0.0066, 0.0039, 0.007, 0.0240),nrow=4)

varcov=solve(x)

t<-matrix(c(1,1,1,1),nrow=4)

rho <- seq(0.05, 0.15, 0.001)

lrho=length(rho) 

i=1:lrho

a=t(t)%*%solve(x)%*%t

ba=t(t)%*%solve(x)%*%r

c=t(r)%*%solve(x)%*%r

d=a%*%c-ba^2


g=varcov%*%((t%*%c-r%*%ba))%*%solve(d)

h=varcov%*%((r%*%a-t%*%ba))%*%solve(d)


w =rep(g,101)+h%*%rho


var=t(w)%*%x%*%w

desvtip=sqrt(diag(var))

rend=t(w)%*%r

plot(t(desvtip),rend, type="l", ylim=c(0.05,0.11),xlim=c(0,0.25),main="Cartera Minima Varianza",xlab="Standard Desviation", ylab="Return")

ahora lo que quiero cambiar es el calculo de W, como al principio en la primera duda lo he expresado, y la unica manera para poder calcularlo por dimension de las variables es que la rho vaya entrando con dimension 1x1.

Espero haberme expresado mejor.

Un saludo 

Gracias 

Imagen de Manuel Muñoz Márquez
Re: Acceso a lista
de Manuel Muñoz Márquez - martes, 14 de febrero de 2017, 07:39
 

Buenas:

Pues entonces lo que tienes que hacer es algo como:

vrho <- seq(0.05, 0.15, 0.001)
T <- length(vrho)
resultado <- matrix(0, nrow = 4, ncol = T)
for (i in 1:T) {
   rho <- vrho[i]
vrho[,i] <- Vector de cuatro elementos
}
Un saludo.

P.D.: ¿Qué tal si empiezas leyendo un manual de introducción a R?