This repository is a base of Eos.
Revision | ae8bce5c8333987d411c8092b7505b79dcfcb1c9 (tree) |
---|---|
Zeit | 2021-06-04 05:42:27 |
Autor | Takuo Yasunaga <yasunaga@bio....> |
Commiter | Takuo Yasunaga |
Correct: eosMath MAD mean -> median
modified: .DS_Store
modified: include/eosMath.h
modified: src/Objects/General/eosMath/doc/eosMath.html
modified: src/Objects/General/eosMath/inc/eosMath.h
modified: src/Objects/General/eosMath/src/eosMathStatistics.c
modified: src/Tools/eosMath/eosMathAverage/src/eosMathAverage.c
modified: src/Tools/eosMath/eosMathAverage/src/test/Makefile
modified: include/eosMATH.h
@@ -34,7 +34,12 @@ extern void eosMathSorting(double* v, int n); | ||
34 | 34 | extern double eosMathMedian(double* v, int n); |
35 | 35 | extern double eosMathAverage(double* v, int n); |
36 | 36 | extern double eosMathWeightedAverage(double* v, int n); |
37 | -extern double eosMathStdDev(double* v, int n); | |
37 | +extern double eosMathStdDev(double* v, double avg, int n); | |
38 | +extern double eosMathMedianAbsoluteDeviation(double* v, double median, int n); | |
39 | +extern double eosMathMedianAbsoluteDeviationNormal(double* v, double median, int n); | |
40 | +extern double eosMathInterquantileRange(double* v, int n); | |
41 | +extern double eosMathInterquantileRangeNormal(double* v, int n); | |
42 | +extern double* eosMathTrimming(double** vv, int* nn, double* v, int n, double trim); | |
38 | 43 | extern double eosMathTrimmedAverage(double* v, int n, double trim); |
39 | 44 | extern double eosMathHodgesLehmannEstimator(double* v, int n); |
40 | 45 |
@@ -3,7 +3,6 @@ | ||
3 | 3 | <H2>Information from source codes</H2> |
4 | 4 | </A> |
5 | 5 | <PRE> |
6 | -../src/eosMathStatistics.c: | |
7 | 6 | </PRE> |
8 | 7 | <HR> |
9 | 8 | <A NAME="include"> |
@@ -46,7 +45,12 @@ extern void eosMathSorting(double* v, int n); | ||
46 | 45 | extern double eosMathMedian(double* v, int n); |
47 | 46 | extern double eosMathAverage(double* v, int n); |
48 | 47 | extern double eosMathWeightedAverage(double* v, int n); |
49 | -extern double eosMathStdDev(double* v, int n); | |
48 | +extern double eosMathStdDev(double* v, double avg, int n); | |
49 | +extern double eosMathMedianAbsoluteDeviation(double* v, double median, int n); | |
50 | +extern double eosMathMedianAbsoluteDeviationNormal(double* v, double median, int n); | |
51 | +extern double eosMathInterquantileRange(double* v, int n); | |
52 | +extern double eosMathInterquantileRangeNormal(double* v, int n); | |
53 | +extern double* eosMathTrimming(double** vv, int* nn, double* v, int n, double trim); | |
50 | 54 | extern double eosMathTrimmedAverage(double* v, int n, double trim); |
51 | 55 | extern double eosMathHodgesLehmannEstimator(double* v, int n); |
52 | 56 |
@@ -35,10 +35,11 @@ extern double eosMathMedian(double* v, int n); | ||
35 | 35 | extern double eosMathAverage(double* v, int n); |
36 | 36 | extern double eosMathWeightedAverage(double* v, int n); |
37 | 37 | extern double eosMathStdDev(double* v, double avg, int n); |
38 | -extern double eosMathMeanAbsoluteDeviation(double* v, double median, int n); | |
39 | -extern double eosMathMeanAbsoluteDeviationNormal(double* v, double median, int n); | |
38 | +extern double eosMathMedianAbsoluteDeviation(double* v, double median, int n); | |
39 | +extern double eosMathMedianAbsoluteDeviationNormal(double* v, double median, int n); | |
40 | 40 | extern double eosMathInterquantileRange(double* v, int n); |
41 | 41 | extern double eosMathInterquantileRangeNormal(double* v, int n); |
42 | +extern double* eosMathTrimming(double** vv, int* nn, double* v, int n, double trim); | |
42 | 43 | extern double eosMathTrimmedAverage(double* v, int n, double trim); |
43 | 44 | extern double eosMathHodgesLehmannEstimator(double* v, int n); |
44 | 45 |
@@ -208,6 +208,38 @@ eosMathTrimmedAverage(double* v, int n, double trim) | ||
208 | 208 | return avg; |
209 | 209 | } |
210 | 210 | |
211 | +double* | |
212 | +eosMathTrimming(double** trimmedV, int*nn, double* v, int n, double trim) | |
213 | +{ | |
214 | + | |
215 | + int i; | |
216 | + int iStart; | |
217 | + double* tmp; | |
218 | + double* tmp2; | |
219 | + double avg; | |
220 | + | |
221 | + *nn = (int)(n*(1-trim*2)+0.5); | |
222 | + iStart = (int)(n*trim+0.5) ; | |
223 | + | |
224 | + tmp = memoryAllocate(sizeof(double)*n, "in eosMathMedian"); | |
225 | + tmp2 = memoryAllocate(sizeof(double)*(*nn), "in eosMathMedian"); | |
226 | + for(i=0; i<n; i++) { | |
227 | + tmp[i] = v[i]; | |
228 | + } | |
229 | + eosMathSorting(tmp, n); | |
230 | + | |
231 | + for(i=0; i<*nn; i++) { | |
232 | + tmp2[i] = tmp[i+iStart]; | |
233 | + } | |
234 | + free(tmp); | |
235 | + | |
236 | + if(trimmedV!=NULL) { | |
237 | + *trimmedV = tmp2; | |
238 | + } | |
239 | + | |
240 | + return tmp2; | |
241 | +} | |
242 | + | |
211 | 243 | |
212 | 244 | double |
213 | 245 | eosMathHodgesLehmannEstimator(double* v, int n) |
@@ -40,8 +40,10 @@ main(int argc, char* argv[]) | ||
40 | 40 | eosMathAverageInfo info; |
41 | 41 | Array in; |
42 | 42 | int n, i; |
43 | + int nn; | |
43 | 44 | double* v; |
44 | 45 | double avg; |
46 | + double* vv; | |
45 | 47 | |
46 | 48 | init0(&info); |
47 | 49 | argCheck(&info, argc, argv); |
@@ -62,21 +64,27 @@ main(int argc, char* argv[]) | ||
62 | 64 | } |
63 | 65 | |
64 | 66 | if(info.flagTrim) { |
65 | - avg = eosMathTrimmedAverage(v, n, info.Trim); | |
67 | + vv = eosMathTrimming(&vv, &nn, v, n, info.Trim); | |
66 | 68 | } else { |
67 | - switch(info.mode) { | |
68 | - case 0: { | |
69 | - avg = eosMathAverage(v, n); | |
70 | - break; | |
71 | - } | |
72 | - case 1: { | |
73 | - avg = eosMathWeightedAverage(v, n); | |
74 | - break; | |
75 | - } | |
76 | - default: { | |
77 | - fprintf(stderr, "Not supported mode: %ld\n", info.mode); | |
78 | - exit(EXIT_FAILURE); | |
79 | - } | |
69 | + vv = v; | |
70 | + nn = n; | |
71 | + } | |
72 | +#ifdef DEBUG | |
73 | + for(i=0; i<n; i++) DEBUGPRINT1(" %f", v[i]); DEBUGPRINT("\n"); | |
74 | + for(i=0; i<nn; i++) DEBUGPRINT1(" %f", vv[i]); DEBUGPRINT("\n"); | |
75 | +#endif | |
76 | + switch(info.mode) { | |
77 | + case 0: { | |
78 | + avg = eosMathAverage(vv, nn); | |
79 | + break; | |
80 | + } | |
81 | + case 1: { | |
82 | + avg = eosMathWeightedAverage(vv, nn); | |
83 | + break; | |
84 | + } | |
85 | + default: { | |
86 | + fprintf(stderr, "Not supported mode: %ld\n", info.mode); | |
87 | + exit(EXIT_FAILURE); | |
80 | 88 | } |
81 | 89 | } |
82 | 90 |
@@ -91,4 +99,5 @@ additionalUsage() | ||
91 | 99 | fprintf(stderr, "-m 0 : Average\n"); |
92 | 100 | fprintf(stderr, "-m 1 : WeightedAverage\n"); |
93 | 101 | fprintf(stderr, "-m 0 -trim xx: Trimming\n"); |
102 | + fprintf(stderr, "-m 1 -trim xx: Trimming\n"); | |
94 | 103 | } |
@@ -16,6 +16,7 @@ exec: | ||
16 | 16 | ../$(OSTYPE)/$(OBJECTNAME) -i data/test2.in -o data/test2.out |
17 | 17 | ../$(OSTYPE)/$(OBJECTNAME) -i data/test2.in -o data/test2.trim.out -trim 0.2 |
18 | 18 | ../$(OSTYPE)/$(OBJECTNAME) -i data/test2.in -o data/test2-1.out -m 1 |
19 | + ../$(OSTYPE)/$(OBJECTNAME) -i data/test2.in -o data/test2-1.trim.out -m 1 -trim 0.2 | |
19 | 20 | @echo "----- Calc check -----" |
20 | 21 | |
21 | 22 | clean: |