@numero-uno-jpn/rstats 0.5.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/CHANGELOG.md +101 -0
  2. package/README.ja.md +36 -20
  3. package/README.md +34 -18
  4. package/THIRD_PARTY_NOTICES.md +25 -5
  5. package/dist/chunks/chunk-2JCIB5H2.js +2 -0
  6. package/dist/chunks/chunk-7JVSDGQQ.js +2 -0
  7. package/dist/chunks/chunk-7NK4SA6B.js +2 -0
  8. package/dist/chunks/chunk-AJYQNFXK.js +2 -0
  9. package/dist/chunks/chunk-DRNMIEYH.js +2 -0
  10. package/dist/chunks/chunk-NAYDS7CL.js +2 -0
  11. package/dist/chunks/chunk-NOCEAM44.js +2 -0
  12. package/dist/chunks/chunk-QNAIK4PY.js +2 -0
  13. package/dist/chunks/chunk-TPC6MTYC.js +2 -0
  14. package/dist/chunks/chunk-UGUQYWRQ.js +2 -0
  15. package/dist/chunks/chunk-XM2TVD63.js +2 -0
  16. package/dist/chunks/chunk-Y4IZV7XK.js +2 -0
  17. package/dist/chunks/chunk-ZWJ42QN6.js +2 -0
  18. package/dist/descriptive/basic.d.ts +73 -0
  19. package/dist/descriptive/basic.js +256 -0
  20. package/dist/descriptive/cov.d.ts +39 -0
  21. package/dist/descriptive/cov.js +105 -0
  22. package/dist/descriptive/hist.d.ts +64 -0
  23. package/dist/descriptive/hist.js +304 -0
  24. package/dist/descriptive/moments.d.ts +63 -0
  25. package/dist/descriptive/moments.js +158 -0
  26. package/dist/descriptive/quantile.d.ts +50 -0
  27. package/dist/descriptive/quantile.js +131 -0
  28. package/dist/descriptive/rank.d.ts +23 -0
  29. package/dist/descriptive/rank.js +72 -0
  30. package/dist/descriptive/table.d.ts +54 -0
  31. package/dist/descriptive/table.js +160 -0
  32. package/dist/descriptive.js +2 -0
  33. package/dist/distributions/arcsine.d.ts +24 -0
  34. package/dist/distributions/arcsine.js +73 -0
  35. package/dist/distributions/invgamma.d.ts +29 -0
  36. package/dist/distributions/invgamma.js +85 -0
  37. package/dist/distributions/kumaraswamy.d.ts +17 -0
  38. package/dist/distributions/kumaraswamy.js +96 -0
  39. package/dist/distributions/laplace.d.ts +23 -0
  40. package/dist/distributions/laplace.js +69 -0
  41. package/dist/distributions/multinomial.d.ts +24 -0
  42. package/dist/distributions/multinomial.js +70 -0
  43. package/dist/distributions/nbeta.js +28 -10
  44. package/dist/distributions/nchisq.js +20 -3
  45. package/dist/distributions/pareto.d.ts +23 -0
  46. package/dist/distributions/pareto.js +76 -0
  47. package/dist/distributions/summary.d.ts +25 -0
  48. package/dist/distributions/summary.js +289 -0
  49. package/dist/distributions/triangular.d.ts +25 -0
  50. package/dist/distributions/triangular.js +87 -0
  51. package/dist/distributions.js +2 -0
  52. package/dist/entries/descriptive.d.ts +7 -0
  53. package/dist/entries/descriptive.js +8 -0
  54. package/dist/entries/distributions.d.ts +41 -0
  55. package/dist/entries/distributions.js +41 -0
  56. package/dist/entries/linalg.d.ts +11 -0
  57. package/dist/entries/linalg.js +11 -0
  58. package/dist/entries/numerics.d.ts +8 -0
  59. package/dist/entries/numerics.js +6 -0
  60. package/dist/entries/special.d.ts +9 -0
  61. package/dist/entries/special.js +9 -0
  62. package/dist/entries/tests.d.ts +21 -0
  63. package/dist/entries/tests.js +20 -0
  64. package/dist/htest/ansariTest.d.ts +13 -0
  65. package/dist/htest/ansariTest.js +80 -0
  66. package/dist/htest/aov.d.ts +85 -0
  67. package/dist/htest/aov.js +178 -0
  68. package/dist/htest/binomTest.d.ts +36 -0
  69. package/dist/htest/binomTest.js +121 -0
  70. package/dist/htest/cor.d.ts +14 -0
  71. package/dist/htest/cor.js +4 -3
  72. package/dist/htest/core/ansari.d.ts +18 -0
  73. package/dist/htest/core/ansari.js +121 -0
  74. package/dist/htest/core/kolmogorov.d.ts +26 -0
  75. package/dist/htest/core/kolmogorov.js +221 -0
  76. package/dist/htest/core/mantelhaen.d.ts +26 -0
  77. package/dist/htest/core/mantelhaen.js +145 -0
  78. package/dist/htest/core/shapiro.d.ts +24 -0
  79. package/dist/htest/core/shapiro.js +142 -0
  80. package/dist/htest/core/smirnov.d.ts +20 -0
  81. package/dist/htest/core/smirnov.js +75 -0
  82. package/dist/htest/fisherTest.js +134 -120
  83. package/dist/htest/groups.d.ts +20 -0
  84. package/dist/htest/groups.js +62 -0
  85. package/dist/htest/ksTest.d.ts +31 -0
  86. package/dist/htest/ksTest.js +106 -0
  87. package/dist/htest/mantelhaenTest.d.ts +26 -0
  88. package/dist/htest/mantelhaenTest.js +196 -0
  89. package/dist/htest/mcnemarTest.d.ts +26 -0
  90. package/dist/htest/mcnemarTest.js +99 -0
  91. package/dist/htest/onewayTest.d.ts +26 -0
  92. package/dist/htest/onewayTest.js +97 -0
  93. package/dist/htest/pairwise.d.ts +64 -0
  94. package/dist/htest/pairwise.js +152 -0
  95. package/dist/htest/poissonTest.d.ts +35 -0
  96. package/dist/htest/poissonTest.js +170 -0
  97. package/dist/htest/propTest.d.ts +37 -0
  98. package/dist/htest/propTest.js +164 -0
  99. package/dist/htest/rankTests.d.ts +52 -0
  100. package/dist/htest/rankTests.js +234 -0
  101. package/dist/htest/types.d.ts +2 -0
  102. package/dist/htest/types.js +6 -0
  103. package/dist/htest/varTest.d.ts +48 -0
  104. package/dist/htest/varTest.js +118 -0
  105. package/dist/htest/wilcoxTest.js +136 -174
  106. package/dist/index.d.ts +6 -50
  107. package/dist/index.js +8 -50
  108. package/dist/integrate/quadpack.d.ts +29 -0
  109. package/dist/integrate/quadpack.js +525 -0
  110. package/dist/internal/seq.d.ts +5 -0
  111. package/dist/internal/seq.js +14 -0
  112. package/dist/internal/uniroot.js +10 -71
  113. package/dist/linalg/lu.d.ts +45 -0
  114. package/dist/linalg/lu.js +88 -0
  115. package/dist/linalg/ops.d.ts +90 -0
  116. package/dist/linalg/ops.js +320 -0
  117. package/dist/linalg.js +2 -0
  118. package/dist/models/lm.d.ts +98 -0
  119. package/dist/models/lm.js +187 -0
  120. package/dist/numerics/deriv.d.ts +37 -0
  121. package/dist/numerics/deriv.js +150 -0
  122. package/dist/numerics/integrate.d.ts +91 -0
  123. package/dist/numerics/integrate.js +264 -0
  124. package/dist/numerics/interp.d.ts +103 -0
  125. package/dist/numerics/interp.js +581 -0
  126. package/dist/numerics/ode.d.ts +23 -0
  127. package/dist/numerics/ode.js +59 -0
  128. package/dist/numerics.js +2 -0
  129. package/dist/optim/localmin.d.ts +16 -0
  130. package/dist/optim/localmin.js +97 -0
  131. package/dist/random/beta.js +1 -1
  132. package/dist/random/binomial.js +1 -1
  133. package/dist/random/continuous.js +1 -1
  134. package/dist/random/extra.d.ts +33 -0
  135. package/dist/random/extra.js +62 -0
  136. package/dist/random/gamma.js +1 -1
  137. package/dist/random/hyper.js +1 -1
  138. package/dist/random/mt.js +0 -1
  139. package/dist/random/poisson.js +0 -1
  140. package/dist/random/rank.js +1 -1
  141. package/dist/random/rng.js +1 -1
  142. package/dist/random/sample.js +1 -1
  143. package/dist/rstats.js +2 -2
  144. package/dist/special/besselIK.d.ts +38 -0
  145. package/dist/special/besselIK.js +315 -0
  146. package/dist/special/besselJY.d.ts +32 -0
  147. package/dist/special/besselJY.js +508 -0
  148. package/dist/special/besselSeries.d.ts +8 -0
  149. package/dist/special/besselSeries.js +24 -0
  150. package/dist/special/beta.js +22 -5
  151. package/dist/special/choose.d.ts +75 -0
  152. package/dist/special/choose.js +233 -0
  153. package/dist/special/erf.d.ts +28 -2
  154. package/dist/special/erf.js +37 -10
  155. package/dist/special/extra.d.ts +47 -0
  156. package/dist/special/extra.js +220 -0
  157. package/dist/special/igam.d.ts +4 -0
  158. package/dist/special/igam.js +57 -2
  159. package/dist/special/incbet.js +77 -22
  160. package/dist/special/lgammaDiff.d.ts +7 -0
  161. package/dist/special/lgammaDiff.js +16 -3
  162. package/dist/special/psigamma.d.ts +48 -0
  163. package/dist/special/psigamma.js +318 -0
  164. package/dist/special/rCompatible.d.ts +8 -0
  165. package/dist/special/rCompatible.js +1 -0
  166. package/dist/special.js +2 -0
  167. package/dist/tests.js +2 -0
  168. package/package.json +26 -1
