# Mixture of a bivariate distribution defined as a copula

I define a bivariate distribution:

SN[μ1_, μ2_, σ1_, σ2_, a1_, a2_, ρ_] :=
SN[μ1, μ2, σ1, σ2, a1, a2, ρ] = CopulaDistribution[{"Binormal", ρ}, {SkewNormalDistribution[μ1, σ1, a1], SkewNormalDistribution[μ2, σ2, a2]}]


and then a mixture distribution:

dist = MixtureDistribution[{p, 1 - p}, {SN[μ1a, μ2a, σ1a, σ2a, a1a, a2a, ρa], SN[μ1b, μ2b, σ1b, σ2b, a1b, a2b, ρb]}]


This works well in generating some data:

adat = RandomVariate[dist /. {μ1a -> -0.233, μ2a -> 0.74, σ1a -> 0.541, σ2a -> 0.259, a1a -> 0.7, a2a -> 0.5, ρa -> 0.049, μ1b -> 1.488, μ2b -> 0.396, σ1b -> 0.396, σ2b -> 0.471, a1b -> -0.5, a2b -> -0.7, ρb -> 0.128, p -> 0.28}, 25]


where the parameters are the initial parameters for what follows:

param = FindDistributionParameters[adat, dist, {{μ1a, -0.233}, {μ2a, 0.74}, {σ1a, 0.541}, {σ2a, 0.259}, {a1a, 0.7}, {a2a, 0.5}, {ρa, 0.049}, {μ1b, 1.488}, {μ2b, 0.396}, {σ1b, 0.396}, {σ2b, 0.471}, {a1b, -0.5}, {a2b, -0.7}, {ρb, 0.128}, {p, 0.28}}, ParameterEstimator -> {"MaximumLikelihood", Method -> "NMaximize"}] // AbsoluteTiming


I generated only 25 realisations to make a fast test. The test outcome is that it does not work; that is, the param part just keeps running for hours without any messages and does not give any result.

The data I want to apply it to consists of ~2000 points.

A similar code but with a mixture of multinormal distributions works like a charm.

What is wrong with my approach? Is it something with the copula, or some simple syntax error I cannot see?

• If need be, you could try adapting the approaches presented in this talk. Commented Jul 30, 2015 at 15:30
• That doesn't help much. Commented Jul 30, 2015 at 16:46
• Your code seems fine, but this is just a hard optimization problem (multidimensional distribution with a lot of parameters). It's probably going through general solvers instead of faster, specialized solvers which are implemented for known distributions and certain special cases. Commented Jul 30, 2015 at 18:58