@hugov/correl-range2
Version:
monte carlo simulation for correlated variables expressed as ranges
55 lines (42 loc) • 1.84 kB
Markdown
<!-- markdownlint-disable MD004 MD007 MD010 MD041 MD022 MD024 MD029 MD031 MD032 MD036 -->
*correlated variable monte carlo simulations*
• [Example](
```javascript
import SIM from '../sim.js'
const res = SIM(
(_,
// initiation ran once
fixed$ = _`600_000 900_000 [0 demand:0.6 price:0.3`,
month$ = _`5,000 7,000 demand:0.5 season:0.5`,
months = _`6 9 [1 season:0.5 price:-0.5`
)=>(
// calculations on every iterations
total$ = fixed$ + month$ * months
)=>({
// exported results
months,
month$,
total$
})
).run(10_000)
//console.log(res.buffer)
const stats=res.stats
console.log('total$ range', stats.total$.Q(0.1).toFixed(0), stats.total$.Q(0.9).toFixed(0))
console.log('correlation', stats.total$.cor('months'))
```
* *factory*: `randomVariableFactory => model`
* *randomVariableFactory*: taggedTemplate`low high [min med max] {riskName:40%}, ...correlation)` => `randomVariable` to match the simulation confidence interval. The string is parsed to match the `metanorm` arguments
* *randomVariable*: with `.valueOf()` that changes on each iteration
* *simulation*
* *stats*: empirical distribution cdf, pdf, quantiles, average (based on modules `sample-distribution` and `lazy-stats`)
1. use case is human approximation in decision making - "guesstimates"
2. default is to use a confidence interval of 80%
3. variables can be correlated with independent risk factors by providing the linear factor
4. to maintain correlation, each variable returns a single value per cycle - random variables are constant within a given cycle
[](http://www.opensource.org/licenses/MIT) © [Hugo Villeneuve](https://github.com/hville)