@@ -0,0 +1,8 @@
1
+ /** Option shared by functions whose edge cases R defines differently from the mathematical function */
2
+ export interface RCompatibleOptions {
3
+ /**
4
+ * `true` (default) returns what R returns at the edge cases listed for each function; `false` returns the
5
+ * mathematical value there instead (see docs/differences-from-r.md).
6
+ */
7
+ rCompatible?: boolean;
8
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ /*! rStats.js 0.6.1 | MIT License | includes code ported from SciPy, Boost.Math, statsmodels, LAPACK and others: see THIRD_PARTY_NOTICES.md at https://github.com/numero-uno-jpn/rStats.js */
2
+ import{a as z,b as U,c as T,d as Et,e as Rt}from"./chunks/chunk-2JCIB5H2.js";import{A as Tt,B as nt,C as gt,b as x,c as Ct,h as Mt,k as g,l as F,m as Z,n as L,o as Q,p as $,q as bt,u as tt,v as pt,w as Nt,y as et}from"./chunks/chunk-QNAIK4PY.js";import{b as j,d as q,f as R,g as E,h as ht,i as O,k as D}from"./chunks/chunk-UGUQYWRQ.js";var it=30;function V(t){return t===Math.floor(t)}function dt(t,e){if(V(t))return t;if(t>=0)return z(t)?t:U(t);let n=e-1-t;return z(n)?t:e-1-U(n)||-0}function It(t,e){let n=[1,0];for(let r=0;r<e;r++)n=O(E(n,j(t,-r)),[r+1,0]);return n}function rt(t,e){return Math.min(t,e)>=1&&Math.max(t,e)<2**52?gt(t,e):[nt(t,e),0]}function yt(t,e){if(t<0){let f=q(D(j(e,-t)),rt(-t,e+1));return{log:[-f[0],-f[1]],sign:e%2===0?1:-1}}if(V(t)&&t<e)return;if(t>=e-1){let f=q(D(j(t,1)),rt(t-e+1,e+1));return{log:[-f[0],-f[1]],sign:1}}let n=g(t),[r,i]=j(t,1),[o,s]=j(e,-t),a=i===0&&s===0?0:T(r+o),c=(i===0?0:i*(T(r)-a))+(s===0?0:s*(T(o)-a));return{log:q(rt(r,o),[Math.log(Math.abs(n)/Math.PI)+c,0]),sign:(e%2===0?-1:1)*Math.sign(n)}}function Jt(t,e,n){if(Number.isNaN(t)||Number.isNaN(e))return NaN;let r=n?.rCompatible??!0;if(e=U(e),e<0)return 0;if(e===0)return 1;if(!Number.isFinite(e))return r&&t>=0&&t<1/0?0:NaN;if(!Number.isFinite(t))return r&&e>=it?NaN:t>0||e%2===0?1/0:-1/0;if(e<it){let s=r&&!V(t)&&!z(t);if(s&&t>=0&&U(t)<e)return 0;let a=It(t,e),c=a[0]+a[1];if(Number.isFinite(c))return V(t)||s?Math.round(c):c;let l=1;for(let f=0;f<e;f++)l=l*(t-f)/(f+1);return l}if(r&&(t=dt(t,e),Object.is(t,-0)))return e%2===0?0:-0;let i=yt(t,e);if(i===void 0)return 0;let o=i.sign*Math.exp(i.log[0])*(1+i.log[1]);return V(t)&&Number.isFinite(o)?Math.round(o):o}function Yt(t,e,n){if(Number.isNaN(t)||Number.isNaN(e))return NaN;let r=n?.rCompatible??!0;if(e=U(e),e<0)return-1/0;if(e===0)return 0;if(!Number.isFinite(e))return r&&t>=0&&t<1/0?-1/0:NaN;if(!Number.isFinite(t))return r&&e>=2?NaN:1/0;if(r&&e>=2&&(t=dt(t,e)),e<it){let o=It(t,e),s=Math.abs(o[0]+o[1]);if(s>1e-300&&s<1e300){let c=D(o[0]<0?[-o[0],-o[1]]:o);return c[0]+c[1]}if(s===0)return-1/0;let a=-L(e+1);for(let c=0;c<e;c++)a+=Math.log(Math.abs(t-c));return a}let i=yt(t,e);return i===void 0?-1/0:V(t)&&i.log[0]<36?Math.log(Math.round(Math.exp(i.log[0])*(1+i.log[1]))):i.log[0]+i.log[1]}function Kt(t){return F(t+1)}function Bt(t){return Math.abs(t)<=.2?Q(t):L(t+1)}var Pt=22250738585072014e-324;function k(t,e,n){if(t<10)return Math.pow(e/2,t)/F(t+1)*n;let r=e/2,i=tt(t,r,!1);if(i>=Pt&&r<700){let s=i*Math.exp(r)*n;if(Math.abs(s)>=Pt)return s}let o=tt(t,r,!0)+r+Math.log(Math.abs(n));return Math.sign(n)*Math.exp(o)}var _=Number.EPSILON,v=1e6;function qt(t){return Math.expm1(Q(t))}function Ot(t,e){let n=qt(t),r=qt(-t),i=Math.log(e/2),o=Math.exp(t*i),s=-i*t,a=Math.abs(t)<_?1:g(t)/(t*Math.PI),c=Math.abs(s)<_?1:Math.sinh(s)/s,l=Math.abs(t)<_?-.5772156649015329:.5/t*(n-r)*a,f=(2+n+r)*a/2,u=(n+1)/(2*o),m=(1+r)*o/2,M=(Math.cosh(s)*l+c*-i*f)/a,b=u,h=1,w=h*M,S=h*b;for(let I=1;I<v&&(M=(I*M+u+m)/(I*I-t*t),u/=I-t,m/=I+t,b=u-I*M,h*=e*e/(4*I),w+=h*M,S+=h*b,!(Math.abs(h*M)<Math.abs(w)*_));I++);return[w,2*S/e]}function Qt(t,e){let n=Math.sqrt(Number.MIN_VALUE*4503599627370496),r=n,i=n,o=0;for(let s=1;s<v;s++){let a=2*(t+s)/e;r=a+1/r,o=a+o,r===0&&(r=n),o===0&&(o=n),o=1/o;let c=r*o;if(i*=c,Math.abs(c-1)<=2*_)break}return i}function Ut(t,e){let n=t*t-.25,r=2*(e+1),i=1/r,o=i,s=i,a=0,c=1,l=-n,f=l,u=1+f*s;for(let b=2;b<v;b++){n-=2*(b-1),r+=2,i=1/(r+n*i),s*=r*i-1,o+=s;let h=(a-(r-2)*c)/n;if(a=c,c=h,l*=-n/b,f+=l*h,u+=f*s,h<_&&(l*=h,a/=h,c/=h),Math.abs(f*s)<Math.abs(u)*_)break}let m=(.5+t+e+(t*t-.25)*o)/e,M=Math.sqrt(Math.PI/(2*e))/u;return[M,M*m]}function G(t,e){if(!Number.isFinite(e))return e>0?t*(1/0):t*0;for(;e>1e3;)t*=2**1e3,e-=1e3;for(;e<-1e3;)t*=2**-1e3,e+=1e3;return t*2**e}function St(t,e){let n=Math.round(t),r=t-n,i,o;if(r===-.5)i=o=Math.sqrt(Math.PI/(2*e));else if(e<=2){let[a,c]=Ot(r,e),l=Math.exp(e);i=a*l,o=c*l}else[i,o]=Ut(r,e);let s=0;for(let a=1;a<=n;a++){let c=2*(r+a)/e,l=Math.log2(Math.abs(o))+Math.log2(c);if(l>900&&Number.isFinite(l)){let u=Math.ceil(l-800);i=G(i,-u),o=G(o,-u),s+=u}let f=c*o+i;i=o,o=f}return{k:i,k1:o,exp2:s}}function Vt(t,e){let n=e*e/4,r=1,i=0;for(let o=1;o<v&&(i+=r,r*=n/o,r/=o+t,!(Math.abs(r)<=_*Math.abs(i)));o++);return k(t,e,i+r)}function Xt(t,e,n){if(t===0||!Number.isFinite(t))return t;let r=t,i=e,o=n>0?700:-700,s=Math.exp(o);for(;Math.abs(n)>700;){n-=o,r*=s;let a=Math.floor(Math.log2(Math.abs(r)));r=G(r,-a),i+=a}return G(r*Math.exp(n),i)}function ot(t,e,n){let r=t.ex+n;return r===0?G(t.m,t.e2):Xt(t.m,t.e2,r*e)}function Zt(t,e){if(t===.5)return{m:Math.sqrt(2/(e*Math.PI))*(-Math.expm1(-2*e)/2),e2:0,ex:1};if(t>0&&e/t<.25)return{m:Vt(t,e),e2:0,ex:0};let n=(4*t*t+10)/(8*e);if(n*=n,n*=n,n/=24,n<_*10&&e>100){let a=4*t*t,c=8*e,l=a-1,f=c,u=1-l/f;return l*=a-9,f*=c*2,u+=l/f,l*=a-25,f*=c*3,u-=l/f,{m:u/Math.sqrt(2*e*Math.PI),e2:0,ex:1}}let{k:r,k1:i,exp2:o}=St(t,e),s=Qt(t,e);return{m:1/(e*(r*s+i)),e2:-o,ex:1}}function jt(t,e){let n=4*t*t,r=8*e,i=(n-1)/r,o=i*(n-9)/(2*r),s=o*(n-25)/(3*r),a=s*(n-49)/(4*r),c=1+i+o+s;if(Math.abs(a)<_*Math.abs(c))return{m:c*Math.sqrt(Math.PI)/Math.sqrt(2*e),e2:0,ex:-1};let{k:l,exp2:f}=St(t,e);return{m:l,e2:f,ex:-1}}function Gt(t,e,n={}){let r=n.exponScaled??!1;if(Number.isNaN(t)||Number.isNaN(e)||t<0||!Number.isFinite(e))return NaN;let i=Math.abs(e),o=e<0&&e!==Math.floor(e);if(t===0)return o?g(i)>0?1/0:-1/0:e===0?1:0;if(t===1/0)return r?0:1/0;let s=r?-1:0,a=ot(Zt(i,t),t,s);if(!o)return a;let c=jt(i,t);return a+ot({...c,m:2/Math.PI*g(i)*c.m},t,s)}function Ht(t,e,n={}){let r=n.exponScaled??!1;if(Number.isNaN(t)||Number.isNaN(e)||t<0||!Number.isFinite(e))return NaN;let i=Math.abs(e);return t===0?1/0:t===1/0?0:ot(jt(i,t),t,r?1:0)}var y=Number.EPSILON;function J(t,e){if(!Number.isFinite(e))return e>0?t*(1/0):t*0;for(;e>1e3;)t*=2**1e3,e-=1e3;for(;e<-1e3;)t*=2**-1e3,e+=1e3;return t*2**e}function Ft(t,e,n,r,i){let o=r,s=i,a=0;for(let c=1;c<=n;c++){let l=2*(t+c)/e,f=Math.log2(Math.abs(s))+Math.log2(l);if(f>900&&Number.isFinite(f)){let m=Math.ceil(f-800);o=J(o,-m),s=J(s,-m),a+=m}let u=l*s-o;o=s,s=u}return{y:o,y1:s,e2:a}}var Y=1e6,d=Math.sqrt(22250738585072014e-324),Wt=Number.MAX_VALUE;function Dt(t){return Math.expm1(Q(t))}function X(t){return g(.5-Math.abs(t%2))}function Lt(t,e){let n=-(e/2)*(e/2),r=1,i=0;for(let o=1;o<Y&&(i+=r,r*=n/(o*(o+t)),!(Math.abs(r)<=y*Math.abs(i)));o++);return k(t,e,i+r)}function $t(t,e){let n=Math.log(e/2),r=0,i=t>=170||709.78/t<Math.abs(n),o;if(i){let m=L(t);if(n=t*n,o=m-Math.log(Math.PI)-n,709.78<o){let M=Math.ceil((o-700)/Math.LN2);o-=M*Math.LN2,r=M}o=-Math.exp(o)}else{let m=F(t);n=Math.pow(e/2,t),Wt*n<m&&(m*=2**-1e3,r=1e3),o=-m/(Math.PI*n)}let s=-(e/2)*(e/2),a=1,c=0;for(let m=1;m<Y&&(c+=a,a*=s/(m*(m-t)),!(Math.abs(a)<=y*Math.abs(c)));m++);let l=(c+a)*o,f;if(!i)f=F(-t)*X(t)*n/Math.PI;else{let m=Z(-t);f=Math.exp(m.value+n)*m.sign/Math.PI}a=1;let u=0;for(let m=1;m<Y&&(u+=a,a*=s/(m*(m+t)),!(Math.abs(a)<=y*Math.abs(u)));m++);return u+=a,l-=J(f*u,-r),{m:l,e2:r}}function zt(t,e){let n=1,r=0,i=1,o=8*e,s=1,a=4*t*t,c=1,l=!0;do{c*=(a-s*s)/(i*o),r+=c,i+=1,s+=2;let f=(s*s-a)/(i*o);l=Math.abs(f)<.5,c*=f,n+=c,i+=1,s+=2}while(Math.abs(c)>2*y*n&&l);return l?{p:n,q:r}:void 0}function kt(t,e){let n=Dt(t),r=Dt(-t),i=g(t),o=g(t/2),s=Math.pow(e/2,t),a=Math.log(e/2),c=-a*t,l=Math.abs(c)<y?1:Math.sinh(c)/c,f=Math.abs(t)<y?t*Math.PI*Math.PI/2:2*o*o/t,u=t===0?-.5772156649015329:(n-r)/((1+n)*(1+r)*2*t),m=(2+n+r)/((1+n)*(1+r)*2),M=Math.abs(t)<y?1/Math.PI:t/i,b=(u*Math.cosh(c)-m*a*l)*2*M,h=M/(s*(1+r)),w=M*s/(1+n),S=b+f*w,I=h,A=1,K=A*S,H=A*I,W=t*t,p=-e*e/4;for(let N=1;N<Y&&(b=(N*b+h+w)/(N*N-W),h/=N-t,w/=N+t,S=b+f*w,I=h-N*S,A*=p/N,K+=A*S,H+=A*I,!(Math.abs(A*S)<Math.abs(K)*y));N++);return[-K,-2*H/e]}function vt(t,e){let n=[d,0],r=[d,0],i=[0,0],o=1,s=[e,0];for(let a=1;a<Y*100;a++){let c=j(t,a),l=O([2*c[0],2*c[1]],s);n=R(l,O([1,0],n)),i=R(l,i),n[0]===0&&(n=[d,0]),i[0]===0&&(i=[d,0]),i=O([1,0],i);let f=E(n,i);if(r=E(r,f),i[0]<0&&(o=-o),Math.abs(f[0]-1+f[1])<y*y)break}return{fv:-(r[0]+r[1]),sign:o}}function wt(t,e){if(e>30)return vt(t,e);let n=d,r=d,i=0,o=1;for(let s=1;s<Y*100;s++){let a=2*(t+s)/e;n=a-1/n,i=a-i,n===0&&(n=d),i===0&&(i=d),i=1/i;let c=n*i;if(r*=c,i<0&&(o=-o),Math.abs(c-1)<2*y)break}return{fv:-r,sign:o}}function _t(t,e){let n=-.5/e,r=1,i=n,o=r,s=t*t,a=(.25-s)/e,c=2*e,l=2,f=i*i+1;o=l+a*i/f,i=c+a/f;let u=c,m=l;Math.abs(i)+Math.abs(o)<d&&(i=d),Math.abs(u)+Math.abs(m)<d&&(u=d),f=u*u+m*m,u=u/f,m=-m/f;let M=i*u-o*m,b=o*u+i*m;f=n,n=f*M-r*b,r=f*b+r*M;for(let h=2;h<Y&&(a=h-.5,a*=a,a-=s,l+=2,f=i*i+o*o,i=c+a*i/f,o=l-a*o/f,u=c+a*u,m=l+a*m,Math.abs(i)+Math.abs(o)<d&&(i=d),Math.abs(u)+Math.abs(m)<d&&(u=d),f=u*u+m*m,u=u/f,m=-m/f,M=i*u-o*m,b=o*u+i*m,f=n,n=f*M-r*b,r=f*b+r*M,!(Math.abs(M-1)+Math.abs(b)<2*y));h++);return{p:n,q:r}}function xt(t,e){let n=1,r=4*t*t,i=2*e;return i*=i,n+=(r-1)/(2*i),n+=3*(r-1)*(r-9)/(i*i*8),n+=15*(r-1)*(r-9)*(r-25)/(i*i*i*8*6),Math.sqrt(n*2/(Math.PI*e))}function te(t,e){let n=4*t*t,r=4*e,i=r*r,o=0;return o+=(n-1)/(2*r),r*=i,o+=(n-1)*(n-25)/(6*r),r*=i,o+=(n-1)*(n*n-114*n+1073)/(5*r),r*=i,o+=(n-1)*(5*n*n*n-1535*n*n+54703*n-375733)/(14*r),o}function ee(t,e){let n=xt(t,e),r=te(t,e),i=Math.cos(e),o=Math.sin(e),s=X(t/2+.25),a=g(t/2+.25),c=Math.sin(r),l=Math.cos(r),f=(c*(i*s+o*a)+l*(o*s-i*a))*n;return{j:(l*(i*s+o*a)-c*(o*s-i*a))*n,y:f}}function st(t,e,n){let r=Math.round(t),i=t-r,o=2/(e*Math.PI);if(!n&&(e<5||t>e*e/4))return{j:Lt(t,e),y:{m:NaN,e2:0}};if(e<1&&i!==0&&Math.log(y/2)>t*Math.log(e/2*(e/2)/t))return{j:Lt(t,e),y:$t(t,e)};if(Math.max(t,1)<e*.011048543456039806){let p=ee(t,e);return{j:p.j,y:{m:p.y,e2:0}}}if(e>8){let p=zt(t,e);if(p!==void 0){let N=(t/2+.25)%2,P=Math.sin(e),C=Math.cos(e),B=g(N),ct=X(N),lt=P*ct-B*C,ut=C*ct+P*B,mt=Math.SQRT2/(Math.sqrt(Math.PI)*Math.sqrt(e));return{j:mt*(p.p*ut-p.q*lt),y:{m:mt*(p.p*lt+p.q*ut),e2:0}}}}if(e<=2){let[p,N]=kt(i,e),P=Ft(i,e,r,p,N),{fv:C}=wt(t,e);return{j:J(o/(P.y*C-P.y1),-P.e2),y:{m:P.y,e2:P.e2}}}let{fv:s,sign:a}=wt(t,e);if(e>=t&&t>2){let{p,q:N}=_t(t,e),P=t/e-s,C=(p-P)/N;C===0&&(C=t*y/e);let B=a*Math.sqrt(o/(N+C*(p-P)));return{j:B,y:{m:C*B,e2:0}}}let c=d,l=s*a*c,f=a*c,u=0;for(let p=r;p>0;p--){let N=2*(i+p)/e;Math.abs(f)>2**900&&(l*=2**-900,f*=2**-900,u+=900);let P=N*f-l;P===0&&(P=l*y/2),l=f,f=P}let m=J(a*c/f,-u),M=l/f,{p:b,q:h}=_t(i,e),w=i/e-M,S=(b-w)/h;S===0&&(S=i*y/e);let I=Math.sign(f)*Math.sqrt(o/(h+S*(b-w))),A=I*m,K=S*I,H=K*(i/e-b-h/S);if(!n)return{j:A,y:{m:NaN,e2:0}};let W=Ft(i,e,r,K,H);return{j:A,y:{m:W.y,e2:W.e2}}}function ne(t,e){if(Number.isNaN(t)||Number.isNaN(e)||t<0||!Number.isFinite(e))return NaN;let n=Math.abs(e),r=e<0&&e!==Math.floor(e);if(t===0)return e===0?1:r?g(n)>0?1/0:-1/0:0;if(t===1/0)return 0;if(!r){let o=st(n,t,!1).j;return e<0&&n%2===1?-o:o}let i=st(n,t,!0);return X(n)*i.j-J(g(n)*i.y.m,i.y.e2)}function re(t,e){if(Number.isNaN(t)||Number.isNaN(e)||t<0||!Number.isFinite(e))return NaN;let n=Math.abs(e),r=e<0;if(t===0){if(!r)return-1/0;let a=X(n);return a===0?0:a>0?-1/0:1/0}if(t===1/0)return 0;let i=st(n,t,!0);if(!r)return J(i.y.m,i.y.e2);let o=X(n),s=g(n);return(s!==0?s*i.j:0)+(o===0?0:J(o*i.y.m,i.y.e2))}function ie(t,e){if(Number.isNaN(t)||Number.isNaN(e)||t<0||!(e>0))return{lower:NaN,upper:NaN,logLower:NaN,logUpper:NaN};let n=L(e),r=F(e),i=l=>{let f=et(e,t,l,!1),u=r*f;if(Number.isFinite(r)&&f>At&&Number.isFinite(u)&&u>At)return[u,Math.log(u)];let m=n+et(e,t,l,!0);return m<710&&m>-746&&t>0&&(l?t<e:t>e)?oe(t,e,l):[Math.exp(m),m]},[o,s]=i(!0),[a,c]=i(!1);return{lower:o,upper:a,logLower:s,logUpper:c}}var At=22250738585072014e-324;function oe(t,e,n){let r=q(ht(D([t,0]),e),[-t,0]);n?r=q(r,D([pt(e,t)/e,0])):r=q(r,D([Nt(e,t),0]));let i=r[0]+r[1];return[r[0]>-708?Math.exp(r[0])*(1+r[1]):Math.exp(i),i]}function at(t){return Number.isNaN(t)||t<0||t>2?NaN:-Mt(t/2)*Math.SQRT1_2}function se(t){if(Number.isNaN(t)||t<-1||t>1)return NaN;let e=t<0?-1:1,n=Math.abs(t);if(n>=.5)return e*at(1-n);if(n<1e-8)return t*.886226925452758*(1+Math.PI/12*t*t);let r=at(1-n);for(let i=0;i<3;i++){let o=(x(r)-n)/(1.1283791670955126*Math.exp(-r*r));if(r-=o,Math.abs(o)<=1e-17*r)break}return e*r}function ae(t,e){if(Number.isNaN(t)||Number.isNaN(e)||t<0||e<0)return NaN;let n=e===Math.floor(e);return t===Math.floor(t)&&n&&e>t?0:!Number.isFinite(t)||!Number.isFinite(e)?he(t,e):n&&e<=1e3?fe(t,e):ce(t,e)}function fe(t,e){let n=[1,0];for(let r=0;r<e;r++){let i=j(t,-r),o=n[0]*i[0];if(!Number.isFinite(o)){let s=Math.sign(o);for(let a=r+1;a<e;a++)t-a<0&&(s=-s);return s*(1/0)}n=Math.abs(n[0])>1e290||Math.abs(i[0])>1e290?[(n[0]+n[1])*(i[0]+i[1]),0]:E(n,i)}return n[0]+n[1]}function ce(t,e){let[n,r]=j(t,-e);if(n+1<=0)return le(t,n,r);if(t>1e280)return e*e<1e-17*t?Math.pow(t,e):1/0;let i;if(n>=15){if(e*Math.log(n+1)>720)return 1/0;let o=j(t,-n),s=R(E(o,D([t,0])),bt(n,[t,0]));s=q(s,[$(t)-$(n),0]),i=Math.sqrt(t/n)*Math.exp(s[0])*(1+s[1])}else if(t<30)i=F(t+1)/F(n+1);else{if(L(t+1)-L(n+1)>720)return 1/0;let o=R(ft(t+1),D([F(n+1),0]));i=Math.exp(o[0])*(1+o[1])}return r!==0&&Number.isFinite(i)&&i!==0&&(i*=Math.exp(-r*T(n+1))),i}function le(t,e,n){let r=q(j(e,1),[n,0]),i=g(r[0])+g(r[0]+.5)*Math.PI*r[1];if(i===0)return 0;let o=Math.sign(i),s=q(R(D([Math.abs(i),0]),me),[-n*T(-e),0]);if(L(t+1)+L(-e)+s[0]>720)return o*(1/0);let a=q(q(ft(t+1),ft(-e)),s);return o*Math.exp(a[0])*(1+a[1])}var ue=[.9189385332046728,-38782941580672414e-33],me=[1.1447298858494002,10265951162707826e-33];function ft(t){if(t<15)return D([F(t),0]);let e=R(E(j(t,-.5),D([t,0])),[t,0]);return q(q(e,ue),[$(t),0])}function he(t,e){let n=Z(t+1),r=Z(t-e+1);return n.sign*r.sign*Math.exp(n.value-r.value)}export{Gt as besselI,ne as besselJ,Ht as besselK,re as besselY,Tt as beta,Jt as choose,T as digamma,x as erf,Ct as erfc,at as erfcinv,se as erfinv,Kt as factorial,F as gamma,ie as gammainc,nt as lbeta,Yt as lchoose,Bt as lfactorial,L as lgamma,ae as perm,Rt as psigamma,Et as trigamma};
package/dist/tests.js ADDED
@@ -0,0 +1,2 @@
1
+ /*! rStats.js 0.6.1 | MIT License | includes code ported from SciPy, Boost.Math, statsmodels, LAPACK and others: see THIRD_PARTY_NOTICES.md at https://github.com/numero-uno-jpn/rStats.js */
2
+ import{B as Et,C as at,G as ut,H as Ot,M as ht,N as pe,R as pt,S as de,W as ge,X as we,c as D,d as Ft,l as Ct,m as st,r as X,s as wt,x as jt}from"./chunks/chunk-7JVSDGQQ.js";import{h as ye,k as ve,l as xe,t as Ee,y as Ae}from"./chunks/chunk-ZWJ42QN6.js";import{a as L,b as be,c as G,f as Xe}from"./chunks/chunk-AJYQNFXK.js";import{k as Q,l as it}from"./chunks/chunk-XM2TVD63.js";import{c as Me}from"./chunks/chunk-TPC6MTYC.js";import"./chunks/chunk-DRNMIEYH.js";import{a as Nt,b as Y,c as K,e as Ne,f as U,g as lt,h as ft,i as At}from"./chunks/chunk-7NK4SA6B.js";import{b as he}from"./chunks/chunk-2JCIB5H2.js";import{g as C,h as j,s as ue}from"./chunks/chunk-QNAIK4PY.js";import{b as Lt,c as yt,d as F,e as ce,f as B,g as vt,i as xt,k as me}from"./chunks/chunk-UGUQYWRQ.js";function Pt(e,t,r={}){let n;t!==void 0&&!ArrayBuffer.isView(t)&&!Array.isArray(t)?r=t:n=t;let o=L(r.alternative),i=r.mu??0,f=r.paired??!1,s=r.varEqual??!1,a=r.confLevel??.95;if(Number.isNaN(i))throw new RangeError("mu must be a number");if(be(a),f&&n===void 0)throw new TypeError("y is required when paired is true");let c=Array.from(e),l=n===void 0?void 0:Array.from(n);if(f){let[A,q]=At(c,l);c=A.map((k,y)=>k-q[y]),l=void 0}else c=ft(c),l!==void 0&&(l=ft(l));let m,u,h,p,d,g,b,N=c.length;if(N<2)throw new Error("not enough 'x' observations");let w=Y(c),M=K(c);if(l===void 0){if(u=N-1,h=Math.sqrt(M/N),h<10*Number.EPSILON*Math.abs(w))throw new Error("data are essentially constant");m=(w-i)/h,g=f?"Paired t-test":"One Sample t-test",p=w,d=f?"mean difference":"mean of x",b=f?"mean difference":"mean"}else{let A=l.length;if(A<1||!s&&A<2)throw new Error("not enough 'y' observations");if(s&&N+A<3)throw new Error("not enough observations");let q=Y(l),k=K(l);if(g=`${s?"":"Welch"} Two Sample t-test`,p=[w,q],d=["mean of x","mean of y"],b="difference in means",s){u=N+A-2;let y=0;N>1&&(y+=(N-1)*M),A>1&&(y+=(A-1)*k),y/=u,h=Math.sqrt(y*(1/N+1/A))}else{let y=M/N,T=k/A;h=Math.sqrt(y+T),u=(h*h)**2/(y*y/(N-1)+T*T/(A-1))}if(h<10*Number.EPSILON*Math.max(Math.abs(w),Math.abs(q)))throw new Error("data are essentially constant");m=(w-q-i)/h}let v,E;if(o==="less")v=Q(m,u,!0,!1),E=[-1/0,m+it(a,u,!0,!1)];else if(o==="greater")v=Q(m,u,!1,!1),E=[m-it(a,u,!0,!1),1/0];else{v=2*Q(-Math.abs(m),u,!0,!1);let A=1-a,q=it(1-A/2,u,!0,!1);E=[m-q,m+q]}return E=[i+E[0]*h,i+E[1]*h],{method:g,alternative:o,statistic:m,statisticName:"t",parameter:u,parameterName:"df",pValue:v,confInt:E,confLevel:a,estimate:p,estimateNames:d,nullValue:i,nullValueName:b,stdErr:h}}function rt(e){let t=[0,0],r=0;for(let n of e)t=F(t,[n,0]),r+=n;return Number.isFinite(r)?t[0]:r}function Qe(e,t={}){let r=t.correct??!0;if(e.length>0&&typeof e[0]!="number"){let o=e.map(f=>Array.from(f)),i=o[0].length;if(o.some(f=>f.length!==i))throw new TypeError("all rows of the matrix must have the same length");return o.length===1?zt(o[0],t):i===1?zt(o.map(f=>f[0]),t):Ye(o,r)}return zt(Array.from(e),t)}function Re(e,t){return Number.isNaN(e)?NaN:D(e,t/2,2,!1,!1)}function Te(e){if(!e.some(t=>t<5)&&e.some(Number.isNaN))throw new RangeError("missing value where TRUE/FALSE needed (the expected counts contain NaN)")}function zt(e,t){let r=e.length;if(e.some(c=>Number.isNaN(c)||c<0))throw new RangeError("all entries of 'x' must be non-negative and finite");if(r<2)throw new TypeError("'x' must have at least 2 elements");let n=rt(e);if(!(n>0))throw new RangeError("at least one entry of 'x' must be positive");let o=t.p===void 0?e.map(()=>1/r):Array.from(t.p);if(o.length!==r)throw new TypeError("'x' and 'p' must have the same number of elements");if(o.some(Number.isNaN))throw new RangeError("p contains missing values");if(o.some(c=>c<0))throw new RangeError("probabilities must be non-negative");if(t.rescaleP??!1){let c=rt(o);o=o.map(l=>l/c)}else if(Math.abs(rt(o)-1)>Math.sqrt(Number.EPSILON))throw new RangeError("probabilities must sum to 1");let i=o.map(c=>n*c);Te(i);let f=o.map((c,l)=>i[l]*(1-c)),s=rt(e.map((c,l)=>(c-i[l])**2/i[l])),a=r-1;return{method:"Chi-squared test for given probabilities",statistic:s,statisticName:"X-squared",parameter:a,parameterName:"df",pValue:Re(s,a),observed:e,expected:i,residuals:e.map((c,l)=>(c-i[l])/Math.sqrt(i[l])),stdres:e.map((c,l)=>(c-i[l])/Math.sqrt(f[l]))}}function Ye(e,t){let r=e.length,n=e[0].length,o=e.flat();if(o.some(d=>!(d>=0&&d<1/0)))throw new RangeError("all entries of 'x' must be non-negative and finite");let i=rt(o);if(!(i>0))throw new RangeError("at least one entry of 'x' must be positive");let f=e.map(d=>rt(d)),s=e[0].map((d,g)=>rt(e.map(b=>b[g]))),a=f.map(d=>s.map(g=>d*g/i));Te(a.flat());let c=e.map((d,g)=>d.map((b,N)=>b-a[g][N])),l="Pearson's Chi-squared test",m,u=t&&r===2&&n===2?Math.min(.5,...c.flat().map(Math.abs)):0;u>0?(l+=" with Yates' continuity correction",m=rt(c.flatMap((d,g)=>d.map((b,N)=>(Math.abs(b)-u)**2/a[g][N])))):m=rt(c.flatMap((d,g)=>d.map((b,N)=>b*b/a[g][N])));let h=(r-1)*(n-1),p=a.map((d,g)=>d.map((b,N)=>b*(1-f[g]/i)*(1-s[N]/i)));return{method:l,statistic:m,statisticName:"X-squared",parameter:h,parameterName:"df",pValue:Re(m,h),observed:e,expected:a,residuals:c.map((d,g)=>d.map((b,N)=>b/Math.sqrt(a[g][N]))),stdres:c.map((d,g)=>d.map((b,N)=>b/Math.sqrt(p[g][N])))}}var Ge=Math.pow(Number.EPSILON,.25);function Z(e,t,r,n={}){let o={tol:n.tol??Ge,maxiter:n.maxIter??1e3};return n.fLower!==void 0&&(o.fLower=n.fLower),n.fUpper!==void 0&&(o.fUpper=n.fUpper),Me(e,t,r,o).root}function Ze(e,t={}){let r=e.length,n=r===0?0:e[0].length;if(e.some(s=>s.length!==n))throw new TypeError("all rows of the matrix must have the same length");if(r<2||n<2)throw new TypeError("'x' must have at least 2 rows and columns");let o=e.map(s=>Array.from(s));if(o.flat().some(s=>Number.isNaN(s)||s<0))throw new RangeError("all entries of 'x' must be non-negative and finite");if(o.flat().some(s=>s===1/0))throw new RangeError("'x' has entries too large to be integer");let i=o.map(s=>s.map(he)),f="Fisher's Exact Test for Count Data";return r===2&&n===2?en(i,t,f):{method:f,alternative:t.alternative??"two.sided",pValue:nn(i)}}var Je=1+1e-7,tn=16;function _t(e,t,r){let n=[0,0];for(let o=Math.max(0,t);o<=Math.min(r,e.length-1);o++)e[o]!==0&&(n=F(n,[e[o],0]));return n[0]}var Ht=class{m;n;k;lo;hi;logCentral;constructor(t,r,n){this.m=t,this.n=r,this.k=n,this.lo=Math.max(0,n-r),this.hi=Math.min(n,t),this.logCentral=new Float64Array(this.hi-this.lo+1);let o=0,i=1;for(let f=this.lo;f<=this.hi;f++){let s=f-this.lo;s%tn===0||!(i>0&&i<1/0)?(o=ut(f,t,r,n,!0),i=1,this.logCentral[s]=o):this.logCentral[s]=o+Math.log(i),i*=(t-f)*(n-f)/((f+1)*(r-n+f+1))}}density(t){let r=this.logCentral.length,n=Math.log(t),o=new Float64Array(r),i=-1/0;for(let s=0;s<r;s++){let a=this.logCentral[s]+(this.lo+s)*n;o[s]=a,a>i&&(i=a)}for(let s=0;s<r;s++){let a=o[s]-i;o[s]=a<-746?0:Math.exp(a)}let f=_t(o,0,r-1);for(let s=0;s<r;s++)o[s]!==0&&(o[s]=o[s]/f);return o}mean(t){if(t===0)return this.lo;if(t===1/0)return this.hi;let r=this.density(t),n=[0,0];for(let o=0;o<r.length;o++)r[o]!==0&&(n=F(n,[(this.lo+o)*r[o],0]));return n[0]}tail(t,r,n){if(r===1)return n?Ot(t-1,this.m,this.n,this.k,!1,!1):Ot(t,this.m,this.n,this.k,!0,!1);if(r===0||r===1/0){let f=r===0?this.lo:this.hi;return(n?t<=f:t>=f)?1:0}let o=this.density(r),i=t-this.lo;return n?_t(o,i,o.length-1):_t(o,0,i)}};function Wt(e,t){return t?Z(e,0,1):1/Z(r=>e(1/r),Number.EPSILON,1)}function en(e,t,r){let n=L(t.alternative),o=t.or??1;if(!(o>=0))throw new RangeError("'or' must be a single number between 0 and Inf");let i=t.confLevel??.95;if(!(i>0&&i<1))throw new RangeError("confLevel must be a single number between 0 and 1");let[[f,s],[a,c]]=e,l=f,m=new Ht(f+a,s+c,f+s),{lo:u,hi:h}=m,p;if(n==="less")p=m.tail(l,o,!1);else if(n==="greater")p=m.tail(l,o,!0);else if(o===0)p=l===u?1:0;else if(o===1/0)p=l===h?1:0;else{let M=m.density(o),v=M[l-u]*Je,E=[0,0];for(let A of M)A<=v&&(E=F(E,[A,0]));p=E[0]}let d;if(l===u)d=0;else if(l===h)d=1/0;else{let M=m.mean(1);d=M===l?1:Wt(v=>m.mean(v)-l,M>l)}let g={method:r,alternative:n,pValue:p,estimate:d,estimateNames:"odds ratio",nullValue:o,nullValueName:"odds ratio"};if(!(t.confInt??!0))return g;let b=M=>{if(l===h)return 1/0;let v=m.tail(l,1,!1);return v===M?1:Wt(E=>m.tail(l,E,!1)-M,v<M)},N=M=>{if(l===u)return 0;let v=m.tail(l,1,!0);return v===M?1:Wt(E=>m.tail(l,E,!0)-M,v>M)},w;if(n==="less")w=[0,b(1-i)];else if(n==="greater")w=[N(1-i),1/0];else{let M=(1-i)/2;w=[N(M),b(M)]}return{...g,confInt:w,confLevel:i}}var Rt=[[0,0]];function J(e){for(let t=Rt.length;t<=e;t++)Rt.push(F(Rt[t-1],me([t,0])));return Rt[e]}function Tt(e,t,r,n){let o=e+r,i=o-e,f=e-(o-i)+(r-i)+t+n,s=o+f;return[s,f-(s-o)]}var $t=class{scale=-1/0;hi=0;lo=0;add(t,r,n){if(t>this.scale){let a=Number.isFinite(this.scale)?Math.exp(this.scale-t):0;this.hi*=a,this.lo*=a,this.scale=t}let o=n*Math.exp(t-this.scale)*(1+r),i=this.hi+o,f=i-this.hi,s=this.hi-(i-f)+(o-f)+this.lo;this.hi=i+s,this.lo=s-(this.hi-i)}value(){return this.scale===-1/0?0:this.hi*Math.exp(this.scale)}};function nn(e){let t=e.filter(w=>w.some(M=>M>0));if(t.length===0)throw new RangeError("all entries of the table are zero");let r=t[0].map((w,M)=>t.some(v=>v[M]>0));if(t=t.map(w=>w.filter((M,v)=>r[v])),t.length<2||t[0].length<2)return 1;t.length>t[0].length&&(t=t[0].map((w,M)=>t.map(v=>v[M])));let n=t.length,o=t.map(w=>w.reduce((M,v)=>M+v,0)),i=t[0].map((w,M)=>t.reduce((v,E)=>v+E[M],0)).sort((w,M)=>M-w),f=i.length,s=o.reduce((w,M)=>w+M,0),a=ce(J(s));for(let w of o)a=F(a,J(w));for(let w of i)a=F(a,J(w));let c=[0,0];for(let w of t.flat())c=B(c,J(w));let l=F(c,[Math.log1p(1e-7),0]),m=1e-9*(1+Math.abs(l[0])),[u,h]=l,p=Array.from({length:f},()=>new Map),d=(w,M)=>{let v=M.join(","),E=p[w].get(v);if(E!==void 0)return E;let A=F(a,J(M.reduce((x,V)=>x+V,0)));for(let x of M)A=B(A,J(x));for(let x=w;x<f;x++)A=B(A,J(i[x]));let q={R:M,KZ:A,max:0,min:0,edges:[],pastHi:[],pastLo:[],count:[],index:new Map};if(p[w].set(v,q),w===f-1){let x=[0,0];for(let V of M)x=B(x,J(V));return q.max=q.min=x[0],q.edges.push({to:q,hi:x[0],lo:x[1],mult:1}),q}let k=new Map,y=new Array(n+1).fill(0);for(let x=n-1;x>=0;x--)y[x]=y[x+1]+M[x];let T=new Array(n).fill(0),S=(x,V,O)=>{if(x===n-1){T[x]=V;let z=B(O,J(V)),tt=M.map((nt,dt)=>nt-T[dt]).sort((nt,dt)=>nt-dt),W=d(w+1,tt),$=`${tt.join(",")}|${z[0]}`,et=k.get($);et===void 0?k.set($,{to:W,hi:z[0],lo:z[1],mult:1}):et.mult++;return}let P=Math.max(0,V-y[x+1]),H=Math.min(M[x],V);for(let z=P;z<=H;z++)T[x]=z,S(x+1,V-z,B(O,J(z)))};if(S(0,i[w],[0,0]),q.edges=[...k.values()],q.max=Math.max(...q.edges.map(x=>x.hi+x.to.max)),q.min=Math.min(...q.edges.map(x=>x.hi+x.to.min)),w===f-2){let x=q.edges.map(W=>{let $=W.to.edges[0];return{v:F([W.hi,W.lo],[$.hi,$.lo]),mult:W.mult}});x.sort((W,$)=>W.v[0]-$.v[0]||W.v[1]-$.v[1]);let V=x.length,O=x[V-1].v[0],P=new Float64Array(V),H=new Float64Array(V),z=new Float64Array(V),tt=[0,0];x.forEach(({v:W,mult:$},et)=>{P[et]=W[0],H[et]=W[1];let nt=B(W,[O,0]);tt=F(tt,[$*Math.exp(nt[0])*(1+nt[1]),0]),z[et]=tt[0]}),q.dist={hi:P,lo:H,cum:z,vmax:O,kv:F(a,[O,0])}}return q},g=d(0,[...o].sort((w,M)=>w-M)),b=new $t,N=(w,M,v,E)=>{if(M+w.max<=u-m){let[S,x]=Tt(w.KZ[0],w.KZ[1],M,v);return b.add(S,x,E),!0}if(M+w.min>u+m)return!0;let A=w.dist;if(A===void 0)return!1;let[q,k]=Tt(u,h,-M,-v),y=0,T=A.hi.length;for(;y<T;){let S=y+T>>>1,x=A.hi[S];x<q||x===q&&A.lo[S]<=k?y=S+1:T=S}if(y>0){let[S,x]=Tt(A.kv[0],A.kv[1],M,v);b.add(S,x,E*A.cum[y-1])}return!0};N(g,0,0,1)||(g.pastHi.push(0),g.pastLo.push(0),g.count.push(1));for(let w=0;w<f-2;w++)for(let M of p[w].values()){let{pastHi:v,pastLo:E,count:A}=M;if(A.length!==0){for(let{to:q,hi:k,lo:y,mult:T}of M.edges)for(let S=0;S<A.length;S++){let[x,V]=Tt(v[S],E[S],k,y),O=A[S]*T;if(N(q,x,V,O))continue;let P=q.index.get(x);P===void 0?(q.index.set(x,q.count.length),q.pastHi.push(x),q.pastLo.push(V),q.count.push(O)):q.count[P]+=O}M.pastHi=M.pastLo=M.count=[],M.index.clear()}}return Math.min(1,b.value())}function Dt(e,t,r={}){let n;t!==void 0&&!ArrayBuffer.isView(t)&&!Array.isArray(t)?r=t:n=t;let o=L(r.alternative),i=r.mu??0,f=r.paired??!1,s=r.exact??null,a=r.correct??!0,c=r.confInt??!1,l=r.confLevel??.95,m=r.tolRoot??1e-4;if(!Number.isFinite(i))throw new RangeError("mu must be a single finite number");if(c&&!(l>0&&l<1))throw new RangeError("confLevel must be a number strictly between 0 and 1");if(f&&n===void 0)throw new TypeError("y is required when paired is true");let u,h;if(f){let[d,g]=At(Array.from(e),Array.from(n));u=ft(d.map((b,N)=>b-g[N]))}else u=ft(Array.from(e)),n!==void 0&&(h=ft(Array.from(n)));if(u.length<1)throw new Error("not enough (non-missing) 'x' observations");if(h!==void 0&&h.length<1)throw new Error("not enough (non-missing) 'y' observations");let p={alternative:o,mu:i,correct:a,confInt:c,confLevel:l,tolRoot:m};return h===void 0?on(u,s,f,p):ln(u,h,s,p)}function qt(e,t,r){return r?t==="two.sided"?Math.sign(e)*.5:t==="greater"?.5:-.5:0}function ke(e,t){return t==="less"?C(e):t==="greater"?C(e,{lowerTail:!1}):2*Math.min(C(e),C(e,{lowerTail:!1}))}function rn(e){if(!(e>0)||!Number.isFinite(e))return e;let r=1-Math.floor(Math.log10(e)),n=r>=0?e*10**r:e/10**-r,o=Math.round(n);return o-n===.5&&o%2!==0&&(o-=1),r>=0?o/10**r:o*10**-r}function Kt(e){let t=e.length;if(t===0)return NaN;let r=Math.floor(t/2);return t%2===1?e[r]:Y([e[r-1],e[r]])}var Ut=(e,t)=>e-t;function Se(e){let t=e.length,r=U(e.map(Math.abs)),n=0;for(let f=0;f<t;f++)e[f]>0&&(n+=r[f]);let o=0;for(let f of lt(r))o+=f*f*f-f;let i=Math.sqrt(t*(t+1)*(2*t+1)/24-o/48);return[n,n-t*(t+1)/4,i]}function on(e,t,r,n){let{alternative:o,mu:i,correct:f}=n,s=e.map(E=>E-i),a=s.some(E=>E===0);a&&(s=s.filter(E=>E!==0));let c=s.length,l=t??c<50,m=U(s.map(Math.abs)),u=lt(m).length>0,[h,p,d]=Se(s),g,b,N=l&&!u&&!a;if(N){b="Wilcoxon signed rank exact test";let E=c*(c+1)/2;if(o==="less")g=ht(h,c,!0,!1);else if(o==="greater")g=ht(h-1,c,!1,!1);else{let A=h>E/2?ht(h-1,c,!1,!1):ht(h,c,!0,!1);g=Math.min(1,2*A)}}else b=`Wilcoxon signed rank test${f?" with continuity correction":""}`,g=ke((p-qt(p,o,f))/d,o);let w={method:b,alternative:o,statistic:h,statisticName:"V",pValue:g,nullValue:i,nullValueName:r?"location shift":"location"};if(!n.confInt)return w;let M=s.map(E=>E+i),v=N?sn(M,n):an(M,n);return{...w,...v}}function kt(e,t,r){return e==="less"?[-1/0,r]:e==="greater"?[t,1/0]:[t,r]}function qe(e,t,r){let n={confInt:kt(e,NaN,NaN),confLevel:0,estimate:t};return r!==void 0&&(n.estimateNames=r),n}function Ie(e,t,r){let n=e(t==="two.sided"?r/2:r);return n===0?1:n}function Ve(e){if(!(e>0))throw new RangeError("tolRoot must be positive")}function sn(e,t){let{alternative:r,confLevel:n}=t,o=e.length,i=[];for(let m=0;m<o;m++)for(let u=m;u<o;u++)i.push((e[m]+e[u])/2);i.sort(Ut);let f=i.length,s=1-n,a=Ie(m=>pe(m,o,!0,!1),r,s),c=ht(a-1,o,!0,!1),l=r==="two.sided"?2*c:c;return{confInt:kt(r,i[a-1],i[f-a]),confLevel:l-s>s/2?1-rn(l):n,estimate:Kt(i),estimateNames:"(pseudo)median"}}function an(e,t){let{alternative:r,correct:n,confLevel:o,tolRoot:i}=t,f=e.length;if(f===0)return qe(r,NaN);let s=Math.min(...e),a=Math.max(...e);if(!Number.isFinite(s)||!Number.isFinite(a)||f===1||s===a)return qe(r,(s+a)/2,"midrange");let c=(w,M)=>{let[,v,E]=Se(e.map(A=>A-w).filter(A=>A!==0));return(v-qt(v,r,M))/E},l=c(s,n),m=c(a,n),u=w=>-j(w),h=w=>r==="greater"?!(l<u(w)):r==="less"?!(m>j(w/2)):!(l<u(w/2))&&!(m>j(w/2)),p=1-o,d=!1;for(;!h(p)&&p<1;)p*=2,d=!0;Ve(i);let g=w=>Z(M=>c(M,n)-w,s,a,{tol:i,fLower:l-w,fUpper:m-w}),b;if(p>=1){let w=Kt([...e].sort(Ut));b=kt(r,w,w)}else r==="greater"?b=[g(u(p)),1/0]:r==="less"?b=[-1/0,g(j(p))]:b=[g(u(p/2)),g(j(p/2))];let N=Z(w=>c(w,!1),s,a,{tol:i,fLower:c(s,!1),fUpper:c(a,!1)});return{confInt:b,confLevel:d?1-Math.min(1,p):o,estimate:N,estimateNames:"(pseudo)median"}}function Le(e,t){let r=e.length,n=t.length,o=U([...e,...t]),i=0;for(let l=0;l<r;l++)i+=o[l];let f=i-r*(r+1)/2,s=0;for(let l of lt(o))s+=l*l*l-l;let a=r+n,c=Math.sqrt(r*n/12*(a+1-s/(a*(a-1))));return[f,f-r*n/2,c]}function ln(e,t,r,n){let{alternative:o,mu:i,correct:f}=n,s=e.length,a=t.length,c=e.map(M=>M-i),l=r??(s<50&&a<50),m=lt([...c,...t]).length>0,[u,h,p]=Le(c,t),d,g,b=l&&!m;if(b)if(g="Wilcoxon rank sum exact test",o==="less")d=pt(u,s,a,!0,!1);else if(o==="greater")d=pt(u-1,s,a,!1,!1);else{let M=u>s*a/2?pt(u-1,s,a,!1,!1):pt(u,s,a,!0,!1);d=Math.min(1,2*M)}else g=`Wilcoxon rank sum test${f?" with continuity correction":""}`,d=ke((h-qt(h,o,f))/p,o);let N={method:g,alternative:o,statistic:u,statisticName:"W",pValue:d,nullValue:i,nullValueName:"location shift"};if(!n.confInt)return N;let w=b?fn(e,t,n):cn(e,t,n);return{...N,...w}}function fn(e,t,r){let{alternative:n,confLevel:o}=r,i=e.length,f=t.length,s=[];for(let h of e)for(let p of t)s.push(h-p);s.sort(Ut);let a=s.length,c=1-o,l=Ie(h=>de(h,i,f,!0,!1),n,c),m=pt(l-1,i,f,!0,!1),u=n==="two.sided"?2*m:m;return{confInt:kt(n,s[l-1],s[a-l]),confLevel:u-c>c/2?1-u:o,estimate:Kt(s),estimateNames:"difference in location"}}function cn(e,t,r){let{alternative:n,correct:o,confLevel:i,tolRoot:f}=r,s=Math.min(...e)-Math.max(...t),a=Math.max(...e)-Math.min(...t);if(!Number.isFinite(s)||!Number.isFinite(a))throw new Error("cannot compute the confidence interval because the differences are not finite");let c=(h,p)=>{let[,d,g]=Le(e.map(b=>b-h),t);return(d-qt(d,n,p))/g},l=(h,p)=>{let d=c(s,p)-h,g=c(a,p)-h;if(Number.isNaN(d)||Number.isNaN(g))throw new Error("cannot compute the confidence interval because all observations are tied");return d<=0?s:g>=0?a:(Ve(f),Z(b=>c(b,p)-h,s,a,{tol:f,fLower:d,fUpper:g}))},m=1-i,u;return n==="greater"?u=[l(-j(m),o),1/0]:n==="less"?u=[-1/0,l(j(m),o)]:u=[l(-j(m/2),o),l(j(m/2),o)],{confInt:u,confLevel:i,estimate:l(0,!1),estimateNames:"difference in location"}}var Fe=["holm","hochberg","hommel","bonferroni","BH","BY","fdr","none"];function mn(e){if(Fe.includes(e))return e;let t=Fe.filter(r=>r.startsWith(e));if(e.length===0||t.length!==1)throw new RangeError(`invalid method "${e}"`);return t[0]}function Bt(e,t={}){let r=typeof t=="string"?{method:t}:t,n=mn(r.method??"holm"),o=Array.from(e),i=[];for(let m=0;m<o.length;m++)Number.isNaN(o[m])||i.push(m);let f=i.length,s=r.n??f;if(!(s>=f))throw new RangeError("n must be at least the number of non-NaN p-values");if(s<=1)return o;let a=i.map(m=>o[m]),c=un(a,n,s),l=o.slice();return i.forEach((m,u)=>l[m]=c[u]),l}function St(e,t){let r=e.map((n,o)=>o);return r.sort((n,o)=>(t?e[o]-e[n]:e[n]-e[o])||n-o),r}function un(e,t,r){let n=e.length,o=new Array(n);switch(t){case"none":return e.slice();case"bonferroni":return e.map(i=>Math.min(1,r*i));case"holm":{let i=St(e,!1),f=-1/0;return i.forEach((s,a)=>{f=Math.max(f,(r-a)*e[s]),o[s]=Math.min(1,f)}),o}case"hochberg":{let i=St(e,!0),f=1/0;return i.forEach((s,a)=>{let c=n-a;f=Math.min(f,(r-c+1)*e[s]),o[s]=Math.min(1,f)}),o}case"BH":case"fdr":case"BY":{let i=t==="BY"?Ne(Array.from({length:Math.floor(r)},(a,c)=>1/(c+1))):1,f=St(e,!0),s=1/0;return f.forEach((a,c)=>{let l=n-c;s=Math.min(s,i*r/l*e[a]),o[a]=Math.min(1,s)}),o}case"hommel":return hn(e,r)}}function hn(e,t){if(!Number.isInteger(t))throw new RangeError("n must be an integer for the hommel method");let r=e.length,n=[...e,...new Array(t-r).fill(1)],o=St(n,!1),i=o.map(a=>n[a]),f=i.slice();for(let a=t;a>=2;a--){let c=1/0;for(let l=1;l<=a;l++)c=Math.min(c,a*i[t-a+l-1]/l);for(let l=t-a;l<t;l++)f[l]=Math.max(f[l],c);for(let l=0;l<t-a;l++)f[l]=Math.max(f[l],Math.min(a*i[l],c))}let s=new Array(r);return o.forEach((a,c)=>{a<r&&(s[a]=f[c])}),s}var pn=1+1e-7;function It(e){return Number.isFinite(e)&&e>=0&&Math.abs(e-Math.round(e))<=1e-7*Math.max(1,Math.abs(e))}function dn(e,t,r){if(r===0)return e===0?1:0;if(r===1)return e===t?1:0;let n=t*r;if(e===n)return 1;let o=Et(e,t,r,!1)*pn,i=0;if(e<n){for(let a=Math.ceil(n);a<=t;a++)Et(a,t,r,!1)<=o&&i++;let s=i===0?0:at(t-i,t,r,!1,!1);return Math.min(1,at(e,t,r,!0,!1)+s)}for(let s=0;s<=Math.floor(n);s++)Et(s,t,r,!1)<=o&&i++;let f=i===0?0:at(i-1,t,r,!0,!1);return Math.min(1,at(e-1,t,r,!1,!1)+f)}function Xt(e,t,r={}){let n,o;if(typeof e!="number"){if(e.length!==2)throw new RangeError("incorrect length of 'x'");if(t!==void 0&&typeof t!="number"&&(r=t),!It(e[0])||!It(e[1]))throw new RangeError("'x' must be nonnegative and integer");n=Math.round(e[0]),o=Math.round(e[0])+Math.round(e[1])}else{if(typeof t!="number")throw new TypeError("'n' is required when 'x' is a single number");if(!It(e))throw new RangeError("'x' must be nonnegative and integer");if(n=Math.round(e),!(It(t)&&Math.round(t)>=n&&t>0))throw new RangeError("'n' must be a positive integer >= 'x'");o=Math.round(t)}let i=r.p??.5;if(!(i>=0&&i<=1))throw new RangeError("'p' must be a single number between 0 and 1");let f=L(r.alternative),s=r.confLevel??.95;G(s);let a;f==="less"?a=at(n,o,i,!0,!1):f==="greater"?a=at(n-1,o,i,!1,!1):a=dn(n,o,i);let c=u=>n===0?0:jt(u,n,o-n+1,!0,!1),l=u=>n===o?1:jt(1-u,n+1,o-n,!0,!1),m;if(f==="less")m=[0,l(1-s)];else if(f==="greater")m=[c(1-s),1];else{let u=(1-s)/2;m=[c(u),l(u)]}return{method:"Exact binomial test",alternative:f,statistic:n,statisticName:"number of successes",parameter:o,parameterName:"number of trials",pValue:a,confInt:m,confLevel:s,estimate:n/o,estimateNames:"probability of success",nullValue:i,nullValueName:"probability of success"}}var gn=1+1e-7;function wn(e){return Number.isFinite(e)&&e>=0&&Math.abs(e-Math.round(e))<=1e-7*Math.max(1,Math.abs(e))}function Nn(e,t){if(t===0)return e===0?1:0;if(e===t)return 1;let r=Ct(e,t,!1)*gn,n=s=>Ct(s,t,!1)<=r,o=Math.floor(t);if(e<t){let s=Math.max(e+1,o),a=s;if(!n(s)){let c=s,l=1;for(a=s+1;!n(a);)c=a,l*=2,a=s+l;for(;a-c>1;){let m=c+Math.floor((a-c)/2);n(m)?a=m:c=m}}return Math.min(1,st(e,t,!0,!1)+st(a-1,t,!1,!1))}let i=Math.min(e-1,o),f;if(!n(0))f=-1;else if(n(i))f=i;else{f=0;let s=i;for(;s-f>1;){let a=f+Math.floor((s-f)/2);n(a)?f=a:s=a}}return Math.min(1,st(f,t,!0,!1)+st(e-1,t,!1,!1))}function bn(e,t={}){let r=typeof e=="number"?[e]:Array.from(e);if(r.length<1||r.length>2)throw new RangeError("incorrect length of 'x'");if(!r.every(wn))throw new RangeError("'x' must be finite, nonnegative, and integer");let n=r.map(Math.round),o=n.length,i=t.T??1,f=typeof i=="number"?new Array(o).fill(i):Array.from(i);if(f.length!==o)throw new RangeError("'x' and 'T' have incompatible length");if(!f.every(b=>Number.isFinite(b)&&b>=0))throw new RangeError("'T' must be nonnegative");let s=t.r??1;if(!(Number.isFinite(s)&&s>=0))throw new RangeError("'r' must be a single positive number");let a=L(t.alternative),c=t.confLevel??.95;if(G(c),o===2){let[b,N]=n,[w,M]=f,v=b+N,E=s*w/(s*w+M),A=Xt([b,N],{p:E,alternative:a,confLevel:c}),q=k=>k/(1-k)*(M/w);return{method:"Comparison of Poisson rates",alternative:a,statistic:b,statisticName:"count1",parameter:v*s*w/(w+s*M),parameterName:"expected count1",pValue:A.pValue,confInt:[q(A.confInt[0]),q(A.confInt[1])],confLevel:c,estimate:b/w/(N/M),estimateNames:"rate ratio",nullValue:s,nullValueName:"rate ratio"}}let l=n[0],m=f[0],u=s*m,h;a==="less"?h=st(l,u,!0,!1):a==="greater"?h=st(l-1,u,!1,!1):h=Nn(l,u);let p=b=>l===0?0:Ft(b,l,1,!0,!1),d=b=>Ft(1-b,l+1,1,!0,!1),g;if(a==="less")g=[0,d(1-c)];else if(a==="greater")g=[p(1-c),1/0];else{let b=(1-c)/2;g=[p(b),d(b)]}return{method:"Exact Poisson test",alternative:a,statistic:l,statisticName:"number of events",parameter:m,parameterName:"time base",pValue:h,confInt:[g[0]/m,g[1]/m],confLevel:c,estimate:l/m,estimateNames:"event rate",nullValue:s,nullValueName:"event rate"}}function Qt(e,t,r={}){let n,o,i=r;if(typeof e!="number"&&e.length>0&&Array.isArray(e[0])){let y=e;if(y.some(T=>T.length!==2))throw new RangeError("'x' must have 2 columns");n=y.map(T=>T[0]),o=y.map(T=>T[0]+T[1]),t!==void 0&&typeof t=="object"&&!Array.isArray(t)&&(i=t)}else{if(t===void 0||typeof t=="object"&&!Array.isArray(t))throw new RangeError("'n' must be given");n=typeof e=="number"?[e]:Array.from(e),o=typeof t=="number"?[t]:Array.from(t)}if(n.length!==o.length)throw new RangeError("'x' and 'n' must have the same length");let f=n.length,s=[];for(let y=0;y<f;y++)!Number.isNaN(n[y])&&!Number.isNaN(o[y])&&s.push(y);let a=s.length;if(a<1)throw new RangeError("not enough data");if(n=s.map(y=>n[y]),o=s.map(y=>o[y]),o.some(y=>!(y>0)))throw new RangeError("elements of 'n' must be positive");if(n.some(y=>!(y>=0)))throw new RangeError("elements of 'x' must be nonnegative");if(n.some((y,T)=>y>o[T]))throw new RangeError("elements of 'x' must not be greater than those of 'n'");let c;if(i.p!==void 0){let y=typeof i.p=="number"?[i.p]:Array.from(i.p);if(y.length!==f)throw new RangeError("'p' must have the same length as 'x' and 'n'");if(c=s.map(T=>y[T]),c.some(T=>!(T>0&&T<1)))throw new RangeError("elements of 'p' must be in (0,1)")}let l=c!==void 0;a===1&&c===void 0&&(c=[.5]);let m=i.confLevel??.95;G(m);let u=L(i.alternative);(a>2||a===2&&l)&&(u="two.sided");let h=n.map((y,T)=>y/o[T]),p=a===2?h[0]-h[1]:0,d=a===2?1/o[0]+1/o[1]:0,g=(i.correct??!0)&&a<=2?.5:0,b=!1;if(g>0&&a===1){let y=Math.abs(n[0]-o[0]*c[0]);y<=g&&([g,b]=[y,!0])}else if(g>0&&a===2&&!l){let y=Math.abs(p)/d;y<=g&&([g,b]=[y,!0])}let N=n.reduce((y,T)=>y+T,0)/o.reduce((y,T)=>y+T,0),w=0;if(!b)for(let y=0;y<a;y++){let T=c?.[y]??N,S=o[y]*T,x=o[y]*(1-T);w+=(Math.abs(n[y]-S)-g)**2/S,w+=(Math.abs(o[y]-n[y]-x)-g)**2/x}let M=c!==void 0?a:a-1,v;if(u==="two.sided")v=D(w,M/2,2,!1,!1);else{let y=Math.sign(a===1?h[0]-c[0]:p);v=C(y*Math.sqrt(w),{lowerTail:u==="less"})}let E;if(a===1||a===2&&!l){let y=j(u==="two.sided"?(1+m)/2:m);if(a===1){let T=o[0],S=y*y,x=(z,tt)=>(z+S/(2*T)+tt*y*Math.sqrt(z*(1-z)/T+S/(4*T*T)))/(1+S/T),V=h[0]+g/T,O=h[0]-g/T,P=Math.min(1,Math.max(0,V>=1?1:x(V,1))),H=Math.min(1,Math.max(0,O<=0?0:x(O,-1)));E=u==="two.sided"?[H,P]:u==="greater"?[H,1]:[0,P]}else{let T=Math.sqrt(h.reduce((O,P,H)=>O+P*(1-P)/o[H],0)),S=y*T+g*d,x=Math.max(-1,p-S),V=Math.min(1,p+S);E=u==="two.sided"?[x,V]:u==="greater"?[x,1]:[-1,V]}}let A=a===1?"p":s.map(y=>`prop ${y+1}`),k={method:`${a===1?"1-sample proportions test":`${a}-sample test for ${l?"given proportions":"equality of proportions"}`} ${g!==0?"with":"without"} continuity correction`,alternative:u,statistic:w,statisticName:"X-squared",parameter:M,parameterName:"df",pValue:v,estimate:a===1?h[0]:h,estimateNames:A};return c!==void 0&&(k.nullValue=a===1?c[0]:c,k.nullValueName=A),E!==void 0&&(k.confInt=E,k.confLevel=m),k}function Mn(e,t,r={}){let n;if(e.length>0&&Array.isArray(e[0])){t!==void 0&&!Array.isArray(t)&&(r=t),n=e.map(l=>Array.from(l));let c=n.length;if(c<2||n.some(l=>l.length!==c))throw new RangeError("'x' must be square with at least two rows and columns");if(n.some(l=>l.some(m=>!Number.isFinite(m)||m<0)))throw new RangeError("all entries of 'x' must be nonnegative and finite")}else{if(!Array.isArray(t))throw new TypeError("'y' is required when 'x' is not a table");n=yn(e,t)}let o=r.correct??!0,i=n.length,f,s=o&&i===2&&n[0][1]!==n[1][0];if(s){let c=n[0][1],l=n[1][0];f=(Math.abs(c-l)-1)**2/(c+l)}else{f=0;for(let c=0;c<i;c++)for(let l=c+1;l<i;l++){let m=n[c][l],u=n[l][c];f+=(m-u)**2/(m+u)}}let a=i*(i-1)/2;return{method:s?"McNemar's Chi-squared test with continuity correction":"McNemar's Chi-squared test",statistic:f,statisticName:"McNemar's chi-squared",parameter:a,parameterName:"df",pValue:D(f,a/2,2,!1,!1)}}function yn(e,t){if(e.length!==t.length)throw new RangeError("'x' and 'y' must have the same length");let r=[];for(let c=0;c<e.length;c++){let l=e[c],m=t[c];typeof l=="number"&&Number.isNaN(l)||typeof m=="number"&&Number.isNaN(m)||r.push([l,m])}let n=c=>Array.from(new Set(c)).sort((l,m)=>typeof l=="number"&&typeof m=="number"?l-m:String(l)<String(m)?-1:String(l)>String(m)?1:0),o=n(r.map(c=>c[0])),i=n(r.map(c=>c[1]));if(o.length<2||o.length!==i.length)throw new RangeError("'x' and 'y' must have the same number of levels (minimum 2)");let f=new Map(o.map((c,l)=>[c,l])),s=new Map(i.map((c,l)=>[c,l])),a=o.map(()=>new Array(o.length).fill(0));for(let[c,l]of r)a[f.get(c)][s.get(l)]++;return a}function vn(e,t,r={}){let n=Array.from(e).filter(Number.isFinite),o=Array.from(t).filter(Number.isFinite),i=r.ratio??1;if(!(Number.isFinite(i)&&i>0))throw new RangeError("'ratio' must be a single positive number");let f=L(r.alternative),s=r.confLevel??.95;G(s);let a=n.length-1,c=o.length-1;if(a<1)throw new Error("not enough 'x' observations");if(c<1)throw new Error("not enough 'y' observations");let l=K(n)/K(o),m=l/i,u=X(m,a,c,!0,!1),h=X(m,a,c,!1,!1),p,d;if(f==="less")p=u,d=[0,l/wt(1-s,a,c,!0,!1)];else if(f==="greater")p=h,d=[l/wt(s,a,c,!0,!1),1/0];else{p=Math.min(1,2*Math.min(u,h));let g=(1-s)/2;d=[l/wt(1-g,a,c,!0,!1),l/wt(g,a,c,!0,!1)]}return{method:"F test to compare two variances",alternative:f,statistic:m,statisticName:"F",parameter:[a,c],parameterName:["num df","denom df"],pValue:p,confInt:d,confLevel:s,estimate:l,estimateNames:"ratio of variances",nullValue:i,nullValueName:"ratio of variances"}}function xn(e){let t=e.length;if(t<2)throw new RangeError("'x' must be a list with at least 2 elements");let r=[],n=[];for(let l of e){let m=Array.from(l).filter(Number.isFinite);if(m.length<2)throw new RangeError("there must be at least 2 observations in each group");r.push(m.length-1),n.push(K(m))}let o=0,i=0,f=0,s=0;for(let l=0;l<t;l++)o+=r[l],i+=r[l]*n[l],f+=r[l]*Math.log(n[l]),s+=1/r[l];i/=o;let a=(o*Math.log(i)-f)/(1+(s-1/o)/(3*(t-1))),c=t-1;return{method:"Bartlett test of homogeneity of variances",statistic:a,statisticName:"Bartlett's K-squared",parameter:c,parameterName:"df",pValue:D(a,c/2,2,!1,!1)}}function Yt(e,t,r="drop"){if(t===void 0){let f=e;if(f.length>0&&typeof f[0]=="number")throw new TypeError("'g' is required when 'x' is a single sample");let s=f.map(l=>Array.from(l).filter(m=>!Number.isNaN(m)));if(r==="error"&&s.some(l=>l.length===0))throw new RangeError("all groups must contain data");let a=[],c=[];return s.forEach((l,m)=>{l.length!==0&&(a.push(String(m+1)),c.push(l))}),{labels:a,groups:c}}let n=Array.from(e);if(n.length!==t.length)throw new RangeError("'x' and 'g' must have the same length");let o=new Map;for(let f=0;f<n.length;f++){let s=n[f],a=t[f];if(Number.isNaN(s)||typeof a=="number"&&Number.isNaN(a))continue;let c=o.get(a);c===void 0&&o.set(a,c=[]),c.push(s)}let i=Array.from(o.keys()).sort((f,s)=>typeof f=="number"&&typeof s=="number"?f-s:String(f)<String(s)?-1:String(f)>String(s)?1:0);return{labels:i.map(String),groups:i.map(f=>o.get(f))}}function ct(e,t,r="drop"){return Yt(e,t,r).groups}function Ce(e){let t=[...e].sort((n,o)=>n-o),r=t.length;return r%2===1?t[(r-1)/2]:(t[r/2-1]+t[r/2])/2}function Gt(e){if(e.length===0)throw new RangeError("'y' must have at least one row");let t=e[0].length;if(e.some(r=>r.length!==t))throw new RangeError("all rows of 'y' must have the same length");return e.filter(r=>r.every(n=>!Number.isNaN(n))).map(r=>Array.from(r))}function Zt(e,t,r,n){return{method:e,statistic:r,statisticName:t,parameter:n,parameterName:"df",pValue:D(r,n/2,2,!1,!1)}}function je(e){let t=0;for(let r of lt(e))t+=r*r*r-r;return t}function En(e,t){let r=ct(e,t,"error"),n=r.length;if(n<2)throw new RangeError("all observations are in the same group");let o=r.flat(),i=o.length,f=U(o),s=0,a=0;for(let c of r){let l=0;for(let m=0;m<c.length;m++)l+=f[a+m];a+=c.length,s+=l*l/c.length}return s=(12*s/(i*(i+1))-3*(i+1))/(1-je(o)/(i*i*i-i)),Zt("Kruskal-Wallis rank sum test","Kruskal-Wallis chi-squared",s,n-1)}function An(e){let t=Gt(e),r=t.length,n=e[0]?.length??0;if(r<2||n<2)throw new RangeError("'y' must have at least two complete rows and two columns");let o=new Array(n).fill(0),i=0;for(let a of t){let c=U(a);for(let l=0;l<n;l++)o[l]+=c[l];i+=je(a)}let f=0;for(let a of o)f+=(a-r*(n+1)/2)**2;let s=12*f/(r*n*(n+1)-i/(n-1));return Zt("Friedman rank sum test","Friedman chi-squared",s,n-1)}function Rn(e){let t=Gt(e),r=e.length,n=e[0]?.length??0;if(t.length<2||n<2)throw new RangeError("'y' must have at least two complete rows and two columns");let o=U(t.map(h=>Math.max(...h)-Math.min(...h))),i=new Array(n).fill(0),f=0;t.forEach((h,p)=>{let d=U(h);for(let g=0;g<n;g++){let b=o[p]*(d[g]-(n+1)/2);f+=b*b,i[g]+=b}});let s=0;for(let h of i)s+=h*h;s/=r;let a=n-1,c=(r-1)*(n-1),l,m,u=[a,c];if(f===s){l=NaN,u=[NaN,NaN];let h=0;for(let p=2;p<=n;p++)h+=Math.log(p);m=Math.exp((1-r)*h)}else l=(r-1)*s/(f-s),m=X(l,a,c,!1,!1);return{method:"Quade test",statistic:l,statisticName:"Quade F",parameter:u,parameterName:["num df","denom df"],pValue:m}}function Tn(e,t){let r=ct(e,t,"error"),n=r.length;if(n<2)throw new RangeError("all observations are in the same group");let o=r.flatMap(u=>{let h=Ce(u);return u.map(p=>Math.abs(p-h))}),i=o.length,s=U(o).map(u=>j((1+u/(i+1))/2)),a=0;for(let u of s)a+=u;let c=a/i,l=0,m=0;for(let u of r){let h=0;for(let p=0;p<u.length;p++)h+=s[m+p];m+=u.length,l+=u.length*(h/u.length-c)**2}return l/=K(s),Zt("Fligner-Killeen test of homogeneity of variances","Fligner-Killeen:med chi-squared",l,n-1)}function qn(e,t,r={}){let n=Array.from(e).filter(Number.isFinite),o=Array.from(t).filter(Number.isFinite),i=L(r.alternative),f=n.length,s=o.length,a=f+s;if(a<3)throw new RangeError("not enough observations");let c=n.concat(o),l=Array.from({length:a},(M,v)=>v).sort((M,v)=>c[M]-c[v]),m=new Array(a),u=0;for(;u<a;){let M=u;for(;M+1<a&&c[l[M+1]]===c[l[u]];)M++;let v=0;for(let E=u;E<=M;E++)v+=(E+1-(a+1)/2)**2;v/=M-u+1;for(let E=u;E<=M;E++)m[l[E]]=v;u=M+1}let h=0;for(let M=0;M<f;M++)h+=m[M];let p=0;for(let M of m)p+=M;p/=a;let d=0;for(let M of m)d+=(M-p)**2;let g=f*p,b=f*s/(a*(a-1))*d,N=(h-g)/Math.sqrt(b),w=i==="less"?C(N):i==="greater"?C(N,{lowerTail:!1}):2*C(-Math.abs(N));return{method:"Mood two-sample test of scale",alternative:i,statistic:N,statisticName:"Z",pValue:w}}function mt(e,t){let r=0;for(let n=e.length-1;n>=0;n--)r=r*t+e[n];return r}var kn=[0,.221157,-.147981,-2.07119,4.434685,-2.706056],Sn=[0,.042981,-.293762,-1.752461,5.682633,-3.582633],In=[.544,-.39978,.025054,-6714e-7],Vn=[1.3822,-.77857,.062767,-.0020322],Ln=[-1.5861,-.31082,-.083751,.0038915],Fn=[-.4803,-.082676,.0030302],Cn=[-2.273,.459];function jn(e){if(!(e>=3)||e!==Math.floor(e))throw new RangeError("n must be an integer of at least 3");let t=new Float64Array(e);if(e===3)return t[0]=-Math.SQRT1_2,t[2]=Math.SQRT1_2,t;let r=Math.floor(e/2),n=new Float64Array(r),o=0;for(let m=0;m<r;m++)n[m]=-j((m+1-.375)/(e+.25)),o+=n[m]*n[m];o*=2;let i=Math.sqrt(o),f=1/Math.sqrt(e),s=n[0]/i+mt(kn,f),a=new Float64Array(r);a[0]=s;let c,l;if(e>5){let m=n[1]/i+mt(Sn,f);a[1]=m,c=2,l=Math.sqrt((o-2*n[0]*n[0]-2*n[1]*n[1])/(1-2*s*s-2*m*m))}else c=1,l=Math.sqrt((o-2*n[0]*n[0])/(1-2*s*s));for(let m=c;m<r;m++)a[m]=n[m]/l;for(let m=0;m<r;m++)t[e-1-m]=a[m],t[m]=-a[m];return t}function Oe(e){let t=e.length,r=jn(t),n=e[t-1]-e[0],o=0;for(let c of e)o+=c/n;o/=t;let i=0,f=0,s=0;for(let c=0;c<t;c++){let l=e[c]/n-o;i+=r[c]*r[c],f+=l*l,s+=r[c]*l}let a=Math.sqrt(i*f);return(a-s)*(a+s)/(i*f)}var On=1.90985931710274,Pn=1.0471975511966;function Pe(e,t){if(Number.isNaN(e)||!(t>=3))return NaN;if(t===3){let f=On*(Math.asin(Math.sqrt(1-e))-Pn);return Math.max(f,0)}let r=Math.log(e);if(t<=11){let f=mt(Cn,t);if(r>=f)return 1e-99;let s=mt(In,t),a=Math.exp(mt(Vn,t));return C(-Math.log(f-r),{mean:s,sd:a,lowerTail:!1})}let n=Math.log(t),o=mt(Ln,n),i=Math.exp(mt(Fn,n));return C(r,{mean:o,sd:i,lowerTail:!1})}function zn(e,t,r={}){let n;t!==void 0&&!Array.isArray(t)?r=t:n=t;let o=ct(e,n),i=r.varEqual??!1,f=o.length;if(f<2)throw new RangeError("not enough groups");let s=o.map(h=>h.length);if(s.some(h=>h<2))throw new RangeError("not enough observations");let a=o.map(Y),c=o.map(K),l=s.reduce((h,p)=>h+p,0),m,u;if(i){let h=Y(o.flat()),p=0,d=0;for(let g=0;g<f;g++)p+=s[g]*(a[g]-h)**2,d+=(s[g]-1)*c[g];u=l-f,m=p/(f-1)/(d/u)}else{let h=s.map((N,w)=>N/c[w]),p=h.reduce((N,w)=>N+w,0),d=0,g=0;for(let N=0;N<f;N++)d+=(1-h[N]/p)**2/(s[N]-1),g+=h[N]*a[N];d/=f*f-1,g/=p;let b=0;for(let N=0;N<f;N++)b+=h[N]*(a[N]-g)**2;m=b/((f-1)*(1+2*(f-2)*d)),u=1/(3*d)}return{method:i?"One-way analysis of means":"One-way analysis of means (not assuming equal variances)",statistic:m,statisticName:"F",parameter:[f-1,u],parameterName:["num df","denom df"],pValue:X(m,f-1,u,!1,!1)}}function _n(e){let t=Array.from(e).filter(o=>!Number.isNaN(o)).sort((o,i)=>o-i),r=t.length;if(r<3||r>5e3)throw new RangeError("sample size must be between 3 and 5000");if(!Number.isFinite(t[0])||!Number.isFinite(t[r-1]))throw new RangeError("'x' must be finite");if(t[r-1]===t[0])throw new RangeError("all 'x' values are identical");let n=Oe(t);return{method:"Shapiro-Wilk normality test",statistic:1-n,statisticName:"W",pValue:Pe(n,r)}}function Jt(e,t,r){let n=[0,0];for(let o=Math.max(0,t);o<Math.min(r,e.length);o++)n=F(n,[e[o],0]);return n[0]}function Wn([[e,t],[r,n]]){let o=e+r,i=t+n,f=e+t,s=Math.max(0,f-i),a=Math.min(f,o),c=new Float64Array(a-s+1);for(let l=s;l<=a;l++)c[l-s]=ut(l,o,i,f,!1);return{lo:s,d:c}}function Hn(e,t){let r=new Float64Array(e.length+t.length-1);for(let n=0;n<e.length;n++){let o=e[n];if(o!==0)for(let i=0;i<t.length;i++)r[n+i]+=o*t[i]}return r}var Vt=class{lo;hi;logNull;constructor(t){let r=0,n=new Float64Array([1]);for(let o of t){let i=Wn(o);r+=i.lo,n=Hn(n,i.d)}this.lo=r,this.hi=r+n.length-1,this.logNull=n.map(Math.log)}density(t){let r=this.logNull.length,n=new Float64Array(r);if(t===0||t===1/0)return n[t===0?0:r-1]=1,n;let o=Math.log(t),i=-1/0;for(let s=0;s<r;s++){let a=this.logNull[s]+(this.lo+s)*o;n[s]=a,a>i&&(i=a)}for(let s=0;s<r;s++)n[s]=Math.exp(n[s]-i);let f=Jt(n,0,r);for(let s=0;s<r;s++)n[s]=n[s]/f;return n}mean(t){if(t===0)return this.lo;if(t===1/0)return this.hi;let r=this.density(t),n=[0,0];for(let o=0;o<r.length;o++)n=F(n,[(this.lo+o)*r[o],0]);return n[0]}cdf(t,r,n){let o=this.density(r),i=t-this.lo;return n?Jt(o,i,o.length):Jt(o,0,i+1)}};function te(e,t){return t?Z(e,0,1):1/Z(r=>e(1/r),Number.EPSILON,1)}function ze(e,t){if(t===e.lo)return 0;if(t===e.hi)return 1/0;let r=e.mean(1);return r===t?1:te(n=>e.mean(n)-t,r>t)}function ee(e,t,r){if(t===e.hi)return 1/0;let n=e.cdf(t,1,!1);return n===r?1:te(o=>r-e.cdf(t,o,!1),n<r)}function ne(e,t,r){if(t===e.lo)return 0;let n=e.cdf(t,1,!0);return n===r?1:te(o=>e.cdf(t,o,!0)-r,n>r)}function $n(e,t={}){let r=e.length;if(r<1)throw new RangeError("'x' must have at least one stratum");let n=e[0].length,o=e[0][0]?.length??0;if(n<2||o<2||r<2)throw new RangeError("each dimension in table must be >= 2");for(let l of e){if(l.length!==n||l.some(m=>m.length!==o))throw new RangeError("all strata must have the same dimensions");if(l.some(m=>m.some(u=>!Number.isFinite(u)||u<0)))throw new RangeError("all entries of 'x' must be nonnegative and finite")}let i=e.map(l=>l.reduce((m,u)=>m+u.reduce((h,p)=>h+p,0),0));if(i.some(l=>l<2))throw new RangeError("sample size in each stratum must be > 1");let f=L(t.alternative),s=t.correct??!0,a=t.exact??!1,c=t.confLevel??.95;if(G(c),n===2&&o===2){let l=e.map(m=>[[m[0][0],m[0][1]],[m[1][0],m[1][1]]]);return a?Kn(l,f,c):Dn(l,i,f,s,c)}return Un(e,i,n,o)}function Dn(e,t,r,n,o){let i=0,f=0,s=0,a=0,c=0,l=0,m=0,u=0;e.forEach(([[M,v],[E,A]],q)=>{let k=t[q],y=M+v,T=E+A,S=M+E,x=v+A;i+=M,f+=y*S/k,s+=y*T*S*x/(k*k*(k-1));let V=(M+A)/k,O=(v+E)/k,P=M*A/k,H=v*E/k;a+=P,c+=H,l+=V*P,m+=V*H+O*P,u+=O*H});let h=i-f,p=n&&Math.abs(h)>=.5?.5:0,d=(Math.abs(h)-p)**2/s,g=r==="two.sided"?D(d,.5,2,!1,!1):C(Math.sign(h)*Math.sqrt(d),{lowerTail:r==="less"}),b=a/c,N=Math.sqrt(l/(2*a*a)+m/(2*a*c)+u/(2*c*c)),w;if(r==="less")w=[0,b*Math.exp(j(o)*N)];else if(r==="greater")w=[b*Math.exp(j(o,{lowerTail:!1})*N),1/0];else{let M=j((1+o)/2);w=[b*Math.exp(-M*N),b*Math.exp(M*N)]}return{method:`Mantel-Haenszel chi-squared test ${p!==0?"with":"without"} continuity correction`,alternative:r,statistic:d,statisticName:"Mantel-Haenszel X-squared",parameter:1,parameterName:"df",pValue:g,confInt:w,confLevel:o,estimate:b,estimateNames:"common odds ratio",nullValue:1,nullValueName:"common odds ratio"}}function Kn(e,t,r){let n=new Vt(e),o=e.reduce((s,a)=>s+a[0][0],0),i;if(t==="two.sided"){let s=n.density(1),a=s[o-n.lo]*(1+1e-7),c=[0,0];for(let l of s)l<=a&&(c=F(c,[l,0]));i=Math.min(1,c[0])}else i=n.cdf(o,1,t==="greater");let f;if(t==="less")f=[0,ee(n,o,1-r)];else if(t==="greater")f=[ne(n,o,1-r),1/0];else{let s=(1-r)/2;f=[ne(n,o,s),ee(n,o,s)]}return{method:"Exact conditional test of independence in 2 x 2 x k tables",alternative:t,statistic:o,statisticName:"S",pValue:i,confInt:f,confLevel:r,estimate:ze(n,o),estimateNames:"common odds ratio",nullValue:1,nullValueName:"common odds ratio"}}function Un(e,t,r,n){let o=(r-1)*(n-1),i=new Array(o).fill(0),f=Array.from({length:o},()=>new Array(o).fill(0));e.forEach((c,l)=>{let m=t[l],u=c.map(d=>d.reduce((g,b)=>g+b,0)),h=Array.from({length:n},(d,g)=>c.reduce((b,N)=>b+N[g],0)),p=1/(m*m*(m-1));for(let d=0;d<n-1;d++)for(let g=0;g<r-1;g++){let b=g+(r-1)*d;i[b]+=c[g][d]-u[g]*h[d]/m;for(let N=0;N<n-1;N++)for(let w=0;w<r-1;w++){let M=(g===w?m*u[g]:0)-u[g]*u[w],v=(d===N?m*h[d]:0)-h[d]*h[N];f[b][w+(r-1)*N]+=p*M*v}}});let s=Ee(f,i),a=0;for(let c=0;c<o;c++)a+=i[c]*s[c];return{method:"Cochran-Mantel-Haenszel test",statistic:a,statisticName:"Cochran-Mantel-Haenszel M^2",parameter:o,parameterName:"df",pValue:D(a,o/2,2,!1,!1)}}var _e=new Map;function Bn(e,t){let r=`${e},${t}`,n=_e.get(r);if(n!==void 0)return n;let o=e+t,i=[];for(let u=1;u<=o;u++)i.push(Math.min(u,o+1-u));let f=i.reduce((u,h)=>u+h,0),s=Array.from({length:e+1},()=>new Float64Array(f+1));s[0][0]=1;for(let u=0;u<o;u++){let h=o-u,p=i[u],d=Array.from({length:e+1},()=>new Float64Array(f+1));for(let g=0;g<=e;g++){let b=s[g],N=e-g;if(N>h)continue;let w=N/h;for(let M=0;M<=f;M++){let v=b[M];v!==0&&(N>0&&(d[g+1][M+p]+=v*w),N<h&&(d[g][M]+=v*(1-w)))}}s=d}let a=s[e],c=0;for(;c<a.length&&a[c]===0;)c++;let l=a.length-1;for(;l>c&&a[l]===0;)l--;let m={min:c,probs:a.slice(c,l+1)};return _e.set(r,m),m}function re(e,t,r,n=!0){if(Number.isNaN(e)||!(t>=1)||!(r>=1)||t!==Math.floor(t)||r!==Math.floor(r))return NaN;let{min:o,probs:i}=Bn(t,r),f=Math.floor(e+1e-7)-o,s=0;if(n)for(let a=0;a<=Math.min(f,i.length-1);a++)s+=i[a];else for(let a=Math.max(f+1,0);a<i.length;a++)s+=i[a];return Math.min(s,1)}function Xn(e,t,r={}){let n=Array.from(e).filter(d=>!Number.isNaN(d)),o=Array.from(t).filter(d=>!Number.isNaN(d)),i=n.length,f=o.length;if(i<1)throw new RangeError("not enough 'x' observations");if(f<1)throw new RangeError("not enough 'y' observations");let s=L(r.alternative),a=i+f,c=U(n.concat(o)),l=c.map(d=>Math.min(d,a-d+1)),m=0;for(let d=0;d<i;d++)m+=l[d];let u=new Set(c).size<a,h=r.exact??(i<50&&f<50&&!u),p;if(h&&!u){let d=b=>re(b-1,i,f,!1),g=b=>re(b,i,f,!0);if(s==="two.sided"){let b=Math.floor((i+1)**2/4)+Math.floor(i*f/2)/2;p=Math.min(1,2*(m>b?d(m):g(m)))}else s==="less"?p=d(m):p=g(m)}else{let d=0;for(let M of l)d+=M*M;let g=a%2===0,b=g?i*(a+2)/4:i*(a+1)**2/(4*a),N=g?i*f*(16*d-a*(a+2)**2)/(16*a*(a-1)):i*f*(16*a*d-(a+1)**4)/(16*a*a*(a-1)),w=(m-b)/Math.sqrt(N);p=s==="two.sided"?2*Math.min(C(w),C(w,{lowerTail:!1})):s==="less"?C(w,{lowerTail:!1}):C(w)}return{method:"Ansari-Bradley test",alternative:s,statistic:m,statisticName:"AB",pValue:p,nullValue:1,nullValueName:"ratio of scales"}}var Qn=[1.2337005501361697,7831619385924639e-32];function Yn(e,t,r){let n=(l,m)=>{let u=new Float64Array(t*t);for(let h=0;h<t;h++)for(let p=0;p<t;p++){let d=l[h*t+p];if(d!==0)for(let g=0;g<t;g++)u[h*t+g]+=d*m[p*t+g]}return u},o=l=>{let m=0;for(let p of l)m=Math.max(m,Math.abs(p));if(m===0||!Number.isFinite(m))return 0;let u=Math.floor(Math.log2(m));if(Math.abs(u)<500)return 0;let h=2**-u;for(let p=0;p<l.length;p++)l[p]*=h;return u},i,f=0,s=e.slice(),a=0,c=r;for(;c>0;)c&1&&(i=i===void 0?s.slice():n(i,s),f+=a,f+=o(i)),c>>=1,c>0&&(s=n(s,s),a*=2,a+=o(s));return[i,f]}function We(e,t){if(Number.isNaN(t)||!(e>=1)||e!==Math.floor(e))return NaN;if(t<=1/(2*e))return 0;if(t>=1)return 1;if(e*t<1){let[l,m]=yt(e,t),u=2*l-1+2*m,h=1,p=0;for(let d=1;d<=e;d++)h*=d/e*u,h<2**-500&&(h*=2**500,p-=500);for(;p<-1e3;)h*=2**-1e3,p+=1e3;return h*2**p}let r=Math.floor(e*t)+1,n=2*r-1,o=r-e*t,i=new Float64Array(n*n);for(let l=0;l<n;l++)for(let m=0;m<n;m++)i[l*n+m]=l-m+1>=0?1:0;for(let l=0;l<n;l++)i[l*n]-=Math.pow(o,l+1),i[(n-1)*n+l]-=Math.pow(o,n-l);2*o-1>0&&(i[(n-1)*n]+=Math.pow(2*o-1,n));for(let l=0;l<n;l++)for(let m=0;m<n;m++){let u=l-m+1;if(u>0){let h=1;for(let p=2;p<=u;p++)h*=p;i[l*n+m]/=h}}let[f,s]=Yn(i,n,e),a=f[(r-1)*n+r-1],c=s;for(let l=1;l<=e;l++)a=a*l/e,Math.abs(a)<2**-500&&(a*=2**500,c-=500);for(;c>1e3;)a*=2**1e3,c-=1e3;for(;c<-1e3;)a*=2**-1e3,c+=1e3;return a*2**c}function oe(e,t=!0){if(Number.isNaN(e))return NaN;if(e<=0)return t?0:1;if(e===1/0)return t?1:0;if(e<1){let o=xt(Qn,yt(e,e)),i=o[0]+o[1],f=Math.exp(-o[0])*(1-o[1]),s=0;for(let c=2;c<100;c++){let l=Math.exp(-(2*c-1)*(2*c-1)*i);if(s+=l,l<=1e-17*(s+f))break}let a=Math.sqrt(2*Math.PI)/e*(f+s);return t?a:1-a}let r=0;for(let o=1;o<100;o++){let i=Math.exp(-2*o*o*e*e);if(r+=o%2===1?i:-i,i<=1e-17*Math.abs(r))break}let n=2*r;return t?1-n:n}function He(e,t){if(Number.isNaN(t)||!(e>=1)||e!==Math.floor(e))return NaN;if(t<=0)return 1;if(t>1)return 0;let[r,n]=yt(e,t),o=Math.floor(e-r-n),i=0;for(let f=0;f<=o;f++){let s=F(Lt(e-f,-r),[-n,0]);if(s[0]<=0)break;let a=F(Lt(f,r),[n,0]),c=xt(a,[e,0]),l=xt(s,[e,0]);i+=ue(f,e-f,c,l,!1)/(c[0]+c[1])}return Math.min(t*i,1)}function $e(e,t,r,n={}){let o=n.alternative??"two.sided";if(Number.isNaN(e)||!(t>=1)||!(r>=1)||t!==Math.floor(t)||r!==Math.floor(r))return NaN;if(e<=0)return 1;if(e>1)return 0;let i=t+r,f;if(n.z!==void 0){if(n.z.length!==i)throw new RangeError("z must have length m + n");let u=[...n.z].sort((h,p)=>h-p);f=new Array(i+1).fill(!1);for(let h=1;h<i;h++)f[h]=u[h]!==u[h-1]}let s=e*t*r*(1-1e-10),a=(u,h)=>{let p=u*r-h*t;return(o==="two.sided"?Math.abs(p):o==="greater"?p:-p)>=s},c=new Float64Array(r+1),l=new Float64Array(r+1),m=0;for(let u=0;u<=t;u++){for(let h=0;h<=r;h++){if(u===0&&h===0){l[0]=1;continue}let p=u+h,d=(u>0?u/p*c[h]:0)+(h>0?h/p*l[h-1]:0);(f===void 0?p<i:f[p])&&a(u,h)?(d>0&&(m+=d*ut(u,t,r,p,!1)),l[h]=0):l[h]=d}[c,l]=[l,c],l.fill(0)}return Math.min(m,1)}function De(e,t){return e==="two.sided"?"two-sided":`the CDF of x lies ${e==="less"?"below":"above"} ${t?"the null hypothesis":"that of y"}`}function Gn(e,t,r={}){let n=Array.from(e).filter(N=>!Number.isNaN(N)).sort((N,w)=>N-w),o=n.length;if(o<1)throw new RangeError("not enough 'x' data");let i=L(r.alternative),f=i==="two.sided"?"D":i==="greater"?"D^+":"D^-";if(typeof t=="function"){let N=-1/0,w=-1/0;for(let q=0;q<o;q++){let k=t(n[q]);N=Math.max(N,(q+1)/o-k),w=Math.max(w,k-q/o)}let M=i==="two.sided"?Math.max(N,w):i==="greater"?N:w,v=new Set(n).size<o,E=r.exact??(o<100&&!v),A;return i==="two.sided"?A=E?1-We(o,M):oe(Math.sqrt(o)*M,!1):A=E?He(o,M):Math.exp(-2*o*M*M),{method:`${E?"Exact":"Asymptotic"} one-sample Kolmogorov-Smirnov test`,alternative:De(i,!0),exact:E,statistic:M,statisticName:f,pValue:Math.min(1,Math.max(0,A))}}let s=Array.from(t).filter(N=>!Number.isNaN(N)),a=s.length;if(a<1)throw new RangeError("not enough 'y' data");let c=n.map(N=>[N,0]).concat(s.map(N=>[N,1]));c.sort((N,w)=>N[0]-w[0]);let l=0,m=0,u=0,h=0;for(let N=0;N<c.length;N++){if(c[N][1]===0?l++:m++,N+1<c.length&&c[N+1][0]===c[N][0])continue;let w=l/o-m/a;u=Math.max(u,w),h=Math.max(h,-w)}let p=i==="two.sided"?Math.max(u,h):i==="greater"?u:h,d=new Set(c.map(N=>N[0])).size<c.length,g=r.exact??o*a<1e4,b;if(g)b=$e(p,o,a,d?{alternative:i,z:c.map(N=>N[0])}:{alternative:i});else{let N=o*a/(o+a);b=i==="two.sided"?oe(Math.sqrt(N)*p,!1):Math.exp(-2*N*p*p)}return{method:`${g?"Exact":"Asymptotic"} two-sample Kolmogorov-Smirnov test`,alternative:De(i,!1),exact:g,statistic:p,statisticName:f,pValue:Math.min(1,Math.max(0,b))}}function Ke(e,t,r){let n=Array.from(e);if(n.length!==t.length)throw new RangeError("'x' and 'g' must have the same length");let o=new Map;for(let f=0;f<n.length;f++){let s=t[f];if(typeof s=="number"&&Number.isNaN(s)||r&&Number.isNaN(n[f]))continue;let a=o.get(s);a===void 0&&o.set(s,a=[]),a.push(n[f])}let i=Array.from(o.keys()).sort((f,s)=>typeof f=="number"&&typeof s=="number"?f-s:String(f)<String(s)?-1:String(f)>String(s)?1:0);return{levels:i,groups:i.map(f=>o.get(f))}}function se(e,t,r){let n=[],o=[];for(let s=0;s<e-1;s++)for(let a=s+1;a<e;a++)n.push(t(a,s)),o.push([a-1,s]);let i=Bt(n,r),f=Array.from({length:e-1},()=>new Array(e-1).fill(NaN));return o.forEach(([s,a],c)=>f[s][a]=i[c]),f}function ae(e,t,r,n){return{method:e,pValue:r,rowNames:t.slice(1).map(String),colNames:t.slice(0,-1).map(String),pAdjustMethod:n}}function Zn(e,t,r={}){let n=r.paired??!1,o=r.poolSd??!n;if(n&&o)throw new RangeError("pooling of SD is incompatible with paired tests");let i=L(r.alternative),f=r.pAdjustMethod??"holm",{levels:s,groups:a}=Ke(e,t,!n),c=s.length;if(c<2)throw new RangeError("there must be at least two groups");let l,m;if(o){m="t tests with pooled SD";let u=a.map(b=>b.length),h=a.map(b=>b.length>0?Y(b):NaN),p=0,d=0;a.forEach(b=>{b.length>1&&(p+=K(b)*(b.length-1),d+=b.length-1)});let g=Math.sqrt(p/d);l=(b,N)=>{let w=(h[b]-h[N])/(g*Math.sqrt(1/u[b]+1/u[N]));return i==="less"?Q(w,d,!0,!1):i==="greater"?Q(w,d,!1,!1):2*Q(-Math.abs(w),d,!0,!1)}}else m=n?"paired t tests":"t tests with non-pooled SD",l=(u,h)=>Pt(a[u],a[h],{paired:n,alternative:i}).pValue;return ae(m,s,se(c,l,f),f)}function Jn(e,t,r={}){let{pAdjustMethod:n,alternative:o,...i}=r,f=n??"holm",{levels:s,groups:a}=Ke(e,t,!(i.paired??!1)),c=s.length;if(c<2)throw new RangeError("there must be at least two groups");let l="",m=se(c,(u,h)=>{let p=Dt(a[u],a[h],{...i,...o===void 0?{}:{alternative:o}});return l=p.method,p.pValue},f);return ae(l,s,m,f)}function tr(e,t,r={}){if(e.length!==t.length)throw new RangeError("'x' and 'n' must have the same length");let n=[],o=[];e.forEach((l,m)=>{Number.isNaN(l)||Number.isNaN(t[m])||(n.push(l),o.push(t[m]))});let i=n.length;if(i<2)throw new RangeError("too few groups");let f=r.pAdjustMethod??"holm",s=r.correct??!0,a=se(i,(l,m)=>Qt([n[l],n[m]],[o[l],o[m]],{correct:s}).pValue,f),c=Array.from({length:i},(l,m)=>m+1);return ae("Pairwise comparison of proportions",c,a,f)}function Ue(e){let t=e.flat(),r=Nt(t),n=[0,0],o=[0,0],i=[];for(let f of e){let s=Nt(f);i.push(s[0]);let a=B(s,r);n=F(n,vt(vt(a,a),[f.length,0]));for(let c of f){let l=B([c,0],s);o=F(o,vt(l,l))}}return{ssb:n[0],ssw:o[0],means:i}}function er(e,t){let r=ct(e,t),n=r.length;if(n<2)throw new RangeError("contrasts can be applied only to factors with 2 or more levels");let o=r.reduce((u,h)=>u+h.length,0),{ssb:i,ssw:f}=Ue(r),s=n-1,a=o-n,c=i/s,l=f/a,m=c/l;return{df:[s,a],sumSq:[i,f],meanSq:[c,l],fValue:m,pValue:a>0?X(m,s,a,!1,!1):NaN}}function nr(e,t,r={}){let n;t!==void 0&&!Array.isArray(t)?r=t:n=t;let{labels:o,groups:i}=Yt(e,n),f=i.length;if(f<2)throw new RangeError("contrasts can be applied only to factors with 2 or more levels");let s=r.confLevel??.95,c=i.reduce((d,g)=>d+g.length,0)-f,{ssw:l,means:m}=Ue(i),u=l/c,h=we(s,f,c),p={names:[],i:[],j:[],diff:[],lwr:[],upr:[],pAdj:[]};for(let d=0;d<f-1;d++)for(let g=d+1;g<f;g++){let b=m[g]-m[d],N=Math.sqrt(u/2*(1/i[g].length+1/i[d].length));p.names.push(`${o[g]}-${o[d]}`),p.i.push(g+1),p.j.push(d+1),p.diff.push(b),p.lwr.push(b-h*N),p.upr.push(b+h*N),p.pAdj.push(ge(Math.abs(b)/N,f,c,{lowerTail:!1}))}return p}function rr(e,t,r={}){let n;t!==void 0&&!ArrayBuffer.isView(t)&&!Array.isArray(t)?r=t:n=t;let{sigmaX:o,sigmaY:i}=r,f=r.mu??0;if(o===void 0&&n===void 0)throw new RangeError("sigmaX (the known standard deviation of x) is required");if(o===void 0||n!==void 0&&i===void 0)throw new RangeError("sigmaX and sigmaY are both required for two samples");if(Number.isNaN(f))throw new RangeError("mu must be a number");let s=L(r.alternative),a=r.confLevel??.95;if(!(a>=0&&a<=1))throw new RangeError("confLevel must be between 0 and 1");let c=Array.from(e).filter(w=>!Number.isNaN(w)),l=n===void 0?void 0:Array.from(n).filter(w=>!Number.isNaN(w));if(c.length<3)throw new RangeError("x needs at least 3 non-missing values");if(l!==void 0&&l.length<3)throw new RangeError("y needs at least 3 non-missing values");let m=Nt(c)[0],u=l===void 0?NaN:Nt(l)[0],h=l===void 0?o/Math.sqrt(c.length):Math.sqrt(o**2/c.length+i**2/l.length),p=l===void 0?m:m-u,d=(p-f)/h,g,b;if(s==="less")g=C(d),b=[-1/0,p+j(a)*h];else if(s==="greater")g=C(d,{lowerTail:!1}),b=[p-j(a)*h,1/0];else{g=2*C(-Math.abs(d));let w=j(1-(1-a)/2)*h;b=[p-w,p+w]}let N=l!==void 0;return{method:N?"Two-sample z-Test":"One-sample z-Test",alternative:s,statistic:d,statisticName:"z",pValue:g,confInt:b,confLevel:a,estimate:N?[m,u]:m,estimateNames:N?["mean of x","mean of y"]:"mean of x",nullValue:f,nullValueName:N?"difference in means":"mean"}}function or(e,t,r={}){let n=r.intercept??!0,o=e.length>0&&typeof e[0]!="number"?e.map(R=>Array.from(R)):Array.from(e,R=>[R]),i=Array.from(t);if(o.length!==i.length)throw new RangeError("variable lengths differ (found for 'x')");let f=r.weights===void 0?void 0:Array.from(r.weights);if(f!==void 0&&f.length!==i.length)throw new RangeError("variable lengths differ (found for '(weights)')");if(f?.some(R=>R<0))throw new RangeError("missing or negative weights not allowed");let s=i.map((R,I)=>!Number.isNaN(R)&&o[I].every(_=>!Number.isNaN(_))&&(f===void 0||!Number.isNaN(f[I]))),a=o.filter((R,I)=>s[I]).map(R=>n?[1,...R]:R),c=i.filter((R,I)=>s[I]),l=f?.filter((R,I)=>s[I]);if(c.length===0)throw new RangeError("0 (non-NA) cases");let m=c.map((R,I)=>l===void 0||l[I]!==0),u=a.filter((R,I)=>m[I]),h=c.filter((R,I)=>m[I]),p=l?.filter((R,I)=>m[I]),d=h.length;if(d===0)throw new RangeError("all weights are zero");let g=p?.map(Math.sqrt),b=g===void 0?u:u.map((R,I)=>R.map(_=>_*g[I])),N=g===void 0?h:h.map((R,I)=>R*g[I]),w=ye(b),M=w.rank,v=ve(w,N),E=xe(w,N),A=g===void 0?E:E.map((R,I)=>R/g[I]),q=[],k=[],y=0;c.forEach((R,I)=>{if(m[I])q.push(A[y]),k.push(R-A[y]),y++;else{let _=a[I].reduce((Mt,Be,fe)=>Number.isNaN(v[fe])?Mt:Mt+Be*v[fe],0);k.push(_),q.push(R-_)}});let T=k.filter((R,I)=>m[I]),S=d-M,x=p??new Array(d).fill(1),V=0;for(let R=0;R<d;R++)V+=x[R]*A[R]**2;let O=V/S,P=Math.sqrt(O),H=w.qr.slice(0,M).map(R=>R.slice(0,M)),z=M>0?Ae(H):[],W=w.pivot.slice(0,M).map((R,I)=>[R,I]).sort((R,I)=>R[0]-I[0]),$=W.map(([R])=>v[R]),et=W.map(([,R])=>Math.sqrt(z[R][R]*O)),nt=$.map((R,I)=>R/et[I]),dt=nt.map(R=>2*Q(-Math.abs(R),S,!0,!1)),ot={coefficients:v,residuals:q,fittedValues:k,rank:M,dfResidual:S,coefTable:{estimate:$,stdError:et,tValue:nt,pValue:dt},sigma:P,rSquared:0,adjRSquared:0,intercept:n,qr:w},ie=n?1:0,bt=M-ie;if(bt===0)return ot;let gt=0;if(n){let R=x.reduce((_,Mt)=>_+Mt,0),I=0;for(let _=0;_<d;_++)I+=x[_]*T[_]/R;for(let _=0;_<d;_++)gt+=x[_]*(T[_]-I)**2}else for(let R=0;R<d;R++)gt+=x[R]*T[R]**2;ot.rSquared=gt/(gt+V),ot.adjRSquared=1-(1-ot.rSquared)*((d-ie)/S);let le=gt/bt/O;return ot.fStatistic={value:le,numdf:bt,dendf:S},ot.fPValue=X(le,bt,S,!1,!1),ot}function sr(e,t={}){let r=t.level??.95,n=it((1+r)/2,e.dfResidual,!0,!1),{estimate:o,stdError:i}=e.coefTable,f=e.coefficients.map(()=>NaN),s=e.coefficients.map(()=>NaN),a=0;return e.coefficients.forEach((c,l)=>{Number.isNaN(c)||(f[l]=o[a]-n*i[a],s[l]=o[a]+n*i[a],a++)}),{lower:f,upper:s}}function ar(e,t,r={}){let o=(t.length>0&&typeof t[0]!="number"?t.map(p=>Array.from(p)):Array.from(t,p=>[p])).map(p=>e.intercept?[1,...p]:p),i=e.rank,f=e.qr.pivot.slice(0,i),s=e.qr.qr.slice(0,i).map(p=>p.slice(0,i)),a=e.sigma**2,c=o.map(p=>p.reduce((d,g,b)=>Number.isNaN(e.coefficients[b])?d:d+g*e.coefficients[b],0)),l=o.map(p=>{let d=new Array(i).fill(0);for(let g=0;g<i;g++){let b=p[f[g]];for(let N=0;N<g;N++)b-=s[N][g]*d[N];d[g]=b/s[g][g]}return Math.sqrt(d.reduce((g,b)=>g+b*b,0)*a)}),m=r.interval??"none";if(m==="none")return{fit:c,seFit:l};let u=it((1+(r.level??.95))/2,e.dfResidual,!0,!1),h=l.map(p=>u*Math.sqrt(p*p+(m==="prediction"?a:0)));return{fit:c,seFit:l,lwr:c.map((p,d)=>p-h[d]),upr:c.map((p,d)=>p+h[d])}}export{nr as TukeyHSD,Xn as ansariTest,er as aov,xn as bartlettTest,Xt as binomTest,Qe as chisqTest,sr as confint,Xe as corTest,Ze as fisherTest,Tn as flignerTest,An as friedmanTest,En as kruskalTest,Gn as ksTest,or as lm,$n as mantelhaenTest,Mn as mcnemarTest,qn as moodTest,zn as onewayTest,Bt as pAdjust,tr as pairwisePropTest,Zn as pairwiseTTest,Jn as pairwiseWilcoxTest,bn as poissonTest,ar as predict,Qt as propTest,Rn as quadeTest,_n as shapiroTest,Pt as tTest,vn as varTest,Dt as wilcoxTest,rr as zTest};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@numero-uno-jpn/rstats",
3
- "version": "0.5.0",
3
+ "version": "0.6.1",
4
4
  "description": "R-compatible statistical functions for the browser: distributions, random numbers that match set.seed(), hypothesis tests and linear algebra, tested against R.",
5
5
  "keywords": [
6
6
  "statistics",
@@ -30,6 +30,30 @@
30
30
  ".": {
31
31
  "types": "./dist/index.d.ts",
32
32
  "import": "./dist/index.js"
33
+ },
34
+ "./distributions": {
35
+ "types": "./dist/entries/distributions.d.ts",
36
+ "import": "./dist/entries/distributions.js"
37
+ },
38
+ "./tests": {
39
+ "types": "./dist/entries/tests.d.ts",
40
+ "import": "./dist/entries/tests.js"
41
+ },
42
+ "./linalg": {
43
+ "types": "./dist/entries/linalg.d.ts",
44
+ "import": "./dist/entries/linalg.js"
45
+ },
46
+ "./descriptive": {
47
+ "types": "./dist/entries/descriptive.d.ts",
48
+ "import": "./dist/entries/descriptive.js"
49
+ },
50
+ "./numerics": {
51
+ "types": "./dist/entries/numerics.d.ts",
52
+ "import": "./dist/entries/numerics.js"
53
+ },
54
+ "./special": {
55
+ "types": "./dist/entries/special.d.ts",
56
+ "import": "./dist/entries/special.js"
33
57
  }
34
58
  },
35
59
  "types": "./dist/index.d.ts",
@@ -63,6 +87,7 @@
63
87
  "devDependencies": {
64
88
  "@types/node": "^26.6.5",
65
89
  "esbuild": "^0.28.2",
90
+ "jstat": "1.9.6",
66
91
  "playwright": "^1.64.1",
67
92
  "typescript": "^7.0.2",
68
93
  "vitest": "^5.0.5"