From murdoch at stats.uwo.ca  Fri Dec 14 15:18:18 2007
From: murdoch at stats.uwo.ca (Duncan Murdoch)
Date: Fri, 14 Dec 2007 09:18:18 -0500
Subject: [Rd] Rsquared bug lm() (PR#10516)
In-Reply-To: <20071214131025.963A8283416B@mail.pubhealth.ku.dk>
References: <20071214131025.963A8283416B@mail.pubhealth.ku.dk>
Message-ID: <476290AA.3000107@stats.uwo.ca>

On 12/14/2007 8:10 AM, lieven.clement at gmail.com wrote:
> Full_Name: lieven clement
> Version:  R version 2.4.0 Patched (2006-11-25 r39997)
> OS: i486-pc-linux-gnu
> Submission from: (NULL) (157.193.193.180)
> 
> 
> summary.lm() does not calculate R?? accurately for models without intercepts if
> one of the predictor variables is a factor.
> In order to avoid one of the factor levels to be considered as a reference class
> you can use the -1 option in a formula. When you use this, R?? is not correctly
> calculated.

This is not a bug.  A model without an intercept should be using y=0 as 
a reference.

Duncan Murdoch

> 
>>  x1<-rnorm(100)
>> x2<-c(rep(0,25),rep(10,25),rep(20,25),rep(30,25))
>> y<-10*x1+x2+rnorm(100,0,4)
>> x2<-as.factor(x2)
>> lmtest<-lm(y~-1+x1+x2)
>> summary(lmtest)$r.sq
> [1] 0.9650201
>> 1-sum(lmtest$res^2)/sum((y-mean(y))^2)
> [1] 0.9342672
> 
> The R squared by summary is calculated as
>> 1-sum(lmtest$res^2)/sum((y)^2)
> [1] 0.9650201
> apparently because lm.summary assumes the mean of y to be zero.
> 
> In case of an intercept model everything seems ok
>> lmtest<-lm(y~x1+x2)
>> summary(lmtest)$r.sq
> [1] 0.9342672
>> 1-sum(lmtest$res^2)/sum((y-mean(y))^2)
> [1] 0.9342672
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



[Rd] Rsquared bug lm() (PR#10516)
Duncan Murdoch