Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
braverock
GitHub Repository: braverock/portfolioanalytics
Path: blob/master/sandbox/scriptFFV.R
1433 views
1
library(PortfolioAnalytics)
2
data(edhec)
3
R <- edhec[,1:5]
4
5
# compute the probabilities
6
probs <- rep(1 / nrow(R), nrow(R))
7
# probabilities should always sum to 1
8
sum(probs)
9
10
# suppose that I express a bearish view on R[,1] - R[,2]
11
# lambda is the ad-hoc multiplier
12
# Meucci recommends -2 (very bearish), -1 (bearish), 1 (bullish), 2 (very bullish)
13
lambda <- -2
14
V <- coredata(R[,1] - R[,2])
15
m <- mean(V)
16
s <- sd(V)
17
b <- matrix(m + lambda * s, 1)
18
19
# set up matrix for equality constraints
20
# constrain such that probabilities sum to 1
21
Aeq <- matrix(1, nrow=1, ncol=nrow(R))
22
beq <- matrix(1, 1, 1)
23
24
# set up matrix for inequality constraints
25
A <- t(V)
26
27
# Compute posterior probabilities
28
# The EntryProg optimization handles inequality constraints as A < b
29
# If I hav
30
posterior_probs <- Meucci::EntropyProg(probs, A, b, Aeq, beq)$p_
31
dim(posterior_probs)
32
sum(posterior_probs)
33
34
# why do the probs equal the posterior probs?
35
all.equal(as.numeric(posterior_probs), probs)
36
37
# Now I have my posterior probabilities
38
# What is a general approach I can use for any arbitrary optimization
39
all.equal(as.numeric(t(coredata(R)) %*% posterior_probs),as.numeric(matrix(colMeans(R), ncol=1)))
40
41
# This is pretty close to sample cov
42
Exps <- t(R) %*% posterior_probs
43
Scnd_Mom = t(R) %*% (R * (posterior_probs %*% matrix( 1,1,ncol(R)) ) )
44
Scnd_Mom = ( Scnd_Mom + t(Scnd_Mom) ) / 2
45
Covs = Scnd_Mom - Exps %*% t(Exps)
46
Covs
47
cov(R)
48
49
50
51
52
53
54