Skip to content

Commit caaf0d9

Browse files
docs: improve README examples of stats/base/dists/geometric namespace
PR-URL: #1801 Ref: #1628 Co-authored-by: Philipp Burckhardt <[email protected]> Co-authored-by: shivam Ahir <[email protected]> Reviewed-by: Philipp Burckhardt <[email protected]>
1 parent 4a94497 commit caaf0d9

File tree

2 files changed

+176
-4
lines changed

2 files changed

+176
-4
lines changed

lib/node_modules/@stdlib/stats/base/dists/geometric/README.md

Lines changed: 88 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,96 @@ y = dist.logpmf( 2.3 );
112112
<!-- eslint no-undef: "error" -->
113113

114114
```javascript
115-
var objectKeys = require( '@stdlib/utils/keys' );
115+
var geometricRandomFactory = require( '@stdlib/random/base/geometric' ).factory;
116+
var negativeBinomial = require( '@stdlib/stats/base/dists/negative-binomial' );
117+
var filledarrayBy = require( '@stdlib/array/filled-by' );
118+
var variance = require( '@stdlib/stats/base/variance' );
119+
var linspace = require( '@stdlib/array/base/linspace' );
120+
var mean = require( '@stdlib/stats/base/mean' );
121+
var abs = require( '@stdlib/math/base/special/abs' );
116122
var geometric = require( '@stdlib/stats/base/dists/geometric' );
117123

118-
console.log( objectKeys( geometric ) );
124+
// Define the success probability:
125+
var p = 0.3; // Probability of success on each trial
126+
127+
// Generate an array of x values (number of failures before first success):
128+
var x = linspace( 0, 10, 11 ); // Geometric distribution is discrete
129+
130+
// Compute the PMF for each x:
131+
var geometricPMF = geometric.pmf.factory( p );
132+
var pmf = filledarrayBy( x.length, 'float64', geometricPMF );
133+
134+
// Compute the CDF for each x:
135+
var geometricCDF = geometric.cdf.factory( p );
136+
var cdf = filledarrayBy( x.length, 'float64', geometricCDF );
137+
138+
// Output the PMF and CDF values:
139+
console.log( 'x values:', x );
140+
console.log( 'PMF values:', pmf );
141+
console.log( 'CDF values:', cdf );
142+
143+
// Compute statistical properties:
144+
var theoreticalMean = geometric.mean( p );
145+
var theoreticalVariance = geometric.variance( p );
146+
var theoreticalSkewness = geometric.skewness( p );
147+
var theoreticalKurtosis = geometric.kurtosis( p );
148+
149+
console.log( 'Theoretical Mean:', theoreticalMean );
150+
console.log( 'Theoretical Variance:', theoreticalVariance );
151+
console.log( 'Skewness:', theoreticalSkewness );
152+
console.log( 'Kurtosis:', theoreticalKurtosis );
153+
154+
// Generate random samples from the geometric distribution:
155+
var rgeom = geometricRandomFactory( p );
156+
var n = 1000;
157+
var samples = filledarrayBy( n, 'float64', rgeom );
158+
159+
// Compute sample mean and variance:
160+
var sampleMean = mean( n, samples, 1 );
161+
var sampleVariance = variance( n, 1, samples, 1 );
162+
163+
console.log( 'Sample Mean:', sampleMean );
164+
console.log( 'Sample Variance:', sampleVariance );
165+
166+
// Demonstrate the memoryless property:
167+
var s = 2.0;
168+
var t = 3.0;
169+
var prob1 = ( 1.0 - geometric.cdf( s + t - 1.0, p ) ) /
170+
( 1.0 - geometric.cdf( s - 1.0, p ));
171+
var prob2 = 1.0 - geometric.cdf( t - 1.0, p );
172+
173+
console.log( 'P(X > s + t | X > s):', prob1 );
174+
console.log( 'P(X > t):', prob2 );
175+
console.log( 'Difference:', abs( prob1 - prob2 ) );
176+
177+
// Demonstrate that the sum of k independent geometric random variables follows a negative binomial distribution:
178+
var k = 5;
179+
function drawSum() {
180+
var sum = 0;
181+
var j;
182+
for ( j = 0; j < k; j++ ) {
183+
sum += rgeom();
184+
}
185+
return sum;
186+
}
187+
var sumSamples = filledarrayBy( n, 'float64', drawSum );
188+
189+
// Compute sample mean and variance for the sum:
190+
var sumSampleMean = mean( n, sumSamples, 1 );
191+
var sumSampleVariance = variance( n, 1, sumSamples, 1 );
192+
193+
// Theoretical mean and variance of Negative Binomial distribution:
194+
var nbMean = negativeBinomial.mean( k, p );
195+
var nbVariance = negativeBinomial.variance( k, p );
196+
197+
console.log( 'Sum Sample Mean:', sumSampleMean );
198+
console.log( 'Sum Sample Variance:', sumSampleVariance );
199+
console.log( 'Negative Binomial Mean:', nbMean );
200+
console.log( 'Negative Binomial Variance:', nbVariance );
201+
202+
// Compare sample statistics to theoretical values:
203+
console.log( 'Difference in Mean:', abs( nbMean - sumSampleMean ) );
204+
console.log( 'Difference in Variance:', abs( nbVariance - sumSampleVariance ) );
119205
```
120206

