axiom-developer
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Axiom-developer] [statistical functions] Old hacks


From: unknown
Subject: [Axiom-developer] [statistical functions] Old hacks
Date: Sat, 11 Jun 2005 07:02:10 -0500

Changes 
http://page.axiom-developer.org/zope/mathaction/StatisticalFunctions/diff
--
Here is some old hack.
\begin{axiom}
)abbrev package STAT StatPackage
++ Description:
++ This package exports statistics utilities
StatPackage(S,A) : Exports == Implementation where 
  S: SetCategory
  A: Collection(S) with (finiteAggregate)
  Exports == with
        if A has FiniteLinearAggregate(S) and S has OrderedSet then
                median: A -> S
                ++ median(a) median of a collection
        if S has Field then
                mean: A -> S
                ++ mean(a) arithmetic mean of a collection
                hmean: A -> S
                ++ hmean(a) harmonic mean of a collection
                moment: (A,Integer) -> S
                ++ moment(a,i) i nth moment of a collection
                variance: A -> S
                ++ variance(a) variance of a collection
                center: A -> A
                ++ center(a) center collection
                if A has shallowlyMutable then
                        center_!: A -> A
                        ++ center!(a) center collection
                if S has RadicalCategory then
                        gmean: A -> S
                        ++ gmean(a) geometric mean of a collection
                        stdev: A -> S
                        ++ stdev(a) root mean square of a collection
                        stdize: A -> A
                        ++ stdize(a) standardize a collection   
                        if A has shallowlyMutable then
                                stdize_!: A -> A
                                ++ stdize!(a) standardize a collection  
  Implementation == add
        if A has FiniteLinearAggregate(S) and S has OrderedSet then
                median(m)==
                        n := sort(m)
                        i:= divide(#m,2)
                        if (zero? i.remainder) then
                                j:= elt(n,i.quotient+minIndex(m)-1)
                        else
                                j:= elt(n,i.quotient+minIndex(m))
                        j

        if S has Field then
                if A has OneDimensionalArrayAggregate(S) then
                        sums: A ->List S
                        sums(m)==
                                j:=0::S
                                j2:=0::S
                                for i in minIndex(m)..maxIndex(m) repeat
                                        h:= elt(m,i)
                                        j := j + h
                                        j2 := j2 + h*h
                                [j,j2]
                        variance(m)==
                                i := center(m)
                                s := sums(i)            
                                k := (s.2 - s.1/#m::S)/(#m::S - 1::S)
                                k
                        if S has RadicalCategory then
                                stdize(m)==
                                        i := mean(m)
                                        j := map(#1-i,m)
                                        s := sums(j)
                                        k := sqrt((s.2 - s.1/#m::S)/(#m::S - 
1::S))
                                        map((#1-i)/k,m)
                                if A has shallowlyMutable then
                                        stdize_!(m)==
                                                i := mean(m)
                                                j := map(#1-i,m)
                                                s := sums(j)
                                                k := sqrt((s.2 - 
s.1/#m::S)/(#m::S - 1::S))
                                                map_!((#1-i)/k,m)

                else
                        variance(m)==
                                i := center(m)
                                j := reduce("+",i)
                                j2 := reduce("+", map(#1*#1,i))
                                k := (j2 - j/#m::S)/(#m::S - 1::S)
                                k
                        if S has RadicalCategory then
                                stdize(m)==
                                        me:= mean(m)
                                        i := map(#1-me,m)
                                        j := reduce("+",i)
                                        j2 := reduce("+", map(#1*#1,i))
                                        k := sqrt((j2 - j/#m::S)/(#m::S - 1::S))
                                        map((#1-me)/k,m)
                                if A has shallowlyMutable then
                                        stdize_!(m)==
                                                me:= mean(m)
                                                i := map(#1-me,m)
                                                j := reduce("+",i)
                                                j2 := reduce("+", map(#1*#1,i))
                                                k := sqrt((j2 - j/#m::S)/(#m::S 
- 1::S))
                                                map_!((#1-me)/k,m)


                if A has FiniteLinearAggregate(S) and S has OrderedSet then
                        median(m)==
                                n := sort(m)
                                min := minIndex(m)
                                i:= divide(#m,2)
                                if (zero? i.remainder) then
                                        j:= 
(elt(n,i.quotient+min-1)+elt(n,i.quotient+min))/2::S
                                else
                                        j:=elt(n,i.quotient+min)
                                j
                mean(m)==
                        i := reduce("+", m)
                        (i / (#m::S))

                hmean(m)==
                        i := map(1::S/#1,m)
                        j := reduce("+", i)
                        ((#m::S) / j)
                        
                moment(m,n)==
                        n = 0 => 1
                        n = 1 => mean(m)
                        i := map(#1**n, m)
                        j := reduce("+",i)
                        (j / (#m::S))

                center(m)==
                        i := mean(m)
                        map(#1-i,m)

                if A has shallowlyMutable then
                        center_!(m)==
                                i := mean(m)
                                map_!(#1-i,m)
                                m
                if S has RadicalCategory then
                        gmean(m)==
                                i := reduce("*", m)
                                nthRoot(i,#m)
                        stdev(m)==
                                sqrt(variance(m))

)abbrev package IDSTAT IntegralDomainStatPackage
++ Description:
++ This package exports statistics utilities over IntegralDomain
IntegralDomainStatPackage(S,A) : Exports == Implementation where 
  S: IntegralDomain
  A: Collection(S) with (finiteAggregate)
  Exports == with
        mean: A -> Fraction(S)
        ++ mean(a) arithmetic mean of a collection
        moment: (A,NonNegativeInteger) -> Fraction(S)
        ++ moment(m,n) nth moment of a collection

  Implementation == add
        mean(m)==
                i := reduce("+", m)
                i / #m::S
        moment(m,n)==
                n = 0 => 1
                n = 1 => mean(m)
                i := map(#1**n, m)
                j := reduce("+",i)
                j / #m::S
)abbrev package MSTAT MatrixStatPackage
++ Description:
++ This package exports statistics utilities on two dimensional arrays
++ Compute with column major order
MatrixStatPackage(S,Row,Col,M) : Exports == Implementation where 
  S: SetCategory
  Row : FiniteLinearAggregate S
  Col : FiniteLinearAggregate S
  M   : TwoDimensionalArrayCategory(S,Row,Col)
  Exports == with
        if Col has shallowlyMutable then
                if S has OrderedSet then
                        median: M -> Col
                        ++ median(a) median of a two dimensional array
                if S has Field then
                        mean: M -> Col
                        ++ mean(a) arithmetic mean of a two dimensional array
                        hmean: M -> Col
                        ++ hmean(a) harmonic mean of a two dimensional array
                        variance: M -> Col
                        ++ variance(a) variance of a two dimensional array
                        moment: (M,Integer) -> Col
                        ++ moment(a,i) i nth moment of a two dimensional array
                        center: M -> M
                        ++ center(a) center two dimensional array
                        center_!: M -> M
                        ++ center!(a) center two dimensional array
                        if M has MatrixCategory(S,Row,Col) then
                                cov:  M -> M
                                ++ cov(a): covariance matrix
                        if S has RadicalCategory then
                                gmean: M -> Col
                                ++ gmean(a) geometric mean of a two dimensional 
array
                                stdev: M -> Col
                                ++ stdev(a) root mean square of a two 
dimensional array
                                stdize: M -> M
                                ++ stdize(a) standardize two dimensional array
                                stdize_!: M -> M
                                ++ stdize!(a) standardize two dimensional array
                                if M has MatrixCategory(S,Row,Col) then
                                        cor:  M -> M
                                        ++ cor(a): correlation matrix

  Implementation == add
        import Lisp
        import StatPackage(S,Col)
        if Col has shallowlyMutable then
                colReduce: (Col -> S, M) -> Col
                colReduce(fx,m)==
                        ret : Col := new(ncols(m),NIL$Lisp)
                        j := minColIndex(m) - 1
                        for i in j+1..maxColIndex(m) repeat
                                setelt(ret,i-j,fx(column(m,i)))
                        ret
                if S has OrderedSet then
                        median(m) ==
                                ret := colReduce(median$StatPackage(S,Col),m)
                                ret
                if S has Field then
                        mean(m)==
                                ret := colReduce(mean$StatPackage(S,Col),m)
                                ret
                        hmean(m)==
                                ret := colReduce(hmean$StatPackage(S,Col),m)
                                ret
                        variance(m)==
                                ret := colReduce(variance$StatPackage(S,Col),m)
                                ret
                        moment(m,pow)==
                                ret : Col := new(ncols(m),NIL$Lisp)
                                j := minColIndex(m) - 1
                                for i in j+1..maxColIndex(m) repeat
                                        
setelt(ret,i-j,moment(column(m,i),pow)$StatPackage(S,Col))
                                ret
                        center(m)==
                                ret : M := new(nrows(m),ncols(m),NIL$Lisp)
                                j := minColIndex(m) - 1
                                for i in j+1..maxColIndex(m) repeat
                                        
setColumn_!(ret,i-j,center_!(column(m,i))$StatPackage(S,Col))
                                ret
                        center_!(m)==
                                j := minColIndex(m) - 1
                                for i in j+1..maxColIndex(m) repeat
                                        
setColumn_!(m,i-j,center_!(column(m,i))$StatPackage(S,Col))
                                m
                        if M has MatrixCategory(S,Row,Col) then
                                cov(m)==
                                        ret := center(m)
                                        transpose(ret/(nrows(m)-1)::S) * ret
                                
                        if S has RadicalCategory then
                                gmean(m)==
                                        colReduce(gmean$StatPackage(S,Col),m)
                                stdev(m)==
                                        colReduce(stdev$StatPackage(S,Col),m)
                                stdize(m)==
                                        ret : M := 
new(nrows(m),ncols(m),NIL$Lisp)
                                        j := minColIndex(m) - 1
                                        for i in j+1..maxColIndex(m) repeat
                                                
setColumn_!(ret,i-j,stdize_!(column(m,i))$StatPackage(S,Col))
                                        ret
                                stdize_!(m)==
                                        j := minColIndex(m) - 1
                                        for i in j+1..maxColIndex(m) repeat
                                                
setColumn_!(m,i-j,stdize_!(column(m,i))$StatPackage(S,Col))
                                        m
                                if M has MatrixCategory(S,Row,Col) then
                                        cor(m)==
                                                ret := stdize(m)
                                                
(transpose(ret/((nrows(m)-1)::S)) * ret)

\end{axiom}

--
forwarded from http://page.axiom-developer.org/zope/mathaction/address@hidden




reply via email to

[Prev in Thread] Current Thread [Next in Thread]