stat_c 0.2.1 → 0.3.0
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +2 -0
- data/ext/stat_c/stat_c.c +139 -1
- data/lib/stat_c/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1b08af1cb1a9851bd0f686e5c07caaba4c54c7f
|
4
|
+
data.tar.gz: bb31ab302a6c65a1c52d6d24a1e244505f02a6ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 61cfacdfb80f683eb7731c56544ec2351ed951a612b916ec27f060055b2860ae26d1d62787e1f44ed7ee94a8c33844c7be6808967078c0773e725a1d281199b3
|
7
|
+
data.tar.gz: 7db9a53a35b78cc6e918d0d060697c78ea2a690394b83bfeb742f745fe0fbb93a2606469872e170a22ea7f5ef2256f79505d8d0178d2169855b90c04bcef033b
|
data/.gitignore
CHANGED
data/README.md
CHANGED
data/ext/stat_c/stat_c.c
CHANGED
@@ -26,10 +26,14 @@ along with StatC. If not, see <http://www.gnu.org/licenses/>.
|
|
26
26
|
/* based on NIL_P in ruby.h */
|
27
27
|
#define FALSE_P(v) !((VALUE)(v) != Qfalse)
|
28
28
|
|
29
|
-
/*
|
29
|
+
/* modules */
|
30
30
|
VALUE sc_mStatC;
|
31
31
|
VALUE sc_mArray;
|
32
32
|
VALUE sc_mError;
|
33
|
+
VALUE sc_mTest;
|
34
|
+
VALUE sc_mT;
|
35
|
+
|
36
|
+
/* classes */
|
33
37
|
VALUE sc_eError;
|
34
38
|
|
35
39
|
/* @private */
|
@@ -185,6 +189,112 @@ static VALUE sc_se(int argc, VALUE* argv, VALUE obj)
|
|
185
189
|
return DBL2NUM(sd / sqrt(len));
|
186
190
|
}
|
187
191
|
|
192
|
+
/* Calculate Welch's t statistic
|
193
|
+
|
194
|
+
@param mean1 [Numeric] mean of sample 1
|
195
|
+
@param var1 [Numeric] sample variance of sample 1
|
196
|
+
@param len1 [Numeric] size of sample 1
|
197
|
+
@param mean2 [Numeric] mean of sample 2
|
198
|
+
@param var2 [Numeric] sample variance of sample 2
|
199
|
+
@param len1 [Numeric] size of sample 2
|
200
|
+
|
201
|
+
@example Get Welch's t stat for two samples
|
202
|
+
StatC::Test::T.t_stat_welch(-0.1, 2.3, 5, 2.42, 1.282, 5).round(2) #=> -2.98
|
203
|
+
|
204
|
+
@raise [StatC::Error::Error] if divide by zero error
|
205
|
+
|
206
|
+
@return [Numeric] Welch's t statistic
|
207
|
+
|
208
|
+
*/
|
209
|
+
static VALUE
|
210
|
+
sc_t_stat_welch(VALUE obj,
|
211
|
+
VALUE mean1, VALUE var1, VALUE len1,
|
212
|
+
VALUE mean2, VALUE var2, VALUE len2)
|
213
|
+
{
|
214
|
+
double m1, v1, l1, m2, v2, l2, val;
|
215
|
+
|
216
|
+
m1 = NUM2DBL(mean1);
|
217
|
+
v1 = NUM2DBL(var1);
|
218
|
+
l1 = NUM2DBL(len1);
|
219
|
+
|
220
|
+
m2 = NUM2DBL(mean2);
|
221
|
+
v2 = NUM2DBL(var2);
|
222
|
+
l2 = NUM2DBL(len2);
|
223
|
+
|
224
|
+
if (l1 <= 0 || l2 <= 0) {
|
225
|
+
rb_raise(sc_eError, "Sample sizes must be > 0");
|
226
|
+
}
|
227
|
+
|
228
|
+
val = (v1 / l1) + (v2 / l2);
|
229
|
+
|
230
|
+
if (val == 0.0) {
|
231
|
+
rb_raise(sc_eError, "Divide by zero error");
|
232
|
+
}
|
233
|
+
|
234
|
+
return DBL2NUM((m1 - m2) / sqrt(val));
|
235
|
+
}
|
236
|
+
|
237
|
+
/* Calculate degrees of freedom for Welch's t statistic
|
238
|
+
|
239
|
+
@note Uses non pooled variance
|
240
|
+
|
241
|
+
@param var1 [Numeric] sample variance of sample 1
|
242
|
+
@param len1 [Numeric] size of sample 1
|
243
|
+
@param var2 [Numeric] sample variance of sample 2
|
244
|
+
@param len1 [Numeric] size of sample 2
|
245
|
+
|
246
|
+
@example Get dof for two samples
|
247
|
+
StatC::Test::T.dof_welch(2.3, 5, 1.282, 5).round(2) #=> 7.40
|
248
|
+
|
249
|
+
@raise [StatC::Error::Error] if divide by zero error
|
250
|
+
|
251
|
+
@return [Numeric] dof
|
252
|
+
|
253
|
+
*/
|
254
|
+
static VALUE
|
255
|
+
sc_dof_welch(VALUE obj,
|
256
|
+
VALUE var1, VALUE len1,
|
257
|
+
VALUE var2, VALUE len2)
|
258
|
+
{
|
259
|
+
double v1, l1, v2, l2, num, denom, val, d1, d2;
|
260
|
+
|
261
|
+
v1 = NUM2DBL(var1);
|
262
|
+
l1 = NUM2DBL(len1);
|
263
|
+
|
264
|
+
v2 = NUM2DBL(var2);
|
265
|
+
l2 = NUM2DBL(len2);
|
266
|
+
|
267
|
+
if (l1 <= 0 || l2 <= 0) {
|
268
|
+
rb_raise(sc_eError, "Sample sizes must be > 0");
|
269
|
+
}
|
270
|
+
|
271
|
+
num = pow( (v1 / l1) + (v2 / l2), 2);
|
272
|
+
|
273
|
+
d1 = pow(l1, 2) * (l1 - 1);
|
274
|
+
d2 = pow(l2, 2) * (l2 - 1);
|
275
|
+
|
276
|
+
if (d1 == 0|| d2 == 0) {
|
277
|
+
rb_raise(sc_eError, "Divide by zero error");
|
278
|
+
}
|
279
|
+
|
280
|
+
denom =
|
281
|
+
(pow(v1, 2) / d1) + (pow(v2, 2) / d2);
|
282
|
+
|
283
|
+
if (denom == 0) {
|
284
|
+
rb_raise(sc_eError, "Divide by zero error");
|
285
|
+
}
|
286
|
+
|
287
|
+
val = num / denom;
|
288
|
+
|
289
|
+
return DBL2NUM(val);
|
290
|
+
|
291
|
+
}
|
292
|
+
/*********************************************************************
|
293
|
+
|
294
|
+
Initializers
|
295
|
+
|
296
|
+
*********************************************************************/
|
297
|
+
|
188
298
|
/* Document-module: StatC::Array
|
189
299
|
|
190
300
|
Statistical methods operating on the values of an array
|
@@ -225,6 +335,30 @@ static void sc_init_eError(void)
|
|
225
335
|
sc_eError = rb_define_class_under(sc_mError, "Error", rb_eStandardError);
|
226
336
|
}
|
227
337
|
|
338
|
+
/* Document-module: StatC::Test
|
339
|
+
|
340
|
+
Module containing various statistical tests.
|
341
|
+
|
342
|
+
*/
|
343
|
+
static void sc_init_mTest(void)
|
344
|
+
{
|
345
|
+
sc_mTest = rb_define_module_under(sc_mStatC, "Test");
|
346
|
+
}
|
347
|
+
|
348
|
+
|
349
|
+
/* Document-module: StatC::Test::T
|
350
|
+
|
351
|
+
Module containing T test methods.
|
352
|
+
|
353
|
+
*/
|
354
|
+
static void sc_init_mT(void)
|
355
|
+
{
|
356
|
+
sc_mT = rb_define_module_under(sc_mTest, "T");
|
357
|
+
|
358
|
+
rb_define_singleton_method(sc_mT, "t_stat_welch", sc_t_stat_welch, 6);
|
359
|
+
rb_define_singleton_method(sc_mT, "dof_welch", sc_dof_welch, 4);
|
360
|
+
}
|
361
|
+
|
228
362
|
/* Document-module: StatC
|
229
363
|
|
230
364
|
C stats module for Ruby.
|
@@ -235,6 +369,10 @@ void Init_stat_c(void)
|
|
235
369
|
sc_mStatC = rb_define_module("StatC");
|
236
370
|
|
237
371
|
sc_init_mArray();
|
372
|
+
|
238
373
|
sc_init_mError();
|
239
374
|
sc_init_eError();
|
375
|
+
|
376
|
+
sc_init_mTest();
|
377
|
+
sc_init_mT();
|
240
378
|
}
|
data/lib/stat_c/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stat_c
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Moore
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
11
|
+
date: 2016-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|