Yes, could use something else than SD, but the mentioned calculator uses SD. Got this all working fine now.
RBS On Sun, 20 Oct 2019, 13:31 Gabor Grothendieck, <ggrothendi...@gmail.com> wrote: > Another approach is to question whether you really need the > standard deviation or if any measure of variation would do. > > You could use the range, max(x) - min(x) , and just report it as the range > rather than the standard deviation. Also range/4 approximates the > standard deviation (google the range rule) > although the approximation is not very good. > > > > On Fri, Oct 18, 2019 at 6:41 PM Gabor Grothendieck > <ggrothendi...@gmail.com> wrote: > > > > There is a stdev function for sqlite here: > > https://www.sqlite.org/contrib//download/extension-functions.c?get=25 > > > > On Wed, Oct 16, 2019 at 7:57 PM Olaf Schmidt <n...@vbrichclient.com> > wrote: > > > > > > Am 12.10.2019 um 16:47 schrieb Bart Smissaert: > > > > Sorry, I forgot to tell that. It is date column with an integer > number. > > > > > > > > ID xValue xDate > > > > ---------------- > > > > 1 130 40123 > > > > 1 120 41232 > > > > 1 140 40582 > > > > 1 100 40888 > > > > 1 110 42541 > > > > 2 140 41225 > > > > 2 130 41589 > > > > 2 150 40872 > > > > > > Because SQLite on Android has at least CTEs available, > > > (since Android 5 or so), I thought I make an attempt using them... > > > > > > For your above sample-set I've created a table Test this way > > > (with slightly changed Column-Names + different IDs with "gaps" > > > + a few more sample-records, to cover especially n=1 sets): > > > > > > Create Table Test(ID, xVal, xDat); > > > > > > Insert Into Test Values(3, 130, 40123); > > > Insert Into Test Values(3, 120, 41232); > > > Insert Into Test Values(3, 140, 40582); > > > Insert Into Test Values(3, 100, 40888); > > > Insert Into Test Values(3, 110, 42541); > > > > > > Insert Into Test Values(5, 140, 41225); > > > Insert Into Test Values(5, 130, 41589); > > > Insert Into Test Values(5, 150, 40872); > > > > > > Insert Into Test Values(6, 110, 41225); > > > Insert Into Test Values(6, 115, 41227); > > > > > > Insert Into Test Values(9, 105, 41225); > > > > > > After the above Table-Creation + Inserts, one should > > > define a "Base-View" first, which is then able to select > > > appropriate aggregates (respecting your "max-4" condition): > > > > > > Create View vw_StdDev_Max4_Aggregates As > > > Select ID, Avg(xVal) a1, Avg(xVal*xVal) a2, Count(*) n From Test T > > > Where xDat In (Select xDat From Test Where T.ID=ID Order By xDat Desc > > > Limit 4) > > > Group By ID; > > > > > > Only this view above has to be adjusted, according to your > > > real table- and column-names, but the following two "derived views", > > > will work after these changes as well, as long as you leave the > > > above view-name - and the field-names: (ID, a1, a2, n) intact. > > > > > > So what remains, is two more view-defs (one for the population-StdDev - > > > and one with a few slight changes, to cover the sample-StdDev as well. > > > > > > Create View vw_StdDev_Samples As > > > Select ID, n n_SampleSize, (a2-a1*a1)*n/(n-1) "s^2", ( > > > With r(s2, s, i) As (Select (a2-a1*a1)*n/(n-1), 1, 1 Union All > > > Select s2, (s2>0)*(s+s2/s)*.5, i+1 From r Where Abs(s2-s*s)>1e-12 > > > Limit 32 > > > ) Select s From r Order By i Desc Limit 1 > > > ) s From vw_StdDev_Max4_Aggregates Where n>1 > > > Union All > > > Select ID, n, Null, Null From vw_StdDev_Max4_Aggregates Where n=1; > > > > > > Create View vw_StdDev_Populations As > > > Select ID, n n_PopulationSize, (a2-a1*a1) "sigma^2", ( > > > With r(s2, s, i) As (Select (a2-a1*a1), 1, 1 Union All > > > Select s2, (s2>0)*(s+s2/s)*.5, i+1 From r Where Abs(s2-s*s)>1e-12 > > > Limit 32 > > > ) Select s From r Order By i Desc Limit 1 > > > ) sigma From vw_StdDev_Max4_Aggregates Where n>1 > > > Union All > > > Select ID, n, 0, 0 From vw_StdDev_Max4_Aggregates Where n=1; > > > > > > ------------------------------------ > > > Ok, here the result I get on my test-table, when the 3 views > > > are in place, and the following gets executed: > > > > > > Select ID, n_PopulationSize, sigma From vw_StdDev_Populations; > > > ID n sigma > > > ------------------------ > > > 3 4 14.7901994577491 > > > 5 3 8.16496580927733 > > > 6 2 2.5 > > > 9 1 0 > > > > > > > > > Select ID, n_SampleSize, s From vw_StdDev_Samples; > > > ID n s > > > ------------------------ > > > 3 4 17.0782512765993 > > > 5 3 10.0000000000001 > > > 6 2 3.53553390593274 > > > 9 1 null > > > > > > Please note the returned null (vs. the real 0) in the last result > > > (done, because "unbiased estimates" are undefined for sample-size == 1) > > > > > > Finally for those interested, the CTE-based "iterated Square-Root", > > > cut out for an isolated calculation of sqrt(2). > > > > > > With r(s2, s, i) As (Select 2, 1, 1 Union All > > > Select s2, (s2>0)*(s+s2/s)*.5, i+1 From r Where Abs(s2-s*s)>1e-12 > > > Limit 32 > > > ) Select s From r Order By i Desc Limit 1 > > > > > > The max. iterations are limited to 32 - though for input-values > > > in a "typical range", the iteration will usually exit earlier... > > > In case of the example above -> sqrt(2), the iteration-counter > > > i reached only 6 (as can be seen, when you include i alongside s > > > in the final Select. > > > > > > With r(s2, s, i) As (Select 2, 1, 1 Union All > > > Select s2, (s2>0)*(s+s2/s)*.5, i+1 From r Where Abs(s2-s*s)>1e-12 > > > Limit 32 > > > ) Select i, s From r Order By i Desc Limit 1 > > > > > > HTH > > > > > > Olaf > > > > > > > > > > > > _______________________________________________ > > > sqlite-users mailing list > > > sqlite-users@mailinglists.sqlite.org > > > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users > > > > > > > > -- > > Statistics & Software Consulting > > GKX Group, GKX Associates Inc. > > tel: 1-877-GKX-GROUP > > email: ggrothendieck at gmail.com > > > > -- > Statistics & Software Consulting > GKX Group, GKX Associates Inc. > tel: 1-877-GKX-GROUP > email: ggrothendieck at gmail.com > _______________________________________________ > sqlite-users mailing list > sqlite-users@mailinglists.sqlite.org > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users > _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users