From a940fa30b78efbcb24a2b61ae79aa6bb36c55759 Mon Sep 17 00:00:00 2001 From: Ozzie Gooen Date: Tue, 25 Feb 2020 12:54:52 +0000 Subject: [PATCH] Fixed mass-ratio of continuous vs. discrete --- showcase/entries/Continuous.re | 2 +- src/components/charts/DistPlusPlot.re | 64 ++++++++++++++++++++++++++ src/distributions/Distributions.re | 15 ------ src/distributions/MixedShapeBuilder.re | 13 ++++-- 4 files changed, 74 insertions(+), 20 deletions(-) diff --git a/showcase/entries/Continuous.re b/showcase/entries/Continuous.re index 4dba4e73..1d4baeb5 100644 --- a/showcase/entries/Continuous.re +++ b/showcase/entries/Continuous.re @@ -24,7 +24,7 @@ let distributions = () =>

{"Single-Discrete" |> ReasonReact.string}

{setup( DistPlusIngredients.make( - ~guesstimatorString="mm(5 to 20, floor(normal(20,2)), [.5, .05])", + ~guesstimatorString="mm(5 to 20, floor(normal(20,2)), [.5, .5])", ~domain=Complete, (), ), diff --git a/src/components/charts/DistPlusPlot.re b/src/components/charts/DistPlusPlot.re index 4a37c99b..c7975bca 100644 --- a/src/components/charts/DistPlusPlot.re +++ b/src/components/charts/DistPlusPlot.re @@ -77,6 +77,9 @@ let make = (~distPlus: DistTypes.distPlus) => { {"Y Integral to Point" |> ReasonReact.string} + + {"Y Integral Total" |> ReasonReact.string} + @@ -104,12 +107,73 @@ let make = (~distPlus: DistTypes.distPlus) => { |> E.Float.with2DigitsPrecision |> ReasonReact.string} + + + + + + + + + + + + + + + + + + +
+ {"Y Integral Total" |> ReasonReact.string} + + {"Continuous Total" |> ReasonReact.string} + + {"Scaled Continuous Total" |> ReasonReact.string} + + {"Discrete Total" |> ReasonReact.string} + + {"Scaled Discrete Total" |> ReasonReact.string} +
{distPlus |> Distributions.DistPlus.T.Integral.sum(~cache=None) |> E.Float.with2DigitsPrecision |> ReasonReact.string} + {distPlus + |> Distributions.DistPlus.T.toContinuous + |> E.O.fmap( + Distributions.Continuous.T.Integral.sum(~cache=None), + ) + |> E.O.fmap(E.Float.with2DigitsPrecision) + |> E.O.default("") + |> ReasonReact.string} + + {distPlus + |> Distributions.DistPlus.T.toScaledContinuous + |> E.O.fmap( + Distributions.Continuous.T.Integral.sum(~cache=None), + ) + |> E.O.fmap(E.Float.with2DigitsPrecision) + |> E.O.default("") + |> ReasonReact.string} + + {distPlus + |> Distributions.DistPlus.T.toDiscrete + |> E.O.fmap(Distributions.Discrete.T.Integral.sum(~cache=None)) + |> E.O.fmap(E.Float.with2DigitsPrecision) + |> E.O.default("") + |> ReasonReact.string} + + {distPlus + |> Distributions.DistPlus.T.toScaledDiscrete + |> E.O.fmap(Distributions.Discrete.T.Integral.sum(~cache=None)) + |> E.O.fmap(E.Float.with2DigitsPrecision) + |> E.O.default("") + |> ReasonReact.string} +
diff --git a/src/distributions/Distributions.re b/src/distributions/Distributions.re index aa9851ab..61aa25fe 100644 --- a/src/distributions/Distributions.re +++ b/src/distributions/Distributions.re @@ -191,21 +191,6 @@ module Mixed = { discreteProbabilityMassFraction, }; - let clean = (t: DistTypes.mixedShape): option(DistTypes.shape) => { - switch (t) { - | { - continuous: {xyShape: {xs: [||], ys: [||]}}, - discrete: {xs: [||], ys: [||]}, - } => - None - | {continuous, discrete: {xs: [||], ys: [||]}} => - Some(Continuous(continuous)) - | {continuous: {xyShape: {xs: [||], ys: [||]}}, discrete} => - Some(Discrete(discrete)) - | shape => Some(Mixed(shape)) - }; - }; - // todo: Put into scaling module let scaleDiscreteFn = ({discreteProbabilityMassFraction}: DistTypes.mixedShape, f) => diff --git a/src/distributions/MixedShapeBuilder.re b/src/distributions/MixedShapeBuilder.re index cd4e4ca3..feab0ad6 100644 --- a/src/distributions/MixedShapeBuilder.re +++ b/src/distributions/MixedShapeBuilder.re @@ -21,16 +21,21 @@ let buildSimple = (~continuous, ~discrete): option(DistTypes.shape) => { Distributions.Discrete.T.Integral.sum(~cache=None, discrete); let discrete = Distributions.Discrete.T.scaleToIntegralSum(~intendedSum=1.0, discrete); - let foobar = + let continuous = + Distributions.Continuous.T.scaleToIntegralSum( + ~intendedSum=1.0, + continuous, + ); + let mixedDist = Distributions.Mixed.make( ~continuous, ~discrete, ~discreteProbabilityMassFraction, - ) - |> Distributions.Mixed.clean; - foobar; + ); + Some(Mixed(mixedDist)); }; }; + let build = (~continuous, ~discrete, ~assumptions) => switch (assumptions) { | {