While I don't think that I would trust a FindCopula
function, there's no need for a FindCopulaParameters
because FindDistributionParameters
already provides that functionality. Here's an example:
d = CopulaDistribution["Product", {GeometricDistribution[\[Lambda]1], PoissonDistribution[\[Lambda]2]}];
n = 1000;
SeedRandom[12345];
x = RandomVariate[d /. {\[Lambda]1 -> 0.3, \[Lambda]2 -> 4}, n];
mle = FindDistributionParameters[x, d]
(* {\[Lambda]1 -> 0.304507, \[Lambda]2 -> 4.057} *)
And another:
d = CopulaDistribution[{"FGM", \[Alpha]}, {NormalDistribution[\[Mu]1, \[Sigma]1],
NormalDistribution[\[Mu]2, \[Sigma]2]}];
n = 1000;
SeedRandom[12345];
x = RandomVariate[d /. {\[Mu]1 -> -1, \[Sigma]1 -> 2, \[Mu]2 -> 1, \[Sigma]2 -> 1/2, \[Alpha] -> 0.2}, n];
mle = FindDistributionParameters[x, d]
(* {\[Alpha] -> 0.221636, \[Mu]1 -> -1.04899, \[Sigma]1 -> 1.99398, \[Mu]2 -> 0.996975, \[Sigma]2 -> 0.481067} *)
But FindDistributionParameters
for all distributions suffers from not giving an estimated covariance matrix for the parameters estimates. For that you'll need to write your own using LogLikelihood
and something like FindMaximum
.