# [R] how to calculate the return?

Richard.Cotton at hsl.gov.uk Richard.Cotton at hsl.gov.uk
Mon Nov 26 10:23:24 CET 2007

```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}}

```