public <E extends UnivariateDistribution> E getParameterPosteriorTimeT(Variable parameter) { if (parameter.isParameterVariable()) { Variable newVar =this.svbTimeT.getPlateuStructure().getEFLearningBN().getParametersVariables().getVariableByName(parameter.getName()); return this.svbTimeT.getParameterPosterior(newVar); }else { Variable newVar =this.dagTimeT.getVariables().getVariableByName(parameter.getName()); return this.svbTimeT.getParameterPosterior(newVar); } }
ParameterVariables parameterVariables = new ParameterVariables(0); Variable var = parameterVariables.newDirichletParameter("Local",nstates); EF_Dirichlet localQ = new EF_Dirichlet(var); EF_Dirichlet localP = new EF_Dirichlet(var);
public static double[] computeLocalKLDirichletBinary(EF_Dirichlet dirichletQ, EF_Dirichlet dirichletP) { double[] localKL = new double[dirichletP.sizeOfSufficientStatistics()]; int nstates = localKL.length; double sumCountsQ = dirichletQ.getNaturalParameters().sum(); double sumCountsP = dirichletP.getNaturalParameters().sum(); ParameterVariables parameterVariables = new ParameterVariables(0); Variable binary = parameterVariables.newDirichletParameter("Local",2); EF_Dirichlet localQ = new EF_Dirichlet(binary); EF_Dirichlet localP = new EF_Dirichlet(binary); for (int i = 0; i < localKL.length; i++) { double alphaQ = dirichletQ.getNaturalParameters().get(i); double alphaP = dirichletP.getNaturalParameters().get(i); localQ.getNaturalParameters().set(0,alphaQ); localQ.getNaturalParameters().set(1,sumCountsQ-alphaQ); localQ.fixNumericalInstability(); localQ.updateMomentFromNaturalParameters(); localP.getNaturalParameters().set(0,alphaP); localP.getNaturalParameters().set(1,sumCountsP-alphaP); localP.fixNumericalInstability(); localP.updateMomentFromNaturalParameters(); localKL[i] = localQ.kl(localP.getNaturalParameters(),localP.computeLogNormalizer()); } return localKL; }
public <E extends UnivariateDistribution> E getParameterPosteriorTime0(Variable parameter) { if (parameter.isParameterVariable()) { Variable newVar =this.parallelVBTime0.getSVB().getPlateuStructure().getEFLearningBN().getParametersVariables().getVariableByName(parameter.getName()); return this.parallelVBTime0.getParameterPosterior(newVar); }else { Variable newVar =this.dagTime0.getVariables().getVariableByName(parameter.getName()); return this.parallelVBTime0.getParameterPosterior(newVar); } }