121207
</section>

lib/node_modules/@stdlib/stats/base/dists/geometric/examples/index.js

Lines changed: 88 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,93 @@
1818

1919
'use strict';
2020

21-
var objectKeys = require( '@stdlib/utils/keys' );
21+
var geometricRandomFactory = require( '@stdlib/random/base/geometric' ).factory;
22+
var negativeBinomial = require( '@stdlib/stats/base/dists/negative-binomial' );
23+
var filledarrayBy = require( '@stdlib/array/filled-by' );
24+
var variance = require( '@stdlib/stats/base/variance' );
25+
var linspace = require( '@stdlib/array/base/linspace' );
26+
var mean = require( '@stdlib/stats/base/mean' );
27+
var abs = require( '@stdlib/math/base/special/abs' );
2228
var geometric = require( './../lib' );
2329

24-
console.log( objectKeys( geometric ) );
30+
// Define the success probability:
31+
var p = 0.3; // Probability of success on each trial
32+
33+
// Generate an array of x values (number of failures before first success):
34+
var x = linspace( 0, 10, 11 ); // Geometric distribution is discrete
35+
36+
// Compute the PMF for each x:
37+
var geometricPMF = geometric.pmf.factory( p );
38+
var pmf = filledarrayBy( x.length, 'float64', geometricPMF );
39+
40+
// Compute the CDF for each x:
41+
var geometricCDF = geometric.cdf.factory( p );
42+
var cdf = filledarrayBy( x.length, 'float64', geometricCDF );
43+
44+
// Output the PMF and CDF values:
45+
console.log( 'x values:', x );
46+
console.log( 'PMF values:', pmf );
47+
console.log( 'CDF values:', cdf );
48+
49+
// Compute statistical properties:
50+
var theoreticalMean = geometric.mean( p );
51+
var theoreticalVariance = geometric.variance( p );
52+
var theoreticalSkewness = geometric.skewness( p );
53+
var theoreticalKurtosis = geometric.kurtosis( p );
54+
55+
console.log( 'Theoretical Mean:', theoreticalMean );
56+
console.log( 'Theoretical Variance:', theoreticalVariance );
57+
console.log( 'Skewness:', theoreticalSkewness );
58+
console.log( 'Kurtosis:', theoreticalKurtosis );
59+
60+
// Generate random samples from the geometric distribution:
61+
var rgeom = geometricRandomFactory( p );
62+
var n = 1000;
63+
var samples = filledarrayBy( n, 'float64', rgeom );
64+
65+
// Compute sample mean and variance:
66+
var sampleMean = mean( n, samples, 1 );
67+
var sampleVariance = variance( n, 1, samples, 1 );
68+
69+
console.log( 'Sample Mean:', sampleMean );
70+
console.log( 'Sample Variance:', sampleVariance );
71+
72+
// Demonstrate the memoryless property:
73+
var s = 2.0;
74+
var t = 3.0;
75+
var prob1 = ( 1.0 - geometric.cdf( s + t - 1.0, p ) ) /
76+
( 1.0 - geometric.cdf( s - 1.0, p ));
77+
var prob2 = 1.0 - geometric.cdf( t - 1.0, p );
78+
79+
console.log( 'P(X > s + t | X > s):', prob1 );
80+
console.log( 'P(X > t):', prob2 );
81+
console.log( 'Difference:', abs( prob1 - prob2 ) );
82+
83+
// Demonstrate that the sum of k independent geometric random variables follows a negative binomial distribution:
84+
var k = 5;
85+
function drawSum() {
86+
var sum = 0;
87+
var j;
88+
for ( j = 0; j < k; j++ ) {
89+
sum += rgeom();
90+
}
91+
return sum;
92+
}
93+
var sumSamples = filledarrayBy( n, 'float64', drawSum );
94+
95+
// Compute sample mean and variance for the sum:
96+
var sumSampleMean = mean( n, sumSamples, 1 );
97+
var sumSampleVariance = variance( n, 1, sumSamples, 1 );
98+
99+
// Theoretical mean and variance of Negative Binomial distribution:
100+
var nbMean = negativeBinomial.mean( k, p );
101+
var nbVariance = negativeBinomial.variance( k, p );
102+
103+
console.log( 'Sum Sample Mean:', sumSampleMean );
104+
console.log( 'Sum Sample Variance:', sumSampleVariance );
105+
console.log( 'Negative Binomial Mean:', nbMean );
106+
console.log( 'Negative Binomial Variance:', nbVariance );
107+
108+
// Compare sample statistics to theoretical values:
109+
console.log( 'Difference in Mean:', abs( nbMean - sumSampleMean ) );
110+
console.log( 'Difference in Variance:', abs( nbVariance - sumSampleVariance ) );

0 commit comments

Comments
 (0)