Liaw, Andy
2005-Mar-08 03:42 UTC
[R] coefficient of partial determination...partial r square [ redux]
If I'm not mistaken, partial R-squared is the R^2 of the quantities plotted in a partial residual plot, so you can base the computation on that. Prof. Fox's `car' package on CRAN has a function for creating those plots, but you need to figure out the way to extract the quantities being plotted. [In any case, the basic tools for doing such computations are all in R, and it shouldn't be hard at all to cook up such a thing, starting from the formula. Writing a function that works on any conceivable models that can be fitted with lm() would be a bit more challenging, but I doubt you need that.] HTH, Andy> From: Dr Carbon > > After the deafening silence from my last post (which likely caused > shudders of disgust in statistics departments on the six continents) > I'll reformulate: > > Is there a function that will return the coefficients of partial > determination for the independent variables in a lm (or glm). For y > x1 + x2....xn can I use R to extract the partial rsq for x1 to n? > > I am, and remain, with Admiration, etc. etc., at your Bidding, > DC > > ______________________________________________ > 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 > > >
abunn
2005-Mar-08 20:54 UTC
[R] coefficient of partial determination...partial r square [ redux]
Dr. C: I implemented this example of partial r square from Neter et al.'s big blue book. It's easily extendable to a three variable model (or more). I might write it to work with class lm or glm if there is interest. HTH, Andy Applied Linear Statistical Models by John Neter, Michael H Kutner, William Wasserman, Christopher J. Nachtsheim Section 7.4 in my copy page 274: # body fat example from Neter et al. bf.dat <- read.csv("body.fat.data.csv", header = T) #R > bf.dat # x1 x2 x3 y #1 19.5 43.1 29.1 11.9 #2 24.7 49.8 28.2 22.8 #3 30.7 51.9 37.0 18.7 #4 29.8 54.3 31.1 20.1 #5 19.1 42.2 30.9 12.9 #6 25.6 53.9 23.7 21.7 #7 31.4 58.5 27.6 27.1 #8 27.9 52.1 30.6 25.4 #9 22.1 49.9 23.2 21.3 #10 25.5 53.5 24.8 19.3 #11 31.1 56.6 30.0 25.4 #12 30.4 56.7 28.3 27.2 #13 18.7 46.5 23.0 11.7 #14 19.7 44.2 28.6 17.8 #15 14.6 42.7 21.3 12.8 #16 29.5 54.4 30.1 23.9 #17 27.7 55.3 25.7 22.6 #18 30.2 58.6 24.6 25.4 #19 22.7 48.2 27.1 14.8 #20 25.2 51.0 27.5 21.1 #R > # Not run: #names(bf.dat) <- c('Triceps Skinfold Thickness', x2 = 'Thigh Circumference', x3 = 'Midarm Circumference', y = 'Body Fat') summary(bf.dat) lm.x1 <- lm(y ~ x1, data = bf.dat) lm.x2 <- lm(y ~ x2, data = bf.dat) lm.x1.x2 <- lm(y ~ x1 + x2, data = bf.dat) # SSR(x2|x1) = SSR(x1,x2) - SSR(x1) ssr.x1.x2 <- sum(anova(lm.x1.x2)$"Sum Sq"[1:2]) ssr.x1 <- anova(lm.x1)$"Sum Sq"[1] ssr.x2 <- anova(lm.x2)$"Sum Sq"[1] ssr.x1.x2 - ssr.x1 # also sse.x1 <- anova(lm.x1)$"Sum Sq"[2] # eq sum(lm.x1$resid^2) sse.x2 <- anova(lm.x2)$"Sum Sq"[2] # eq sum(lm.x2$resid^2) # The partial r2 of x1 while controlling for x2 is 0.031 # pr2_1.2 = SSR(x1|x2) / SSE(x2) (ssr.x1.x2 - ssr.x2) / sse.x2 # The partial r2 of x2 while controlling for x1 is 0.232 # pr2_2.1 = SSR(x2|x1) / SSE(x1) (ssr.x1.x2 - ssr.x1) / sse.x1