[Rd] Suggest patch for princomp.formula and prcomp.formula
Prof Brian Ripley
ripley at stats.ox.ac.uk
Sun Mar 26 22:29:35 CEST 2006
I would argue this is a bug in model.frame(), but it seems that it is
S-compatible. That is, variables excluded by - appear in the model frame
even though they do not really appear in the simplified formula. (I
suppose the rationale is that - need not always interpreted as deletion.)
The proposed fix regretably will not work, since one can do things like
library(MASS)
prcomp(~ dist + dist:climb, hills)
I'll see if I can dream up a general solution. (One way forward is to
simplify the formula and call terms again, but simplifcation is rather
clumsy code.)
On Sat, 25 Mar 2006, Berwin A Turlach wrote:
> Dear all,
>
> perhaps I am using princomp.formula and prcomp.formula in a way that
> is not documented to work, but then the documentation just says:
>
> formula: a formula with no response variable.
>
> Thus, to avoid a lot of typing, it would be nice if one could use '.'
> and '-' in the formula, e.g.
>
>> library(DAAG)
>> res <- prcomp(~ . - case - site - Pop - sex, possum)
> Error in prcomp.formula(~. - case - site - Pop - sex, possum) :
> PCA applies only to numerical variables
>> res <- princomp(~ . - case - site - Pop - sex, possum)
> Error in princomp.formula(~. - case - site - Pop - sex, possum) :
> PCA applies only to numerical variables
>
> Unfortunately, as the examples above show, this is currently not
> possible, since both functions test whether any term mentioned in the
> formula is non numeric or a factor, instead of just testing those that
> enter the analysis.
>
> The attached patch should allow the use of '.' and '-', while still
> producing an error when a factor or a non-numeric variable is
> specified to enter the analysis:
>
>> library(DAAG)
>> res <- prcomp(~ . - case - site - Pop - sex, possum)
>> res <- princomp(~ . - case - site - Pop - sex, possum)
>> res <- prcomp(~ . - case - site - Pop, possum)
> Error in prcomp.formula(~. - case - site - Pop, possum) :
> PCA applies only to numerical variables
>> res <- princomp(~ . - case - site - Pop, possum)
> Error in princomp.formula(~. - case - site - Pop, possum) :
> PCA applies only to numerical variables
>
> On my machine, `make check FORCE=FORCE' succeeds with this patch and,
> as far as I can tell, no modification of the help pages would be
> necessary.
>
> Cheers,
>
> Berwin
>
>
--
Brian D. Ripley, ripley at stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595
More information about the R-devel
mailing list