[R-SIG-Finance] PCA in Risk Control with R

Benji Famel benjifamel at gmail.com
Wed Feb 17 01:15:27 CET 2010


I like the idea, and I have attached a sample of data.  I think this
should work as the file is not a binary one.  The data represents
daily NYMEX data for Natural gas.
The columns are flat prices (not returns) and represent:
1. Date
2. Prompt contract
3. Back contract (2nd month out)
4. Far contract (3d month out)
5. etc.
After transferring the data to R through RExcel as MktData,  I execute
the following code:

MktReturns.d <- MktData

# ----------- Data Preparation  ------------------
for (i in 1:ncol(MktData) ) {
  MktReturns.d[,i] <- Fin.Calcs.logreturns(x=MktData[,i],  deltaT= 1, pad=T)
 }
MktReturns.d <- na.omit(MktReturns.d)

#PERFORM PCA ON DAILIES    (good for 1 day risk... if I wanted the
weekly risk, I would work with weekly returns)
pcdat.d <- princomp(MktReturns.d, cor=TRUE) 	# - It will use
correlation matrix so NO need to scale
the.summary.d <- summary(pcdat.d) 	# - It will print standard
deviation and proportion of variances for each component
the.loadings.d <- loadings(pcdat.d) 	# - it will give information how
much each variable contribute to each component.
the.scores.d <- pcdat.d$scores 		# - It will plot scores of each
observation for each variable
whichQuantile <- quantile(rnorm(1000000),probs=c(0.95))

PC <- exp(whichQuantile*t(pcdat.d[[2]])*sqrt(pcdat.d[[1]])*sd(MktReturns.d))
# note that if I wanted to work with daily returns but calculate the 1
week risk, I woudl be multiplying above with sqrt(5)

Hope this helps.

Benji

On Tue, Feb 16, 2010 at 6:54 PM, Brian G. Peterson <brian at braverock.com> wrote:
> Why don't you disguise a subset of your data and provide a working example?
>
> Both you and the list will get more out of it if we can all work on
> something that is actually executable in R, per the posting guide.
>
> Your problem is interesting and relevant, so put a little more effort into
> it, and I'm sure you'll get collaborators in working through it.
>
> Regards,
>
>  - Brian
>
> Benji Famel wrote:
>>
>> Hello,
>>
>> my apologies if I do something wrong - first posting for me.
>>
>> I am trying to apply PCA on the daily history of a bunch of forward
>> curves and run into my depths of ignorance.  I would appreciate some
>> help...
>>
>> My aim is to use PCA for risk control.  I.e. estimate the
>> eigenverctors and eigenvalues and build the principal components at
>> some confidence level, e.g. 95%.  If, for example, we were looking at
>> the first 3 components only, I would
>> - estimate PC1up, PC1dn, PC2up, PC2dn, PC3up and PC3dn.
>>
>> Let's assume that
>> - PC1up is worse for my position than PC1dn,
>> - PC2up is worse than PC2dn and
>> - PC3dn is worse than PC3up
>> I would then 'add' these worse for me components (PC1up, PC2up and
>> PC3dn) and run my position through them to get a measure of risk at
>> that confidence level.
>>
>> To do the PCA, I first foundthe log returns, let's call them Returns.
>> I then do:
>> pcdat <-princomp(Returns, cor=TRUE)
>> and calculate the principal components like this (this is where I am
>> very foggy...):
>>
>> PC <- exp(someQuantile*t(pcdat[[2]])*sqrt(pcdat[[1]])*sd(Returns))   #
>> somQuantile = 1.64 for a 95% CL
>>
>>
>> As much as I looked around, people discuss the benefits of PC but not
>> how to recombine the principal components at some confidence interval
>> to get a shocked curve.
>>
>> Could anyone help?
>>
>> Thank you,
>> Benji
>>
>> _______________________________________________
>> R-SIG-Finance at stat.math.ethz.ch mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
>> -- Subscriber-posting only. If you want to post, subscribe first.
>> -- Also note that this is not the r-help list where general R questions
>> should go.
>
>
> --
> Brian G. Peterson
> http://braverock.com/brian/
> Ph: 773-459-4973
> IM: bgpbraverock
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: NYMEX curves.csv
Type: application/octet-stream
Size: 376188 bytes
Desc: not available
URL: <https://stat.ethz.ch/pipermail/r-sig-finance/attachments/20100216/33a4c680/attachment.obj>


More information about the R-SIG-Finance mailing list