eric.e.harper at us.abb.com
2008-Apr-09 14:47 UTC
[R] Coefficient of determination for generalized linear models
Thanks in advance for your kind attention. I am using R to fit empirical data to generalized linear models. AIC (Akaike information criterion) is a measure of the goodness of fit returned by calls to glm(). I would also like to calculate the coefficient of determination R2, although there is no consensus about the exact definition for generalized models ([1]http://en.wikipedia.org/wiki/Coefficient_of_determination). I found a package ???pscl??? with a pR2 function that computes pseudo-R2 measures for various GLMs. The arguments to the call are a fitted model object of class glm, polr, or mulitnom, and then ???additional arguments to be passed to or from functions???. The example from the documentation works well. Browse[1]> data(admit) Browse[1]> require(MASS) Browse[1]> ## ordered probit model Browse[1]> op1 <- polr(score ~ gre.quant + gre.verbal + ap + pt + female, + Hess=TRUE, + data=admit, + method="probit") Browse[1]> pR2(op1) llh llhNull G2 McFadden r2ML r2CU -106.5088203 -151.0299826 89.0423245 0.2947836 0.5682989 0.6032041 Browse[1]> When I try with a glm object rather than polr, I get the following error: Browse[1]> class(fit[[2]]) [1] "glm" "lm" Browse[1]> pR2(fit[[2]]) Error in inherits(x, "data.frame") : object "ds" not found The ds object does exist in the environment, but I do not know how to pass it into pR2: Browse[1]> class(ds) [1] "data.frame" Browse[1]> pR2(fit[[2]], ds) Error in inherits(x, "data.frame") : object "ds" not found Browse[1]> pR2 function (object, ...) { UseMethod("pR2") } <environment: namespace:pscl> Browse[1]> Question 1: How do I find the complete argument signature for pR2 in order to perhaps pass it the ds object? Question 2: If pR2 does not work with glm objects (for some unknown reason), is there another function I can use to calculate R-squared and adjusted R-squared for a generalized linear model? Best regards, \Eric References 1. http://en.wikipedia.org/wiki/Coefficient_of_determination
eric.e.harper at us.abb.com
2008-Apr-09 15:25 UTC
[R] Coefficient of determination for generalized linear models
Asking the question usually makes one think about the workarounds J. I reviewed the pscl source and found the code for pR2. Sourcing the following internal functions allowed me to compute the pseudo R2 measures. pR2Work <- function(llh,llhNull,n){ McFadden <- 1 - llh/llhNull G2 <- -2*(llhNull-llh) r2ML <- 1 - exp(-G2/n) r2ML.max <- 1 - exp(llhNull*2/n) r2CU <- r2ML/r2ML.max out <- c(llh=llh, llhNull=llhNull, G2=G2, McFadden=McFadden, r2ML=r2ML, r2CU=r2CU) out } pR2.glm <- function(object,...){ llh <- logLik(object) objectNull <- update(object, ~ 1) llhNull <- logLik(objectNull) n <- dim(object$model)[1] pR2Work(llh,llhNull,n) } Browse[1]> pR2.glm(fit[[2]]) llh llhNull G2 McFadden r2ML r2CU -1658.5890626 -2874.0411606 2430.9041961 0.4229070 0.9472917 0.9481926 Browse[1]> Question 3: Is there a way to access the pR2.glm function from the library without using the source? ______________________________________________________________________ From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Eric E Harper/USABB/ABB Sent: Wednesday, April 09, 2008 10:47 AM To: r-help at r-project.org Cc: Emanuel Kolb/DECRC/ABB; Hans-Werner Borchers/DECRC/ABB Subject: [R] Coefficient of determination for generalized linear models Thanks in advance for your kind attention. I am using R to fit empirical data to generalized linear models. AIC (Akaike information criterion) is a measure of the goodness of fit returned by calls to glm(). I would also like to calculate the coefficient of determination R2, although there is no consensus about the exact definition for generalized models ([1]http://en.wikipedia.org/wiki/Coefficient_of_determination). I found a package ???????pscl??????? with a pR2 function that computes pseudo-R2 measures for various GLMs. The arguments to the call are a fitted model object of class glm, polr, or mulitnom, and then ???????additional arguments to be passed to or from functions????????. The example from the documentation works well. Browse[1]> data(admit) Browse[1]> require(MASS) Browse[1]> ## ordered probit model Browse[1]> op1 <- polr(score ~ gre.quant + gre.verbal + ap + pt + female, + Hess=TRUE, + data=admit, + method="probit") Browse[1]> pR2(op1) llh llhNull G2 McFadden r2ML r2CU -106.5088203 -151.0299826 89.0423245 0.2947836 0.5682989 0.6032041 Browse[1]> When I try with a glm object rather than polr, I get the following error: Browse[1]> class(fit[[2]]) [1] "glm" "lm" Browse[1]> pR2(fit[[2]]) Error in inherits(x, "data.frame") : object "ds" not found The ds object does exist in the environment, but I do not know how to pass it into pR2: Browse[1]> class(ds) [1] "data.frame" Browse[1]> pR2(fit[[2]], ds) Error in inherits(x, "data.frame") : object "ds" not found Browse[1]> pR2 function (object, ...) { UseMethod("pR2") } Browse[1]> Question 1: How do I find the complete argument signature for pR2 in order to perhaps pass it the ds object? Question 2: If pR2 does not work with glm objects (for some unknown reason), is there another function I can use to calculate R-squared and adjusted R-squared for a generalized linear model? Best regards, \Eric References 1. http://en.wikipedia.org/wiki/Coefficient_of_determination ______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.