[R] weird! QDA does not depend on priors?

Liaw, Andy andy_liaw at merck.com
Sun Mar 12 05:09:35 CET 2006


1. Not specifying prior in the call to qda() is the same as putting equal
priors the classes.  Please read ?qda again more carefully.

2. Changing priors do not automatically guarantee that class predictions
will change.  Take the example in ?qda:  setting priors to c(0.1, 0.1, 0.8)
doesn't make any difference in the predicted classes, but setting them to
c(0.01, 0.01, 0.98) makes some difference.

3. Without access to the data you used, no one can say for sure why you got
what you got.

Andy

From: Michael
> 
> This is very weird. Is this a bug in MASS QDA?
> 
> On 3/11/06, Michael <comtech.usa at gmail.com> wrote:
> >
> >  Yes, I am using the MASS qda... How do I know which version is my 
> > MASS? I should be using the latest one, since I constantly 
> update my 
> > packages from mirror site USA CA1.
> >
> > Very weird!!!
> >
> > -------------------------------
> > Here is my code:
> >
> >
> > rm(list=ls(all=TRUE))
> > library(MASS);
> >
> > temp=as.matrix(read.table('spam.train'));
> > temp2=as.matrix(read.table('spam.test'));
> >
> > #QDA     Priors (0.5, 0.5)
> > lll <- qda((temp[, -58]), as.factor(temp[, 58]), prior=c(0.2, 0.8));
> >
> > print('Priors (0.2, 0.8) QDA: Training ... '); 
> ttt=predict(lll, temp[, 
> > -58])$class; cc1=table(temp[, 58], ttt);
> > print(cc1);
> > dd1=cc1 %*% matrix(1, 2, 1);
> > ee1=cc1 / as.vector(dd1);
> > print(ee1);
> >
> >
> > print('Priors (0.2, 0.8) QDA: Testing ... '); 
> ttt=predict(lll, temp2[, 
> > -58])$class; cc2=table(temp2[, 58], ttt);
> > print(cc2);
> > dd2=cc2 %*% matrix(1, 2, 1);
> > ee2=cc2 / as.vector(dd2);
> > print(ee2);
> >
> > #QDA     Proportional Priors
> > lll <- qda((temp[, -58]), as.factor(temp[, 58]));
> >
> > print('Proportional Priors QDA: Training ... '); ttt=predict(lll, 
> > temp[, -58])$class; cc1=table(temp[, 58], ttt);
> > print(cc1);
> > dd1=cc1 %*% matrix(1, 2, 1);
> > ee1=cc1 / as.vector(dd1);
> > print(ee1);
> >
> >
> > print('Proportional Priors QDA: Testing ... '); ttt=predict(lll, 
> > temp2[, -58])$class; cc2=table(temp2[, 58], ttt);
> > print(cc2);
> > dd2=cc2 %*% matrix(1, 2, 1);
> > ee2=cc2 / as.vector(dd2);
> > print(ee2);
> >
> > --------------------------------------------------
> >
> > Here is the result:
> >
> >
> > [1] "Priors (0.2, 0.8) QDA: Training ... "
> >        0    1
> >   0 1051  355
> >   1   40  855
> >
> >              0          1
> >   0 0.74751067 0.25248933
> >   1 0.04469274 0.95530726
> >
> > [1] "Priors (0.2, 0.8) QDA: Testing ... "
> >       0   1
> >   0 993 389
> >   1  47 871
> >
> >              0          1
> >   0 0.71852388 0.28147612
> >   1 0.05119826 0.94880174
> >
> > [1] "Proportional Priors QDA: Training ... "
> >        0    1
> >   0 1058  348
> >   1   41  854
> >
> >              0          1
> >   0 0.75248933 0.24751067
> >   1 0.04581006 0.95418994
> >
> > [1] "Proportional Priors QDA: Testing ... "
> >
> >       0   1
> >   0 999 383
> >   1  47 871
> >
> >              0          1
> >   0 0.72286541 0.27713459
> >   1 0.05119826 0.94880174
> >
> >
> >
> >
> >  On 3/11/06, Uwe Ligges <ligges at statistik.uni-dortmund.de> wrote:
> > >
> > > Michael wrote:
> > >
> > > > Hi all,
> > > >
> > > > If I run LDA on the same data (2-class classification) with 
> > > > default(no
> > >
> > > > priors specified in the lda function) vs. "prior=c(0.5, 
> 0.5)", the
> > > results
> > > > are different.
> > > >
> > > > The (0.5, 0.5) priors give better 1-classify-to-1 rate, and the
> > > proportional
> > > > priors(default, no priors specified in the lda function) give 
> > > > better 0-classify-to-0 rate, for both training and testing data 
> > > > sets.
> > > >
> > > > However, if I run QDA on the same data (2-class classification) 
> > > > with default(no priors specified in the lda function) vs. 
> > > > "prior=c( 0.5,
> > > 0.5)",
> > > > the results are the same,
> > > >
> > > > i.e. the confusion tables are completely the same for 
> two types of
> > > priors, I
> > > > even tried "qda" function with "prior=c(0.3, 0.7)" and other 
> > > > values,
> > > the
> > > > confusion tables are still the same...
> > > >
> > > > What might be the problem?
> > >
> > >
> > > Are we talking about the lda() and qda() implementations 
> in package 
> > > MASS? Which versions of R and MASS (?) are we talking about?
> > > Can you specify a reproducible example, please?
> > >
> > > The follwing example works for me:
> > > library(MASS)
> > > qdaObj <- qda(Species ~ ., data = iris, prior = c(1, 0, 0)) 
> > > predict(qdaObj)$class
> > >
> > > Uwe Ligges
> > >
> > >
> > >
> > >
> > > > Thanks a lot!
> > > >
> > > >       [[alternative HTML version deleted]]
> > > >
> > > > ______________________________________________
> > > > R-help at stat.math.ethz.ch mailing list 
> > > > https://stat.ethz.ch/mailman/listinfo/r-help
> > > > PLEASE do read the posting guide!
> > > 
> http://www.R-project.org/posting-guide.html<http://www.r-project.org
> > > /posting-guide.html>
> > >
> > >
> >
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list 
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! 
> http://www.R-project.org/posting-guide.html
> 
>




More information about the R-help mailing list