On Sun, 24 Feb 2013, Pindar wrote:
Hi,
I'd like to point out, that a 'good' 'aggregate by' function would do
such a
job as described below.
Unfortunately I'm stuck with more then bivariate interaction but I'm sure
GRETL can do this,
this question is how!
The script below should do what I think you need; the trick is creating a
series which contains, in coded form, all the possible combinations of
values of the variables contained in a list. This is what the function
"pack" does; note that "pack" also creates a matrix which is used in
the
"unpack" function later.
See if this helps:
<hansl>
set echo off
set messages off
function series pack(list X, matrix *pwrof2)
/*
a check should be necessary that all series in X
are discrete; for the moment, let's just skip it
*/
series ret = 0
pwrtot = 1
k = nelem(X)
# first build the nvalues vector
pwrof2 = {}
n = 1
k = 1
loop foreach i X --quiet
ret += k*X.$i
n = 2^ceil(log2(1+max(X.$i)))
k *= n
pwrof2 |= n
end loop
return ret
end function
function matrix unpack(scalar x, matrix pwr)
k = rows(pwr)
matrix ret = zeros(k,1)
loop i=1..k --quiet
h = pwr[i]
a = x % h
ret[i] = a
x = (x-a)/h
end loop
return ret
end function
# --- END FUNCTIONS -----------------------------------------
open pizza4.gdt
series ages = age<=20 ? 0 : (age>20 && age <=40) ? 1 : 2
list A = female hs ages
matrix codes = {}
u = pack(A, &codes)
n_u = values(u)
loop i = 1..rows(n_u) --quiet
k = n_u[i]
smpl u==k --restrict --replace
c = unpack(k, codes)
l = 1
loop foreach j A --quiet
printf "%10s = %d", "$j", c[l]
l++
end loop
printf "\ncases = %d, mean(pizza) = %g, mean(income) = %g\n\n", \
$nobs, mean(pizza), mean(income)
end loop
smpl full
</hansl>
It's even more complex since the R function is not that good either, cos e.g.
for MAVOVA one needs the variance-covariance-structure of
the 'interaction series'. That's why in GRETL lists should be processed which
makes the stuff not easier.
I worked around with the new '^' operator and have some promising results,
but a build-in function would be the best.
Cheers
Leon
<hansl>
open pizza4.gdt
series ages = age<=20 ? 0 : (age>20 && age <=40) ? 1 : 2
set echo off
foreign language=R --send-data --quiet
library(plyr)
ddply(gretldata[,c(1,2,4,6,8)], ~ female + college + ages,
numcolwise(mean))
end foreign
<hansl>
While the bivariate case in rather easy as in
<hansl>
open pizza4.gdt
set echo off
series ages = age<=20 ? 0 : (age>20 && age <=40) ? 1 : 2
list G1 = 2 4
list G2 = 2 8
list G3 = 4 8
list G = G1 || G2
scalar times = 2 # should also be possible
to be set to nelem(G)
#set up of all combination list
loop for i=2..times -q
string listName = "inter$i"
list @listName = null
endloop
list part1 = null
list part2 = G
# bivariate interaction
loop foreach i G-q
part1 = G.$i
part2 -= G.$i
inter2 += part2^part1
part2 += G.$i
endloop
<hansl>
Am 20.02.2013 17:45, schrieb Riccardo (Jack) Lucchetti:
> On Wed, 20 Feb 2013, Allin Cottrell wrote:
>
>> On Wed, 20 Feb 2013, Riccardo (Jack) Lucchetti wrote:
>>
>>> Very nice. The next step, logically, would be to support user-written
>>> functions too. However, this would mean to complicate the code by a
>>> factor (I reckon) of 1 to 5 or so.
>>
>> I was afraid the factor might be at the top end of that range, but I
>> experimented and it's more like 0.25. So user-functions are now supported.
>> The function must take a single series argument and return a scalar.
>> Example:
>>
>> <hansl>
>> function scalar my_aggregator (series x)
>> return sum(x^3)
>> end function
>>
>> open credscore.gdt
>> matrix m = aggregate(Income, Acc, my_aggregator)
>> print m
>> </hansl>
>
> Now, I don't want to be guilty of personality cult, but at the risk of
> sounding like an old Stalinist apparatchik I have to say I am left in awe
> by the skills of our beloved leader.
>
> Studying the cvs diff has been for several years my primary method for
> learning C, but this case stands out as a true gem.
>
> Thank you.
>
>
> -------------------------------------------------------
> 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
> -------------------------------------------------------
>
>
> _______________________________________________
> Gretl-users mailing list
> Gretl-users(a)lists.wfu.edu
>
http://lists.wfu.edu/mailman/listinfo/gretl-users
-------------------------------------------------------
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
-------------------------------------------------------