Foro de debate

Acceso a lista

Acceso a lista

de David Tarin Bernad -
Número de respuestas: 5


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]


En respuesta a David Tarin Bernad

Re: Acceso a lista

de Manuel Muñoz Márquez -

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.

En respuesta a Manuel Muñoz Márquez

Re: Acceso a lista

de David Tarin Bernad -

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 

En respuesta a David Tarin Bernad

Re: Acceso a lista

de Manuel Muñoz Márquez -

Buenas:

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

Saludos.

En respuesta a Manuel Muñoz Márquez

Re: Acceso a lista

de David Tarin Bernad -

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 

En respuesta a David Tarin Bernad

Re: Acceso a lista

de Manuel Muñoz Márquez -

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?