tweak: add explanation for magic number
This commit is contained in:
parent
e5655dc2d1
commit
bd3f2c99d1
|
@ -1,5 +1,8 @@
|
||||||
open SymbolicDistTypes
|
open SymbolicDistTypes
|
||||||
|
|
||||||
|
let normal95confidencePoint = 1.6448536269514722
|
||||||
|
// explained in website/docs/internal/ProcessingConfidenceIntervals
|
||||||
|
|
||||||
module Normal = {
|
module Normal = {
|
||||||
type t = normal
|
type t = normal
|
||||||
let make = (mean: float, stdev: float): result<symbolicDist, string> =>
|
let make = (mean: float, stdev: float): result<symbolicDist, string> =>
|
||||||
|
@ -11,7 +14,7 @@ module Normal = {
|
||||||
|
|
||||||
let from90PercentCI = (low, high) => {
|
let from90PercentCI = (low, high) => {
|
||||||
let mean = E.A.Floats.mean([low, high])
|
let mean = E.A.Floats.mean([low, high])
|
||||||
let stdev = (high -. low) /. (2. *. 1.6448536269514722)
|
let stdev = (high -. low) /. (2. *. normal95confidencePoint)
|
||||||
#Normal({mean: mean, stdev: stdev})
|
#Normal({mean: mean, stdev: stdev})
|
||||||
}
|
}
|
||||||
let inv = (p, t: t) => Jstat.Normal.inv(p, t.mean, t.stdev)
|
let inv = (p, t: t) => Jstat.Normal.inv(p, t.mean, t.stdev)
|
||||||
|
@ -120,7 +123,7 @@ module Lognormal = {
|
||||||
let logLow = Js.Math.log(low)
|
let logLow = Js.Math.log(low)
|
||||||
let logHigh = Js.Math.log(high)
|
let logHigh = Js.Math.log(high)
|
||||||
let mu = E.A.Floats.mean([logLow, logHigh])
|
let mu = E.A.Floats.mean([logLow, logHigh])
|
||||||
let sigma = (logHigh -. logLow) /. (2.0 *. 1.6448536269514722)
|
let sigma = (logHigh -. logLow) /. (2.0 *. normal95confidencePoint)
|
||||||
#Lognormal({mu: mu, sigma: sigma})
|
#Lognormal({mu: mu, sigma: sigma})
|
||||||
}
|
}
|
||||||
let fromMeanAndStdev = (mean, stdev) => {
|
let fromMeanAndStdev = (mean, stdev) => {
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
# Processing confidence intervals
|
||||||
|
|
||||||
|
This page explains what we are doing when we take a 95% confidence interval, and we get a mean and a standard deviation from it
|
||||||
|
|
||||||
|
## For normals
|
||||||
|
|
||||||
|
```js
|
||||||
|
module Normal = {
|
||||||
|
//...
|
||||||
|
let from90PercentCI = (low, high) => {
|
||||||
|
let mean = E.A.Floats.mean([low, high])
|
||||||
|
let stdev = (high -. low) /. (2. *. 1.6448536269514722)
|
||||||
|
#Normal({mean: mean, stdev: stdev})
|
||||||
|
}
|
||||||
|
//...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
We know that for a normal with mean $\mu$ and standard deviation $\sigma$,
|
||||||
|
|
||||||
|
$$
|
||||||
|
|
||||||
|
a \cdot Normal(\mu, \sigma) = Normal(a\cdot \mu, |a|\cdot \sigma)
|
||||||
|
|
||||||
|
$$
|
||||||
|
|
||||||
|
We can now look at the inverse cdf of a $Normal(0,1)$. We find that the 95% point is reached at $1.6448536269514722$. ([source](https://stackoverflow.com/questions/20626994/how-to-calculate-the-inverse-of-the-normal-cumulative-distribution-function-in-p)) This means that the 90% confidence interval is $[-1.6448536269514722, 1.6448536269514722]$, which has a width of $2 \cdot 1.6448536269514722$.
|
||||||
|
|
||||||
|
So then, if we take a $Normal(0,1)$ and we multiply it by $\frac{(high -. low)}{(2. *. 1.6448536269514722)}$, it's 90% confidence interval will be multiplied by the same amount. Then we just have to shift it by the mean to get our target normal.
|
||||||
|
|
||||||
|
## For lognormals
|
Loading…
Reference in New Issue
Block a user