pspp-dev
[Top][All Lists]
Advanced

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

Re: Covariance Matrix


From: Jason Stover
Subject: Re: Covariance Matrix
Date: Thu, 8 Oct 2009 10:56:43 -0400
User-agent: Mutt/1.5.18 (2008-05-17)

OK, I see your point now, and it makes sense.


On Thu, Oct 08, 2009 at 11:34:54AM +0000, John Darrington wrote:
> On Wed, Oct 07, 2009 at 07:35:10PM -0400, Jason Stover wrote:
>      On Wed, Oct 07, 2009 at 03:17:55PM -0400, Jason Stover wrote:
>      > But that isn't the total number of categories that must be considered
>      > for the covariance matrix. For example, if our dictionary had the
>      > variables v1, v2 and v3, and v1 had n1 categories, v2 had n2
>      > categories and v3 had n3 categories, then our covariance matrix would
>      > need to have (n1 - 1)*(n2 - 1)*(n3 - 1) rows. I guess we could compute
>      > this value in category.c, but what if someone only wanted a covariance
>      > matrix for just v1 and v2? Then the the number of rows necessary would 
> be
>      > (n1 - 1) * (n2 - 1). Or maybe they would want v2 and v3, then we would
>      > need (n2 - 1)*(n3 - 1) rows.
>      
>      I made a mistake here: The dimensions would be (n1-1)+(n2-1)+(n3-1),
>      or (n1-1)+(n2-1), etc., but not (n1-1)*(n2-1). Oops. 
>      
> My idea is to calculate the number of categories on each procedure (that 
> needs it).
> So instead of the categories data having global scope, they will be created 
> on demand
> (in this case inside the covariance matrix constructure).
> 
> So the constructor for the covariance matrix would be passed (in addition to 
> its
> current parameters) a set of categorical variables.  The total number of 
> categories
> can be calculated in the first pass.  Thus the code would become something 
> like:
> 
> create_covariance (const struct variable **vars, int n_vars, 
>   const struct variable **catvars, int n_cat_vars)
> {
>  ...
>  cov->categories = create_categories (catvars, n_cat_vars);
> }
> 
> void
> covariance_first_pass (struct covariance *cov, const struct ccase *c)
> {
>  categories_update (cov->categories, c);
>  ...
> }
> 
> int
> get_dim (const struct covariance *cov)
> {
>  return cov->n_vars + categories_total_number_of_categories 
> (cov->categories); 
> }
> 
> 
> This involves rewriting some code, but I think it will be worthwhile.  We 
> don't
> need the total number of categories until AFTER the first pass of the 
> procedure.
> 
> -- 
> PGP Public key ID: 1024D/2DE827B3 
> fingerprint = 8797 A26D 0854 2EAB 0285  A290 8A67 719C 2DE8 27B3
> See http://pgp.mit.edu or any PGP keyserver for public key.
> 
> 






reply via email to

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