UNPKG

3.83 kBJavaScriptView Raw
1var B = require("./base");
2var J = require("jStat").jStat;
3
4var S = {
5// 均等分布
6runif:function(n, a, b) { return B.calls(n, J.uniform.sample, a, b); },
7dunif:J.uniform.pdf,
8punif:J.uniform.cdf,
9qunif:J.uniform.inv,
10// 常態分布
11rnorm:function(n, mean, sd) { return B.calls(n, J.normal.sample, mean, sd); },
12dnorm:J.normal.pdf,
13pnorm:J.normal.cdf,
14qnorm:J.normal.inv,
15// 布瓦松分布
16rpois:function(n, l) { return B.calls(n, J.poisson.sample, l); },
17dpois:J.poisson.pdf,
18ppois:J.poisson.cdf,
19qpois:J.poisson.inv,
20// F 分布
21rf:function(n, df1, df2) { return B.calls(n, J.centralF.sample, df1, df2); },
22df:J.centralF.pdf,
23pf:J.centralF.cdf,
24qf:J.centralF.inv,
25// T 分布
26rt:function(n, dof) { return B.calls(n, J.studentt.sample, dof); },
27dt:J.studentt.pdf,
28pt:J.studentt.cdf,
29qt:J.studentt.inv,
30// Beta 分布
31rbeta:function(n, alpha, beta) { return B.calls(n, J.beta.sample, alpha, beta); },
32beta:J.beta.pdf,
33pbeta:J.beta.cdf,
34qbeta:J.beta.inv,
35// 柯西分布
36rcauchy:function(n, local, scale) { return B.calls(n, J.cauchy.sample, local, scale); },
37dcauchy:J.cauchy.pdf,
38pcauchy:J.cauchy.cdf,
39qcauchy:J.cauchy.inv,
40// chisquare 分布
41rchisq:function(n, dof) { return B.calls(n, J.chisquare.sample, dof); },
42dchisq:J.chisquare.pdf,
43pchisq:J.chisquare.cdf,
44qchisq:J.chisquare.inv,
45// 指數分布
46rexp:function(n, rate) { return B.calls(n, J.exponential.sample, rate); },
47dexp:J.exponential.pdf,
48pexp:J.exponential.cdf,
49qexp:J.exponential.inv,
50// Gamma 分布
51rgamma:function(n, shape, scale) { return B.calls(n, J.gamma.sample, shape, scale); },
52dgamma:J.gamma.pdf,
53pgamma:J.gamma.cdf,
54qgamma:J.gamma.inv,
55// 反 Gamma 分布
56rinvgamma:function(n, shape, scale) { return B.calls(n, J.invgamma.sample, shape, scale); },
57dinvgamma:J.invgamma.pdf,
58pinvgamma:J.invgamma.cdf,
59qinvgamma:J.invgamma.inv,
60// 對數常態分布
61rlognormal:function(n, mu, sigma) { return B.calls(n, J.dlognormal.sample, mu, sigma); },
62lognormal:J.lognormal.pdf,
63plognormal:J.lognormal.cdf,
64qlognormal:J.lognormal.inv,
65// Pareto 分布
66rpareto:function(n, scale, shape) { return B.calls(n, J.pareto.sample, scale, shape); },
67dpareto:J.pareto.pdf,
68ppareto:J.pareto.cdf,
69qpareto:J.pareto.inv,
70// Weibull 分布
71rweibull:function(n, scale, shape) { return B.calls(n, J.weibull.sample, scale, shape); },
72dweibull:J.weibull.pdf,
73pweibull:J.weibull.cdf,
74qweibull:J.weibull.inv,
75// 三角分布
76rtriangular:function(n, a, b, c) { return B.calls(n, J.triangular.sample, a, b, c); },
77dtriangular:J.triangular.pdf,
78ptriangular:J.triangular.cdf,
79qtriangular:J.triangular.inv,
80// 類似 Beta 分布,但計算更簡單
81rkumaraswamy:function(n, alpha, beta) { return B.calls(n, J.kumaraswamy.sample, alpha, beta); },
82dkumaraswamy:J.kumaraswamy.pdf,
83pkumaraswamy:J.kumaraswamy.cdf,
84qkumaraswamy:J.kumaraswamy.inv,
85
86// ========== 離散分佈的 r, q 函數 ============
87qcdf:function(cdf, q, N, p) {
88 for (var i=0; i<=N; i++) {
89 if (cdf(i, N, p) > q) return i;
90 }
91 return N;
92},
93rcdf:function(cdf, n, N, p) {
94 var a = [];
95 for (var i=0; i<n; i++) {
96 var q = Math.random();
97 a.push(cdf(q, N, p));
98 }
99 return a;
100},
101// 二項分布
102dbinom:J.binomial.pdf,
103pbinom:J.binomial.cdf,
104qbinom:function(q, N, p) { return S.qcdf(S.pbinom, q, N, p); },
105rbinom:function(n, N, p) { return S.rcdf(S.qbinom, n, N, p); },
106// 負二項分布
107dnbinom:J.negbin.pdf,
108pnbinom:J.negbin.cdf,
109qnbinom:function(q, N, p) { return S.qcdf(S.pnbinom, q, N, p); },
110rnbinom:function(n, N, p) { return S.rcdf(S.qnbinom, n, N, p); },
111// 超幾何分布
112dhyper:J.hypgeom.pdf,
113phyper:J.hypgeom.cdf,
114qhyper:function(q, N, m, n) { return S.qcdf(S.phyper, q, N, p); },
115rhyper:function(n, N, m, k) { return S.rcdf(S.qhyper, n, N, p); },
116
117};
118
119module.exports = S;
\No newline at end of file