in the book "Numerical Methods and Optimization in Finance" I red the following: "Combining the Gaussian copula with Gaussian marginal gives a fancy way of expressing multivariate normals. However, the Gaussian copula can also be combined with other marginals, and Gaussian marginals can be linked via any copula”.

I would like to combine the Gaussian copula with Gaussian marginals, to obtain multivariate normals for my 7 asset classes. In addition, I would like to combine t-marginals with t-copula, to obtain a multivariate t-distribution. Does anyone know how to do this in MatLab?? I kinda struggle with this for quite some time!

This is how I approached the problem for the t marginals & t copula:

%% Define univariate process by t-distribution

for i = 1:nAssets

marginal{i} = fitdist(returns(:,i),'tlocationscale');


%% Copula calibration

for i = 1:nAssets

U(:,i) = marginal{i}.cdf(returns(:,i)); % transform margin to uniform


[rhoT, DoF] = copulafit('t', U, 'Method', 'ApproximateML');

%% Reverse transformation on each index

U = copularnd('t', rhoT, DoF, NumObs * NumSim);

for j = 1:nAssets

ExpReturns(:,:,j) = reshape(marginal{j}.icdf(U(:,j), DoF), NumObs, NumSim);


Does my approach make sense?? Any help is very much appreciated, especially on the MatLab code!!!

Best regards

  • $\begingroup$ I am not sure what exactly you want to do with this code, do you want to simulate data from an estimated distribution? $\endgroup$ – emcor Sep 17 '14 at 14:04
  • $\begingroup$ Yes, you're absolutely right! After I've fitted the copula via copulafit, I simulate returns via copularnd and then reverse the transformation in the last step, since I don't want uniform margins. First, I'm not sure whether the tlocationScale fits a t-distribution. Second, I'm not sure whether I get a multivariate t-distribution with my approach. Lastly, I'm quite unsure whether the entire approach makes sense ... $\endgroup$ – Peter Miller Sep 17 '14 at 14:46

You can express the Normal distribution by Sklar's Theorem in terms of Gaussian Marginals and Gaussian Copula as follows:


So the distribution equals the copula function with the respective inverse marginals as arguments.

You can aswell combine any types of Copula and (continuous) different Marginals to form new distributions by this formula:


So for Student-t-Copula:


Remark: You can also combine different types of marginals and copula, e.g. Gauss Copula with t-Marginals.

The MATLAB-function to generate Copula values can be found here:

Y = copulacdf('Gaussian',U,rho)

Y = copulacdf('t',U,rho,NU)


Just keep in mind that Gaussian marginals with Gaussian copula is nothing more than the multivariate Gaussian distribution (details e.g. here). For t-marginals with t-copula (with the same degree of freedom) you get the multivariate t-distribution.

Both multivariate distributions are characterized by their covariance matrix. The t-distribution has the additional parameter degrees of freedom and will thus produce tail dependence.

All in all you don't need the copula concept in these cases. The only benefit would be to use different degrees of freedom for the marginals and the copula in the t-distribution case.

  • $\begingroup$ Thank you for your response. I do understand that I get a multivariate normal distribution by combining Gaussian marginals with Gaussian copulas. However, I struggle with implementing it MatLab. And I actually have to do it with copulas. In the other comment I laid down my approach, but I'm quite unsure whether this is right way to go ... $\endgroup$ – Peter Miller Sep 17 '14 at 8:48
  • $\begingroup$ I see - you focus on the Matlab implementation and I rather tried to make clear the mathematics. In this case emcor is of more help I guess. $\endgroup$ – Richard Sep 17 '14 at 8:58

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.