Moved some functionality to Shape.re
This commit is contained in:
parent
710edc2d21
commit
7bc62d3934
|
@ -1,12 +1,12 @@
|
|||
module Shapee = {
|
||||
[@react.component]
|
||||
let make = (~shape: DistributionTypes.pointsType, ~timeScale, ~onHover) => {
|
||||
let discrete = Shape.Any.scaledDiscreteComponent(shape);
|
||||
let continuous = Shape.Any.scaledContinuousComponent(shape);
|
||||
let discrete = Shape.PointsType.scaledDiscreteComponent(shape);
|
||||
let continuous = Shape.PointsType.scaledContinuousComponent(shape);
|
||||
<div>
|
||||
<CdfChart__Plain
|
||||
minX={Shape.Any.minX(shape)}
|
||||
maxX={Shape.Any.maxX(shape)}
|
||||
minX={Shape.PointsType.minX(shape)}
|
||||
maxX={Shape.PointsType.maxX(shape)}
|
||||
?discrete
|
||||
?continuous
|
||||
color={`hex("333")}
|
||||
|
|
|
@ -77,44 +77,10 @@ let renderIfNeeded =
|
|||
};
|
||||
};
|
||||
|
||||
let normalizeCdf = (t: DistributionTypes.pointsType) => {
|
||||
switch (t) {
|
||||
| Mixed({continuous, discrete, discreteProbabilityMassFraction}) =>
|
||||
Mixed({
|
||||
continuous: continuous |> Shape.Continuous.normalizeCdf,
|
||||
discrete: discrete |> Shape.Discrete.scaleYToTotal(1.0),
|
||||
discreteProbabilityMassFraction,
|
||||
})
|
||||
| Discrete(d) => Discrete(d |> Shape.Discrete.scaleYToTotal(1.0))
|
||||
| Continuous(continuousShape) =>
|
||||
Continuous(Shape.Continuous.normalizeCdf(continuousShape))
|
||||
};
|
||||
};
|
||||
|
||||
let normalizePdf = (t: DistributionTypes.pointsType) => {
|
||||
switch (t) {
|
||||
| Mixed({continuous, discrete, discreteProbabilityMassFraction}) =>
|
||||
continuous
|
||||
|> Shape.Continuous.scalePdf(~scaleTo=1.0)
|
||||
|> E.O.fmap(r =>
|
||||
Mixed({
|
||||
continuous: r,
|
||||
discrete: discrete |> Shape.Discrete.scaleYToTotal(1.0),
|
||||
discreteProbabilityMassFraction,
|
||||
})
|
||||
)
|
||||
| Discrete(d) => Some(Discrete(d |> Shape.Discrete.scaleYToTotal(1.0)))
|
||||
| Continuous(continuousShape) =>
|
||||
continuousShape
|
||||
|> Shape.Continuous.scalePdf(~scaleTo=1.0)
|
||||
|> E.O.fmap(r => Continuous(r))
|
||||
};
|
||||
};
|
||||
|
||||
let normalize = (t: genericDistribution): option(genericDistribution) => {
|
||||
switch (t.generationSource) {
|
||||
| Shape(shape) =>
|
||||
normalizePdf(shape)
|
||||
Shape.PointsType.normalizePdf(shape)
|
||||
|> E.O.fmap(shape => {...t, generationSource: Shape(shape)})
|
||||
| GuesstimatorString(_) => Some(t)
|
||||
};
|
||||
|
@ -125,7 +91,7 @@ let yIntegral = (t: DistributionTypes.genericDistribution, x) => {
|
|||
let normalize = n => n *. Domain.normalizeProbabilityMass(t.domain);
|
||||
switch (t) {
|
||||
| {generationSource: Shape(shape)} =>
|
||||
Shape.Any.yIntegral(shape, x)
|
||||
Shape.PointsType.yIntegral(shape, x)
|
||||
|> E.O.fmap(addInitialMass)
|
||||
|> E.O.fmap(normalize)
|
||||
| _ => None
|
||||
|
|
|
@ -234,7 +234,7 @@ module Mixed = {
|
|||
};
|
||||
};
|
||||
|
||||
module Any = {
|
||||
module PointsType = {
|
||||
type t = DistributionTypes.pointsType;
|
||||
|
||||
let y = (t: t, x: float) =>
|
||||
|
@ -318,4 +318,38 @@ module Any = {
|
|||
| Continuous(_) => None
|
||||
};
|
||||
};
|
||||
|
||||
let normalizeCdf = (t: DistributionTypes.pointsType) => {
|
||||
switch (t) {
|
||||
| Mixed({continuous, discrete, discreteProbabilityMassFraction}) =>
|
||||
Mixed({
|
||||
continuous: continuous |> Continuous.normalizeCdf,
|
||||
discrete: discrete |> Discrete.scaleYToTotal(1.0),
|
||||
discreteProbabilityMassFraction,
|
||||
})
|
||||
| Discrete(d) => Discrete(d |> Discrete.scaleYToTotal(1.0))
|
||||
| Continuous(continuousShape) =>
|
||||
Continuous(Continuous.normalizeCdf(continuousShape))
|
||||
};
|
||||
};
|
||||
|
||||
let normalizePdf = (t: DistributionTypes.pointsType) => {
|
||||
switch (t) {
|
||||
| Mixed({continuous, discrete, discreteProbabilityMassFraction}) =>
|
||||
continuous
|
||||
|> Continuous.scalePdf(~scaleTo=1.0)
|
||||
|> E.O.fmap(r =>
|
||||
Mixed({
|
||||
continuous: r,
|
||||
discrete: discrete |> Discrete.scaleYToTotal(1.0),
|
||||
discreteProbabilityMassFraction,
|
||||
})
|
||||
)
|
||||
| Discrete(d) => Some(Discrete(d |> Discrete.scaleYToTotal(1.0)))
|
||||
| Continuous(continuousShape) =>
|
||||
continuousShape
|
||||
|> Continuous.scalePdf(~scaleTo=1.0)
|
||||
|> E.O.fmap(r => Continuous(r))
|
||||
};
|
||||
};
|
||||
};
|
|
@ -107,6 +107,21 @@ module Model = {
|
|||
let xRisk = conditionals =>
|
||||
Prop.Value.ConditionalArray.get(conditionals, "Global Existential Event");
|
||||
|
||||
// TODO: Fixe number that integral is calculated for
|
||||
let getGlobalCatastropheChance = dateTime => {
|
||||
let model = GlobalCatastrophe.Model.make(dateTime);
|
||||
switch (model) {
|
||||
| Prop.Value.GenericDistribution(genericDistribution) =>
|
||||
GenericDistribution.renderIfNeeded(
|
||||
~sampleCount=1000,
|
||||
genericDistribution,
|
||||
)
|
||||
|> E.O.bind(_, GenericDistribution.normalize)
|
||||
|> E.O.bind(_, GenericDistribution.yIntegral(_, 18.0))
|
||||
| _ => None
|
||||
};
|
||||
};
|
||||
|
||||
let make =
|
||||
(
|
||||
group: group,
|
||||
|
@ -131,7 +146,14 @@ module Model = {
|
|||
switch (xRisk) {
|
||||
| Some({truthValue: true}) => "0"
|
||||
| Some({truthValue: false}) => difference
|
||||
| None => "uniform(0,1) > .3 ? " ++ difference ++ ": 0"
|
||||
| None =>
|
||||
let foo =
|
||||
getGlobalCatastropheChance(dateTime)
|
||||
|> E.O.fmap(E.Float.with2DigitsPrecision)
|
||||
|> E.O.fmap((r: string) =>
|
||||
"uniform(0,1) > " ++ r ++ " ? " ++ difference ++ ": 0"
|
||||
);
|
||||
foo |> E.O.default("");
|
||||
};
|
||||
|
||||
let genericDistribution =
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
let guesstimatorString = "mm(10 to 30, floor(20 to 25), [.5,.5])";
|
||||
let guesstimatorString = "20 to 80";
|
||||
|
||||
module Model = {
|
||||
let make = (currentDateTime: MomentRe.Moment.t) => {
|
||||
|
@ -6,7 +6,6 @@ module Model = {
|
|||
GenericDistribution.make(
|
||||
~generationSource=GuesstimatorString(guesstimatorString),
|
||||
~probabilityType=Cdf,
|
||||
~domain=RightLimited({xPoint: 200., excludingProbabilityMass: 0.3}),
|
||||
~unit=TimeDistribution({zero: currentDateTime, unit: `years}),
|
||||
(),
|
||||
);
|
||||
|
|
Loading…
Reference in New Issue
Block a user