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)
>
> [1] 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