function generateCopula(selfy, random) {
let ret = [];
let whichCorrelationMatrix = [];
selfy.U01.copula.forEach((copula) => {
if (copula.function == "GaussianCopula") {
let specifyCorrelationMatrix = copula.arguments.correlationMatrix.value;
let copulaArgs = copula.arguments.rng;
let randomMatrix = [];
for (let i = 0; i < copulaArgs.length; i++) {
console.log("caller ", copulaArgs[i]);
let val = generateRandom(copulaArgs[i], selfy.U01);
randomMatrix.push(val);
console.log("randomMatrix ", randomMatrix);
}
selfy.globalVariables.forEach((item, index) => {
if (item["name"] == specifyCorrelationMatrix) {
whichCorrelationMatrix = index;
} else {
let index = -1;
}
});
let thisCorrelationMatrix =
selfy.globalVariables[whichCorrelationMatrix].value.matrix;
let correlationMatrix = convertMx(thisCorrelationMatrix);
console.log("you are lower tri ", correlationMatrix);
let cho = jStat(jStat.cholesky(correlationMatrix));
console.log("Cholesky: \n", cho);
let col = copula.copulaLayer.indexOf(random);
var corrSamples = cho.multiply(randomMatrix);
console.log("corrSamples ", corrSamples);
var uniformCorrSamples = corrSamples.map(function (x) {
var normDist = jStat.normal(0, 1);
return normDist.cdf(x);
});
let val = uniformCorrSamples;
console.log(val);
ret.push(val);
} else {
console.log(
"TypeError The function type for this copula is unsupported. "
);
}
});
self.copula = ret;
return ret;
}