I used lmList
to fit 480 relationships and I would like the R2 of each of these.
Here is an example dataset and model which are pretty close to what it really looks like, except I have 480 eu (experimental units):
eu mass day
11 .02 1
11 .03 2
11 .04 3
11 .06 4
12 .01 1
12 .03 2
12 .04 3
12 .05 4
fit<-lmList(mass ~ day | eu, data=df)
Printing fit
or summary
does not give me the information I want. I am ultimately trying to make a new dataframe that will look like:
eu intercept slope R2
11 .01 .95 .98
12 .01 .96 .98
I've got the coefficients through coef
, now I need the R-squared.
Here you go:
sapply(fit,function(x) summary(x)$r.squared)
11 12
0.9657143 0.9657143
Or to do everything at once:
sumfun <- function(x) c(coef(x),summary(x)$r.squared)
t(sapply(fit,sumfun))
(you need to transpose the results from sapply
to get the table as specified above). Then use names() <-
or setNames()
to get the column names the way you want them.
using Ben Bolker's code, you can make a function that transposes the results and gives the table, all at once:
sumfun <- function(x)
{
aux <- function(x) c(coef(x), summary(x)$r.squared)
t(sapply(x,aux))
}
sumfun(fit)
来源:https://stackoverflow.com/questions/23501852/print-r-squared-for-all-of-the-models-fit-with-lmlist