On Thu, 30 Aug 2012, Andreas Tudyka wrote:

> Hi I am new to gretl and I am trying to find out how the calculations
> behind different commands are done.
>
> For example, if I run the pca command I would like to see how exactly the
> eigenvectors are multplied with my data and how the data is standardized
> etc.. This also applies to the princomp function.
>
> Is it possible to look "into" these commands and functions or would I have
> to resort to some source code in C?

For the command and function that you mention, yes, your only choice is to 
look at the C code; it may seem intimidating at first, but it's very 
instructive and IMHO it pays off in the long run to get acquainted with 
a low-level language like C. The file you want to look at is

http://gretl.cvs.sourceforge.net/viewvc/gretl/gretl/plugin/pca.c?view=log

That said:

(i) it would be very nice to have, for each gretl command/function, a 
detailed explanation of its inner working like the "Methods and Formulas" 
section of the Stata manual(s). We simply don't have the manpower to do 
this (but, unlike Stata, you do have the C source to look at).

(ii) the pca command can be replicated pretty easily through a hansl 
function, so an answer to your specific question is implied by the 
following script:

<hansl>
function list PC(list X, scalar n)
     scalar k = nelem(X)
     matrix mX = {X}
     scalar N = rows(mX)

     # note the dof adjustment
     matrix Z = (mX .- meanc(mX)) ./ sdc(mX) * (sqrt(1 - 1/N))

     matrix C = Z'Z ./ N
     matrix Evec = {}
     matrix Eval = eigensym(C, &Evec)

     list ret = null
     loop i=1..n --quiet
         series PC_via_func_$i = Z * Evec[,k-i+1]
         ret += PC_via_func_$i
     end loop

     return ret
end function

open maschool.gdt
list X = 2 3 4 6

pca X --save=2

matrix z = princomp({X}, 2)
series PC_alt_1 = z[,1]
series PC_alt_2 = z[,2]

list L = PC(X, 2)

# check that the principal components are in fact the same

ols PC_alt_1 0 PC_via_func_1
ols PC_alt_2 0 PC_via_func_2
</hansl>


--------------------------------------------------
  Riccardo (Jack) Lucchetti
  Dipartimento di Economia

  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