Denver,
> data is a matrix like this
> AMR BS GE HR MO UK SP500
> 1974 -0.3505 -0.1154 -0.4246 -0.2107 -0.0758 0.2331 -0.2647
> 1975 0.7083 0.2472 0.3719 0.2227 0.0213 0.3569 0.3720
> 1976 0.7329 0.3665 0.2550 0.5815 0.1276 0.0781 0.2384
> 1977 -0.2034 -0.4271 -0.0490 -0.0938 0.0712 -0.2721 -0.0718
> 1978 0.1663 -0.0452 -0.0573 0.2751 0.1372 -0.1346 0.0656
> 1979 -0.2659 0.0158 0.0898 0.0793 0.0215 0.2254 0.1844
> 1980 0.0124 0.4751 0.3350 -0.1894 0.2002 0.3657 0.3242
> 1981 -0.0264 -0.2042 -0.0275 -0.7427 0.0913 0.0479 -0.0491
> 1982 1.0642 -0.1493 0.6968 -0.2615 0.2243 0.0456 0.2141
> 1983 0.1942 0.3680 0.3110 1.8682 0.2066 0.2640 0.2251
It is perhaps more natural to specify this information as a data frame.
> I want to calculate the return say AMR,so I use
> re=numeric(10)
> for (i in 2:nrow(data))
> re[1]=0
> re[i]=log(data[i]/data[i-1])
> to my surprise, the result is
> > re
> [1] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
0.00000
> [9] 0.00000 -1.70109
A couple of things:
1. You don't need re[1]=0 inside the loop (or at all, in fact, since
numeric(10) will give a default value of 0).
2. It would be better to vectorise the code, to avoid the loop altogether.
3. You are looping over elements in the first column of data, which is why
the log values are zero.
Some better code:
re = c(0, diff(log(data[,"AMR"])))
Regards,
Richie.
Mathematical Sciences Unit
HSL
------------------------------------------------------------------------
ATTENTION:
This message contains privileged and confidential inform...{{dropped:20}}
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.