def generate_dirichlet_data(ndag, size): order = ndag.getTopologicalOrder() copulas = [] for k in range(order.getSize()): d = 1 + ndag.getParents(k).getSize() copulas.append(ot.Dirichlet([(1.0+k)/(d+1) for k in range(d+1)]).getCopula()) cbn = otagr.ContinuousBayesianNetwork(ndag, [ot.Uniform(0., 1.)]*ndag.getSize(), copulas) sample = cbn.getSample(size) return sample
def generate_dirichlet_data(ndag, size): order = ndag.getTopologicalOrder() jointDistributions = [] for k in range(order.getSize()): d = 1 + ndag.getParents(k).getSize() jointDistributions.append( ot.Dirichlet([(1.0 + k) / (d + 1) for k in range(d + 1)]).getCopula()) copula = otagr.ContinuousBayesianNetwork(ndag, jointDistributions) sample = copula.getSample(size) return sample
import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View if ot.Beta().__class__.__name__ == 'ComposedDistribution': correlation = ot.CorrelationMatrix(2) correlation[1, 0] = 0.25 aCopula = ot.NormalCopula(correlation) marginals = [ot.Normal(1.0, 2.0), ot.Normal(2.0, 3.0)] distribution = ot.ComposedDistribution(marginals, aCopula) elif ot.Beta().__class__.__name__ == 'CumulativeDistributionNetwork': distribution = ot.CumulativeDistributionNetwork([ot.Normal(2),ot.Dirichlet([0.5, 1.0, 1.5])], ot.BipartiteGraph([[0,1], [0,1]])) elif ot.Beta().__class__.__name__ == 'Histogram': distribution = ot.Histogram([-1.0, 0.5, 1.0, 2.0], [0.45, 0.4, 0.15]) else: distribution = ot.Beta() dimension = distribution.getDimension() if dimension == 1: distribution.setDescription(['$x$']) pdf_graph = distribution.drawPDF() cdf_graph = distribution.drawCDF() fig = plt.figure(figsize=(10, 4)) plt.suptitle(str(distribution)) pdf_axis = fig.add_subplot(121) cdf_axis = fig.add_subplot(122) View(pdf_graph, figure=fig, axes=[pdf_axis], add_legend=False) View(cdf_graph, figure=fig, axes=[cdf_axis], add_legend=False) elif dimension == 2: distribution.setDescription(['$x_1$', '$x_2$']) pdf_graph = distribution.drawPDF() fig = plt.figure(figsize=(10, 5)) plt.suptitle(str(distribution))
import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View if ot.Gumbel().__class__.__name__ == 'ComposedDistribution': correlation = ot.CorrelationMatrix(2) correlation[1, 0] = 0.25 aCopula = ot.NormalCopula(correlation) marginals = [ot.Normal(1.0, 2.0), ot.Normal(2.0, 3.0)] distribution = ot.ComposedDistribution(marginals, aCopula) elif ot.Gumbel().__class__.__name__ == 'CumulativeDistributionNetwork': distribution = ot.CumulativeDistributionNetwork( [ot.Normal(2), ot.Dirichlet([0.5, 1.0, 1.5])], ot.BipartiteGraph([[0, 1], [0, 1]])) elif ot.Gumbel().__class__.__name__ == 'Histogram': distribution = ot.Histogram([-1.0, 0.5, 1.0, 2.0], [0.45, 0.4, 0.15]) else: distribution = ot.Gumbel() dimension = distribution.getDimension() if dimension == 1: distribution.setDescription(['$x$']) pdf_graph = distribution.drawPDF() cdf_graph = distribution.drawCDF() fig = plt.figure(figsize=(10, 4)) plt.suptitle(str(distribution)) pdf_axis = fig.add_subplot(121) cdf_axis = fig.add_subplot(122) View(pdf_graph, figure=fig, axes=[pdf_axis], add_legend=False) View(cdf_graph, figure=fig, axes=[cdf_axis], add_legend=False) elif dimension == 2: distribution.setDescription(['$x_1$', '$x_2$']) pdf_graph = distribution.drawPDF()
import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View if (ot.Dirichlet().__class__.__name__=='ComposedDistribution'): correlation = ot.CorrelationMatrix(2) correlation[1, 0] = 0.25 aCopula = ot.NormalCopula(correlation) marginals = [ot.Normal(1.0, 2.0), ot.Normal(2.0, 3.0)] distribution = ot.ComposedDistribution(marginals, aCopula) elif (ot.Dirichlet().__class__.__name__=='CumulativeDistributionNetwork'): distribution = ot.CumulativeDistributionNetwork([ot.Normal(2),ot.Dirichlet([0.5, 1.0, 1.5])], ot.BipartiteGraph([[0,1], [0,1]])) elif (ot.Dirichlet().__class__.__name__=='Histogram'): distribution = ot.Histogram([-1.0, 0.5, 1.0, 2.0], [0.45, 0.4, 0.15]) else: distribution = ot.Dirichlet() dimension = distribution.getDimension() if dimension <= 2: if distribution.getDimension() == 1: distribution.setDescription(['$x$']) pdf_graph = distribution.drawPDF() cdf_graph = distribution.drawCDF() fig = plt.figure(figsize=(10, 4)) plt.suptitle(str(distribution)) pdf_axis = fig.add_subplot(121) cdf_axis = fig.add_subplot(122) View(pdf_graph, figure=fig, axes=[pdf_axis], add_legend=False) View(cdf_graph, figure=fig, axes=[cdf_axis], add_legend=False) else: distribution.setDescription(['$x_1$', '$x_2$']) pdf_graph = distribution.drawPDF() fig = plt.figure(figsize=(10, 5))
import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View if ot.FrankCopula().__class__.__name__ == 'EmpiricalBernsteinCopula': sample = ot.Dirichlet([1.0, 2.0, 3.0]).getSample(100) copula = ot.EmpiricalBernsteinCopula(sample, 4) elif ot.FrankCopula().__class__.__name__ == 'ExtremeValueCopula': copula = ot.ExtremeValueCopula(ot.SymbolicFunction("t", "t^3/2-t/2+1")) elif ot.FrankCopula( ).__class__.__name__ == 'MaximumEntropyOrderStatisticsCopula': marginals = [ot.Beta(1.5, 3.2, 0.0, 1.0), ot.Beta(2.0, 4.3, 0.5, 1.2)] copula = ot.MaximumEntropyOrderStatisticsCopula(marginals) elif ot.FrankCopula().__class__.__name__ == 'NormalCopula': R = ot.CorrelationMatrix(2) R[1, 0] = 0.8 copula = ot.NormalCopula(R) elif ot.FrankCopula().__class__.__name__ == 'SklarCopula': student = ot.Student(3.0, [1.0] * 2, [3.0] * 2, ot.CorrelationMatrix(2)) copula = ot.SklarCopula(student) else: copula = ot.FrankCopula() if copula.getDimension() == 1: copula = ot.FrankCopula(2) copula.setDescription(['$u_1$', '$u_2$']) pdf_graph = copula.drawPDF() cdf_graph = copula.drawCDF() fig = plt.figure(figsize=(10, 4)) pdf_axis = fig.add_subplot(121) cdf_axis = fig.add_subplot(122) View(pdf_graph, figure=fig,
from __future__ import print_function import openturns as ot import openturns.testing as ott import math as m for factory in ot.DistributionFactory.GetContinuousUniVariateFactories(): distribution = factory.build() # avoid flat pdfs if distribution.getName() == 'Dirichlet': distribution = ot.Dirichlet([2, 6]) distribution.setName('Dirichlet') elif distribution.getName() == 'Histogram': distribution = ot.Histogram([-1.0, 0.5, 1.0, 2.0], [0.45, 0.4, 0.15]) distribution.setName('Histogram') sample = distribution.getSample(10) epsilon = ot.ResourceMap.GetAsScalar( "CenteredFiniteDifferenceGradient-DefaultEpsilon") pdfepsilon = ot.ResourceMap.GetAsScalar( "Distribution-DefaultPDFEpsilon") ** (1.0/3.0) # logpdf logPDF1 = [y[0] for y in distribution.computeLogPDF(sample)] logPDF2 = [m.log(y[0]) for y in distribution.computePDF(sample)] ott.assert_almost_equal(logPDF1, logPDF2, 1e-5, 1e-8, str(distribution)) # cdf PDF1 = distribution.computePDF(sample) CDF1 = distribution.computeCDF(sample + epsilon)
import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View if ot.Dirichlet().__class__.__name__ == 'ComposedDistribution': correlation = ot.CorrelationMatrix(2) correlation[1, 0] = 0.25 aCopula = ot.NormalCopula(correlation) marginals = [ot.Normal(1.0, 2.0), ot.Normal(2.0, 3.0)] distribution = ot.ComposedDistribution(marginals, aCopula) elif ot.Dirichlet().__class__.__name__ == 'CumulativeDistributionNetwork': distribution = ot.CumulativeDistributionNetwork( [ot.Normal(2), ot.Dirichlet([0.5, 1.0, 1.5])], ot.BipartiteGraph([[0, 1], [0, 1]])) elif ot.Dirichlet().__class__.__name__ == 'Histogram': distribution = ot.Histogram([-1.0, 0.5, 1.0, 2.0], [0.45, 0.4, 0.15]) else: distribution = ot.Dirichlet() dimension = distribution.getDimension() if dimension == 1: distribution.setDescription(['$x$']) pdf_graph = distribution.drawPDF() cdf_graph = distribution.drawCDF() fig = plt.figure(figsize=(10, 4)) plt.suptitle(str(distribution)) pdf_axis = fig.add_subplot(121) cdf_axis = fig.add_subplot(122) View(pdf_graph, figure=fig, axes=[pdf_axis], add_legend=False) View(cdf_graph, figure=fig, axes=[cdf_axis], add_legend=False) elif dimension == 2: distribution.setDescription(['$x_1$', '$x_2$']) pdf_graph = distribution.drawPDF()
import openturns as ot from matplotlib import pyplot as plt from openturns.viewer import View pdf_graph = ot.Graph('PDF graph', 'x', 'PDF', True, 'topleft') cdf_graph = ot.Graph('CDF graph', 'x', 'CDF', True, 'topleft') palette = ot.Drawable.BuildDefaultPalette(10) for i, theta in enumerate([(2, 2), (7, 5), (2, 6), (3, 4)]): distribution = ot.Dirichlet(theta) pdf_curve = distribution.drawPDF().getDrawable(0) cdf_curve = distribution.drawCDF().getDrawable(0) pdf_curve.setColor(palette[i]) cdf_curve.setColor(palette[i]) pdf_curve.setLegend('theta={}'.format(str(theta))) cdf_curve.setLegend('theta={}'.format(str(theta))) pdf_graph.add(pdf_curve) cdf_graph.add(cdf_curve) fig = plt.figure(figsize=(10, 4)) pdf_axis = fig.add_subplot(121) cdf_axis = fig.add_subplot(122) View(pdf_graph, figure=fig, axes=[pdf_axis], add_legend=True) View(cdf_graph, figure=fig, axes=[cdf_axis], add_legend=True) fig.suptitle('Dirichlet(theta)')
import openturns as ot from openturns.viewer import View ot.ResourceMap.SetAsUnsignedInteger("Contour-DefaultLevelsNumber", 10) grid = ot.GridLayout(2, 2) pdf_graph = ot.Graph('PDFs of 1D Dirichlet distributions', 'x', '', True) cdf_graph = ot.Graph('CDFs of 1D Dirichlet distributions', 'x', '', True) title_2d = 'PDF of the Dirichlet dist. with theta = {}' theta_1 = (2.0, 2.0, 2.0) theta_2 = (0.5, 0.7, 0.9) pdf_2d_1 = ot.Graph(title_2d.format(theta_1), 'x1', 'x2', True) pdf_2d_2 = ot.Graph(title_2d.format(theta_2), 'x1', 'x2', True) palette = ot.Drawable.BuildDefaultPalette(10) list_theta = [(2, 2), (7, 5), (2, 6), (3, 4)] for theta in list_theta: distribution = ot.Dirichlet(theta) pdf_curve = distribution.drawPDF() cdf_curve = distribution.drawCDF() pdf_graph.add(pdf_curve) cdf_graph.add(cdf_curve) pdf_graph.setColors([palette[i] for i in range(4)]) cdf_graph.setColors([palette[i] for i in range(4)]) pdf_graph.setLegends(['theta={}'.format(theta) for theta in list_theta]) cdf_graph.setLegends(['theta={}'.format(theta) for theta in list_theta]) distribution_2d_1 = ot.Dirichlet(theta_1) distribution_2d_2 = ot.Dirichlet(theta_2) pdf_2d_1.add(distribution_2d_1.drawPDF()) pdf_2d_2.add(distribution_2d_2.drawPDF()) grid.setGraph(0, 0, pdf_graph) grid.setGraph(0, 1, cdf_graph) grid.setGraph(1, 0, pdf_2d_1) grid.setGraph(1, 1, pdf_2d_2)