On Sat, 16 Jun 2018, Henrique Andrade wrote:

> I would like to make some speed tests using the approaches suggested by me
> and Jack before we decide the best way (in terms of speed) to use the
> powerset function inside Gretl. I think we could consider using C code too
> (the powerset is really a bottleneck when we have more than 15 variables to
> combine).

I guess that the computational cost of the combinatorics is probably 
comparable to the actual CPU usage for estimation. For example:

<hansl>
set verbose off

function matrices AltPSetMat(matrix X)

     if rows(X) == 0
         matrices PowerSet = defarray({})
     else
         matrix Set = msortby(uniq(vec(X)), 1)
         n = rows(Set)
         N = 2^n
         matrices PowerSet = array(N)
         if n == 1
             PowerSet[1] = {}
             PowerSet[2] = Set[1]
         else
             tmp = AltPSetMat(Set[1:n-1])
             PowerSet = tmp
             loop i = 1 .. nelem(tmp) --quiet
                 PowerSet += tmp[i] ~ Set[n]
             endloop
         endif
     endif

     return PowerSet
end function

open mroz87.gdt --quiet
list X = 3 4 5 6 10 11 15 16 18 19
matrix mx = X
set stopwatch
matrices C = AltPSetMat(mx)
t0 = $stopwatch
n = nelem(C)
bestbic = $huge
best = 0
loop i = 1 .. n --quiet
     xi = C[i]
     list Z = xi
     ols WW const Z --quiet
     if $bic < bestbic
         best = i
         bestbic = $aic
         list bestZ = $xlist
     endif
endloop
t1 = $stopwatch
print t0 t1

print best n
ols WW bestZ
</hansl>



-------------------------------------------------------
   Riccardo (Jack) Lucchetti
   Dipartimento di Scienze Economiche e Sociali (DiSES)

   Università Politecnica delle Marche
   (formerly known as Università di Ancona)

   r.lucchetti(a)univpm.it
   http://www2.econ.univpm.it/servizi/hpp/lucchetti
-------------------------------------------------------

Reply via email to