Can anyone help me calculating the average covariance of return?

6 ビュー (過去 30 日間)
Silvia Grasso
Silvia Grasso 2022 年 10 月 27 日
コメント済み: Silvia Grasso 2022 年 10 月 27 日
  • Hi everyone. I'm trying to convert this formula into MatLab code:
where :
Fcvc is a target matrix used for shrinking the sample covariance matrix of return towards their average variance and average covariance, in order to obtain a better estimator. The topic is fromt De Nard paper "Oops! I Shrunk the Sample Covariance Matrix Again: Blockbuster Meets Shrinkage"
I don't know how to compute the average covariance (average of off-diagonal entries of a simmetric matrix), can anyone help me?

回答 (1 件)

William Rose
William Rose 2022 年 10 月 27 日
編集済み: William Rose 2022 年 10 月 27 日
[Edit: change the name of the initial matrix; it should not be Fcvc, it should be S. Add code to construct Fcvc using the which we calculate.]
You can just write a nested for loop (i,j) that does the calculation:
%Make a 4x4 covariance matrix
N=4; S=eye(N); %identity matrix
for i=1:N,
for j=i+1:N
S(i,j)=-1+2*rand(1,1);
S(j,i)=S(i,j);
end
end
S=10*S %multiply by some arbitray constant
S = 4×4
10.0000 -7.0228 -1.6309 6.1487 -7.0228 10.0000 -7.4054 5.1093 -1.6309 -7.4054 10.0000 0.3682 6.1487 5.1093 0.3682 10.0000
That looks like a reasonable covariance matrix: it is positive along the diagonal, and the absolute value of off-diagonal element are less than the diagoonal, and it is symmetric.
Now compute and :
siibar=sum(sum(S))/N^2;
sijbar=0;
for i=1:N
for j=i+1:N
sijbar=sijbar+S(i,j);
end
end
sijbar=sijbar/((N^2-N)/2);
fprintf('siibar=%.4f, sijbar=%.4f\n',siibar,sijbar)
siibar=1.9459, sijbar=-0.7388
Those values look reasonable.
Use siibar and sijbar to make Fcvc
Fcvc=sijbar*(ones(N)-eye(N))+siibar*eye(N)
Fcvc = 4×4
1.9459 -0.7388 -0.7388 -0.7388 -0.7388 1.9459 -0.7388 -0.7388 -0.7388 -0.7388 1.9459 -0.7388 -0.7388 -0.7388 -0.7388 1.9459
That looks good.
  2 件のコメント
William Rose
William Rose 2022 年 10 月 27 日
You may note that when calculating sijbar = , I added up the values on one side of the diagonal, then divided by (N^2-N)/2. In the formula you quoted, they added up the values on both sides of the diagonal and divided by (N^2-N). Since the matrix is symmetric (covariance matrices are alway ssymmetric), the result is the same for these two different ways of doing it.
Silvia Grasso
Silvia Grasso 2022 年 10 月 27 日
I tried to do this:
meanvar=mean(diag(sample));
meancov=sum(sum(sample(~eye(p))))/p*(p-1); %
target=meanvar*eye(p)+meancov*(~eye(p));
Could have sense? @William Rose

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeFinancial Toolbox についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by