# [R] how to calculate Rsquare

Spencer Graves spencer.graves at pdf.com
Mon Jul 21 18:41:10 CEST 2003

```	  It should be easy to get a separate R^2 from "lm" for each level of a
factor:  Just split the data and run "lm" once for each level of f.
I've done this with a "for" loop something like the following:

dat <- data.frame(x=x, y=y, f=f)
for(i.f in 1:2){
sel <- (f == c("a", "b")[i.f])
fit <- lm(y~x, data=dat[sel])
...

}

where "..." is replaced by appropriate commands to get R^2 from
summary(fit).  It may also be possible to do with with tapply.

Getting an R^2 from glm and lme is harder and controversial:  Some
people say simply, "Don't do it, because it doesn't mean anything."  For
those who want to do it anyway, the following papers discuss alternate
definitions of R^2 outside the standard normal linear model:

NagelKerke, N. J. D. (1991) "A note on a general definition of the
coefficient of determination", Biometrika 78: 691-2.

Cox, D. R. and Wermuth, N. (1992) "A comment on the coefficient of
determination for binary responses", The American Statistician 46:  1-4.

Cameron, A. Colin and Windmeijer, F. A. G. (1997) "An R-squared
measure of goodness of fit for some common nonlinear regression models",
Journal of Econometrics 77:  329-342.

I'd be pleased to hear other comments on this issue.  Hope this
helps.  spencer graves

Ronaldo Reis Jr. wrote:
> Hi,
>
> I have something like this:
>
>
>>x <- 1:10
>>y2 <- 30+5*x+rnorm(x,sd=3)
>>y <- c(y1,y2)
>>x <- c(x,x)
>>plot(x,y)
>>x <- 1:10
>>y1 <- 1+5*x+rnorm(x,sd=2)
>>y2 <- 30+5*x+rnorm(x,sd=5)
>>y <- c(y1,y2)
>>x <- c(x,x)
>>f <- factor(rep(c("a","b"),c(10,10)))
>>m <- lm(y~x+f)
>>anova(m)
>
> Analysis of Variance Table
>
> Response: y
>           Df Sum Sq Mean Sq F value    Pr(>F)
> x          1 4062.9  4062.9  400.04 2.990e-13 ***
> f          1 4421.5  4421.5  435.35 1.496e-13 ***
> Residuals 17  172.7    10.2
> ---
> Signif. codes:  0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1
>
>>#rsquare of model
>>(4062.9+4421.5)/(4062.9+4421.5+172.7)
>
>  0.980051
>
> In this way I calculate the model rsquare, but how to calculate the rsquare of
> each levels "a" and "b"?
>
> This is only an example, the model maybe glm, lme etc.
>
> Thanks
> Ronaldo

```