## Task

Compute the valuation of a set of random portfolios at one or more times. These can then be plotted.

## Preparation

This presumes that you have mastered either “Very simple long-only” or “Very simple long-short”. That is, that you’ve managed to create a random portfolio object.

- random portfolio object
- Portfolio Probe

You need a random portfolio object with which to create valuations.

You also need to have the Portfolio Probe package loaded into your R session:

require(PortfolioProbe)

If you don’t have Portfolio Probe, see “Demo or Buy”.

### Doing the example

`rploVerysimp`

object from the “Very simple long-only” example`pprobeData`

package

You need to have the package loaded into your R session:

require(pprobeData)

## Doing it

We do these tasks:

- distribution of valuations at one point in time
- valuation paths through time

### Distribution of valuations at one point in time

We create the valuations by using prices at the time point of interest:

valEnd07 <- valuation(rploVerysimp, xassetPrices[502,], collapse=TRUE)

This uses the prices at the close of the last trading day of 2007, so one year after the portfolios were formed with a valuation of (slightly less than) $1,000,000.

The valuations are:

> valEnd07 [1] 1366810.7 843313.3 943556.4 2100184.8 attr(,"timestamp") [1] "Tue Sep 04 11:45:03 2012" attr(,"call") valuation.randportBurSt(x = rploVerysimp, prices = xassetPrices[502, ], collapse = TRUE)

In a real application we would probably want to use hundreds or thousands of portfolios. But the commands don’t know if the object contains 4 portfolios or 4 million.

We plot the density estimate (which of course is silly for 4 datapoints) of the valuations like:

plot(density(valEnd07/1e6), xlab="Valuation (millions)")

This command creates Figure 1.

Figure 1: Close to default plot of valuation density.

If you were doing the plot just for yourself, you probably wouldn’t even add the ‘`xlab`

‘ part. Figure 2 cleans up the plot so it is more presentable to others.

Figure 2: Cleaned up plot of valuation density.

This was done with the command:

plot(density(valEnd07/1e6), xlab="Valuation (millions)", col="steelblue", lwd=3, yaxt="n", main="4 portfolios at end 2007")

This makes the main (top) title informative, widens and colors the density line, and erases the numbers on the y-axis as they tend to distract more than inform.

### Valuation paths through time

Instead of focusing on valuations at one specific time, we look at the evolution of value over time.

To do this we need to use a matrix of prices for the times (and assets) of interest:

valDaily07 <- valuation(rploVerysimp, xassetPrices[251:502,], collapse=TRUE)

The result is a matrix with as many rows as the price matrix that we gave to `valuation`

and as many columns as random portfolios.

We can just plot the paths without trauma:

matplot(valDaily07, type="l")

The result of that command is Figure 3.

Figure 3: Default plotting of valuation paths.

If you really do have only a few paths and you want to emphasize them, you might do something like:

matplot(valDaily07/1e6, type="l", lwd=3, lty=1, col="steelblue", ylab="Value (millions)", xlab="Trading day in 2007")

The command above produces Figure 4.

Figure 4: Plot suitable for a few paths.

More likely you will want the random paths to be rather muted, and serve as background to something else. Perhaps something like:

matplot(valDaily07/1e6, type="l", lwd=1, lty=1, col="gold", ylab="Value (millions)", xlab="Trading day in 2007") abline(h=1, col="steelblue", lty=2)

This produces Figure 5.

Figure 5: Plot with random portfolios as background.

## Explanation

The `valuation`

function can do quite a lot. We’ve seen that it can take prices at either one time or multiple times and return something sensible.

The `density`

function returns an object of class `"density"`

and there is a `plot`

method for that class. You can think of it as `plot`

knowing how to plot densities.

The `matplot`

function plots matrices. We are giving it just one matrix so it assumes that we want the x-axis to be the row number. The ‘`type="l"`

‘ tells it that we want lines (and not points). We also used arguments to control line width, line type and color.

The `abline`

function adds lines to an existing plot. The ‘`h`

‘ argument draws horizontal lines. So ‘`h=0:10`

‘ will draw horizontal lines at all the integers between 0 and 10, inclusive. The ‘`v`

‘ argument does vertical lines. If you give it two numbers, then that will be the intercept and slope. So the command ‘`abline(0, 1)`

‘ draws the line y=x.

## Checking your work

We know that the portfolios were generated to have 1 million at the start of the year. That’s the behavior that we see in Figures 3 through 5 — so that’s good.

## See also

## Navigate

- Back to “Random Portfolio Generation”
- Back to the top level of “Portfolio Probe Cookbook”