Re: Mathematicians !! Percentile/Quartile function

new topic     » goto parent     » topic index » view thread      » older message » newer message

On Thu, 08 Sep 2005 02:47:46 -0700, CChris <guest at RapidEuphoria.com>
wrote:

>}}}
<eucode>
<snip>
You obviously had the right idea, but it only worked for the first
quartile. The main change I made was:
--   interPoint=(3+length(data))/4
   interPoint=(4-whichOne+length(data)*whichOne)/4

Based on your code, I wrote a complete test harness:
include sort.e

type qtile(object n)
    return integer(n) and n>=0 and n<=4
end type

function quartile(sequence data, qtile whichOne)
-- matches what Excel and 123 return
-- (which does not necessarily mean results are correct)

integer lowerObs
atom interPoint

    interPoint=(4-whichOne+length(data)*whichOne)/4
    lowerObs=floor(interPoint)
    interPoint-=lowerObs
    data=sort(data)&0   -- extra 0 to avoid bounds check
    return (1-interPoint)*data[lowerObs]+interPoint*data[lowerObs+1]
end function

procedure test(sequence testset, sequence expected)
integer testsetshown
    if length(expected)!=5 then ?9/0 end if
    testsetshown=0
    for i=1 to 5 do
        if quartile(testset,i-1)!=expected[i] then
            if not testsetshown then
                ?testset
                testsetshown=1
            end if
            printf(1,"quartile(%d) is %f, expected:%f\n",
			{i-1,quartile(testset,i-1),expected[i]})
        end if
    end for
end procedure
--test({2},			-- data
--     {2, 2, 2, 2, 2})	-- expected quartiles 0..4
test({2, 6, 7, 10, 14, 15, 16},
     {2, 6.5, 10, 14.5, 16})
test({2, 6, 7, 10, 14, 15},
     {2, 6.25, 8.5, 13, 15})
test({2,2,2,3,6,6,8,8,10,12,12,14,16,19,22,25,28,28,32,33},
     {2, 6, 12, 22.75, 33})
test({2,2,2,3,6,6,8,8,10,12,12,14,16,19,22,25,28,28,32,33,34,35,36,38,40,41,45,48,49,51,53,56,57,57,57,59,61,61,62,62},
     {2, 12, 33.5, 51.5, 62})

puts(1,"All Done\n")
if getc(0) then end if


Regards,
Pete (L)

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu