From: John Darrington Date: Fri, 10 May 2013 11:46:13 +0000 (+0200) Subject: Fix corner case in calculation of trimmed mean. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fb38178d67da062cf6bbbce5ad560aeca8e259c3;hp=367686641f08e0f6cfd168e451de4e390ee2a759;p=pspp Fix corner case in calculation of trimmed mean. The calculation of the trimmed mean was not quite correct. This change fixes it, and adds a test. Reported by: Olaf Nöhring. --- diff --git a/src/math/trimmed-mean.c b/src/math/trimmed-mean.c index 2d44d0dc08..a687dd9b5f 100644 --- a/src/math/trimmed-mean.c +++ b/src/math/trimmed-mean.c @@ -33,11 +33,11 @@ acc (struct statistic *s, const struct ccase *cx UNUSED, double c, double cc, do struct trimmed_mean *tm = UP_CAST (s, struct trimmed_mean, parent.parent); struct order_stats *os = &tm->parent; - if ( cc > os->k[0].tc && cc < os->k[1].tc) - tm->sum += c * y; + if ( cc > os->k[0].tc && cc <= os->k[1].tc) + tm->sum += c * y; - if ( tm->cyk1p1 == SYSMIS && cc >os->k[0].tc) - tm->cyk1p1 = c * y; + if ( tm->cyk1p1 == SYSMIS && cc > os->k[0].tc) + tm->cyk1p1 = c * y; } static void @@ -83,14 +83,11 @@ trimmed_mean_calculate (const struct trimmed_mean *tm) return ( - (os->k[0].cc_p1 - os->k[0].tc) * os->k[0].y_p1 - - - (os->k[1].cc - os->k[1].tc) * os->k[1].y_p1 + (os->k[0].cc - os->k[0].tc) * os->k[0].y_p1 + - tm->sum - - - tm->cyk1p1 + (tm->w - os->k[1].cc - os->k[0].tc) * os->k[1].y_p1 + + + tm->sum ) - / - ( (1.0 - 2 * tm->tail) * tm->w); + / ((1.0 - tm->tail * 2) * tm->w); } diff --git a/tests/language/stats/examine.at b/tests/language/stats/examine.at index bad259d58e..54307f4688 100644 --- a/tests/language/stats/examine.at +++ b/tests/language/stats/examine.at @@ -873,4 +873,148 @@ x,. (missing),Highest,1,31,4004 ]) -AT_CLEANUP \ No newline at end of file +AT_CLEANUP + + +dnl Run a test of the basic STATISTICS using a "real" +dnl dataset and comparing with "real" results kindly +dnl provided by Olaf Nöhring +AT_SETUP([EXAMINE -- sample unweighted]) + +AT_DATA([sample.sps], [dnl +set format = F22.4. +DATA LIST notable LIST /X * +BEGIN DATA. +461.19000000 +466.38000000 +479.46000000 +480.10000000 +483.43000000 +488.30000000 +489.00000000 +491.62000000 +505.62000000 +511.30000000 +521.53000000 +526.70000000 +528.25000000 +538.70000000 +540.22000000 +540.58000000 +546.10000000 +548.17000000 +553.99000000 +566.21000000 +575.90000000 +584.38000000 +593.40000000 +357.05000000 +359.73000000 +360.48000000 +373.98000000 +374.13000000 +381.45000000 +383.72000000 +390.00000000 +400.34000000 +415.32000000 +415.91000000 +418.30000000 +421.03000000 +422.43000000 +426.93000000 +433.25000000 +436.89000000 +445.33000000 +446.33000000 +446.55000000 +456.44000000 +689.49000000 +691.92000000 +695.00000000 +695.36000000 +698.21000000 +699.46000000 +706.61000000 +710.69000000 +715.82000000 +715.82000000 +741.39000000 +752.27000000 +756.73000000 +757.74000000 +759.57000000 +796.07000000 +813.78000000 +817.25000000 +825.48000000 +831.28000000 +849.24000000 +890.00000000 +894.78000000 +935.65000000 +935.90000000 +945.90000000 +1012.8600000 +1022.6000000 +1061.8100000 +1063.5000000 +1077.2300000 +1151.6300000 +1355.2800000 +598.88000000 +606.91000000 +621.60000000 +624.80000000 +636.13000000 +637.38000000 +640.32000000 +649.35000000 +656.51000000 +662.55000000 +664.69000000 +106.22000000 +132.24000000 +174.76000000 +204.85000000 +264.93000000 +264.99000000 +269.84000000 +325.12000000 +331.67000000 +337.26000000 +347.68000000 +354.91000000 +END DATA. + +EXAMINE + x + /STATISTICS=DESCRIPTIVES + . +]) + +AT_CHECK([pspp -O format=csv sample.sps], [0], [dnl +Table: Case Processing Summary +,Cases,,,,, +,Valid,,Missing,,Total, +,N,Percent,N,Percent,N,Percent +X,100,100%,0,0%,100,100% + +Table: Descriptives +,,,Statistic,Std. Error +X,Mean,,587.6603,23.2665 +,95% Confidence Interval for Mean,Lower Bound,541.4946, +,,Upper Bound,633.8260, +,5% Trimmed Mean,,579.7064, +,Median,,547.1350, +,Variance,,54132.8466, +,Std. Deviation,,232.6647, +,Minimum,,106.2200, +,Maximum,,1355.2800, +,Range,,1249.0600, +,Interquartile Range,,293.1575, +,Skewness,,.6331,.2414 +,Kurtosis,,.5300,.4783 +]) + +AT_CLEANUP