[R] Percentage effects in logistic regression

Daniel Malter daniel at umd.edu
Mon Nov 9 21:13:21 CET 2009


I should heed my own words: the 1% effect  based on the marginal effect would
be

0.01* ABS(X) * margeff

I omitted the abs(x) in the last paragraph of my last email. Based on the
marginal effect, the expected change in probability would be 0.01*0.69*0.02,
which is 0.00138. This is not all too far away from the 0.00126 change based
on direct predictions of the regression model that assume a one-percent
increase in x for each x.

Daniel 



Daniel Malter wrote:
> 
> Yes, it is the marginal effect. The marginal effect (dy/dx) is the slope
> of
> the gradient at x. It is thus NOT for a 1 unit increase in x, but for a
> marginal change in x. Remember that, for nonlinear functions, the marginal
> effect is more accurate in predicting a change in y the smaller (!) the
> change of x is. Since you are interested in a 1% change, 1% is probably
> justifiable as being a small change. Thus, if you increase x by 1%, the
> change in y should be approximately 0.01*abs(x)*margeff. This assumes that
> the linear extrapolation done with a marginal effect is reasonably
> accurate
> for a prediction of y at x+delta(x). 
> 
> You could also compute the effect at a 1% increase in x directly (see code
> below). Predict the regression, but substitue x by z=x+0.01*abs(x). This
> gives you the predicted odds (predict.1percent) at z (which is one percent
> greater than x). From the odds, you can easily compute the probabilities
> (probs). Then subtract the fitted probabilities at x from the predicted
> probabilities at z, which gives you the difference in probability. In the
> example I sent you, this gives a change in probability of 0.001255946.
> This
> is already much smaller than the marginal effect that would be estimated
> at
> around 0.002 for a 1 percent change in x (0.2*0.01=0.002), which already
> indicates the declining accuracy of the marginal effect as the distance
> from
> x increases.
> 
> z=x+0.01*abs(x)
> predict.1percent=predict(reg,list(x=z))
> probs=exp(predict.1percent)/(1+exp(predict.1percent))
> mean(probs-fitted(reg))
> 
> HTH,
> Daniel 
> 
> 
> -------------------------
> cuncta stricte discussurus
> -------------------------
> 
> -----Ursprüngliche Nachricht-----
> Von: Roberto Patuelli [mailto:roberto.patuelli at usi.ch] 
> Gesendet: Monday, November 09, 2009 1:54 PM
> An: Daniel Malter; r-help at r-project.org
> Betreff: Re: [R] Percentage effects in logistic regression
> 
> Dear Daniel,
> 
> Thanks for your prompt reply.
> Indeed I was aware of the possibility of computing at mean(x) or doing the
> mean afterwards.
> But what you suggest is marginal effects, right? Isn't that the effect on
> y
> of a 1-unit increase in x (what I was not interested in)? I'm interested
> in
> the effect on y of a 1% increase in x (called percentage effects, right?).
> 
> Could you please clarify?
> 
> Thanks
> Roberto
> 
> 
> ----- Original Message -----
> From: "Daniel Malter" <daniel at umd.edu>
> To: "Patuelli Roberto" <roberto.patuelli at usi.ch>; <r-help at r-project.org>
> Sent: Monday, November 09, 2009 7:44 PM
> Subject: AW: [R] Percentage effects in logistic regression
> 
> 
> Somebody might have done this, but in fact it's not difficult to compute
> the
> marginal effects yourself (which is the beauty of R). For a univariate
> logistic regression, I illustrate two ways to compute the marginal effects
> (one corresponds to the mfx, the other one to the margeff command in
> Stata).
> With the first you compute the marginal effect based on the mean fitted
> values; with the second you compute the marginal effect based on the
> fitted
> values for each observation and then mean over the individual marginal
> effects. Often the second way is considered better. You can easily extend
> the R-code below to a multivariate regression.
> 
> #####
> #####Simulate data and run regression
> #####
> 
> set.seed(343)
> x=rnorm(100,0,1)      #linear predictor
> lp=exp(x)/(1+exp(x)) #probability
> y=rbinom(100,1,lp) #Bernoulli draws with probability lp
> 
> #Run logistic regression
> reg=glm(y~x,binomial)
> summary(reg)
> 
> #####
> #####Regression output
> #####
> 
> Coefficients:
>             Estimate Std. Error z value Pr(>|z|)
> (Intercept)   0.1921     0.2175   0.883 0.377133
> x             0.9442     0.2824   3.343 0.000829 ***
> ---
> Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> 
> (Dispersion parameter for binomial family taken to be 1)
> 
>     Null deviance: 138.47  on 99  degrees of freedom
> Residual deviance: 125.01  on 98  degrees of freedom
> AIC: 129.01
> 
> #####
> #####Compute marginal effects
> #####
> 
> #Way 1
> mean(fitted(reg))*mean(1-fitted(reg))*coefficients(reg)[2]
> 
> 0.2356697
> 
> #Way 2
> mean(fitted(reg)*(1-fitted(reg))*coefficients(reg)[2])
> 
> 0.2057041
> 
> 
> #####
> #####Check with Stata
> #####
> 
> Logistic regression                               Number of obs   =
> 100
>                                                   LR chi2(1)      =
> 13.46
>                                                   Prob > chi2     =
> 0.0002
> Log likelihood = -62.506426                       Pseudo R2       =
> 0.0972
> 
> ----------------------------------------------------------------------------
> --
>            y |      Coef.   Std. Err.      z    P>|z|     [95% Conf.
> Interval]
> -------------+--------------------------------------------------------------
> --
>            x |   .9441896   .2824403     3.34   0.001     .3906167
> 1.497762
>        _cons |   .1920529   .2174531     0.88   0.377    -.2341474
> .6182532
> ----------------------------------------------------------------------------
> --
> 
> #####
> #####Compute marginal effects in Stata
> #####
> 
> #Way 1
> Marginal effects after logit
>       y  = Pr(y) (predict)
>          =  .52354297
> ----------------------------------------------------------------------------
> --
> variable |      dy/dx    Std. Err.     z    P>|z|  [    95% C.I.   ]     
> X
> ---------+------------------------------------------------------------------
> --
>        x |   .2355241      .07041    3.35   0.001   .097532  .373516
> -.103593
> ----------------------------------------------------------------------------
> --
> 
> #Way 2
> Average marginal effects on Prob(y==1) after logit
> 
> ----------------------------------------------------------------------------
> --
>            y |      Coef.   Std. Err.      z    P>|z|     [95% Conf.
> Interval]
> -------------+--------------------------------------------------------------
> --
>            x |   .2057041   .0473328     4.35   0.000     .1129334
> .2984747
> ----------------------------------------------------------------------------
> --
> 
> 
> HTH,
> Daniel
> 
> 
> 
> -------------------------
> cuncta stricte discussurus
> -------------------------
> 
> -----Ursprüngliche Nachricht-----
> Von: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] Im
> Auftrag von Roberto Patuelli
> Gesendet: Monday, November 09, 2009 12:04 PM
> An: r-help at r-project.org
> Betreff: [R] Percentage effects in logistic regression
> 
> Dear ALL,
> 
> I'm trying to figure out what the percentage effects are in a logistic
> regression. To be more clear, I'm not interested in the effect on y of a
> 1-unit increase in x, but on the percentage effect on y of a 1% increase
> in
> x (in economics this is also often called an "elasticity").
> For example, if my independent variables are in logs, the betas can be
> directly interpreted as percentage effects both in OLS and Poisson
> regression. What about the logistic regression?
> 
> Is there a package (maybe effects?) that can compute these automatically?
> 
> Thanks and best regards,
> Roberto Patuelli
> 
> 
> 
> ********************
> Roberto Patuelli, Ph.D.
> Istituto Ricerche Economiche (IRE) (Institute for Economic Research)
> Università della Svizzera Italiana (University of Lugano) via Maderno 24,
> CP
> 4361
> CH-6904 Lugano
> Switzerland
> Phone: +41-(0)58-666-4166
> Fax: +39-02-700419665
> 
> ______________________________________________
> 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.
> 
> ______________________________________________
> 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.
> 
> 

-- 
View this message in context: http://old.nabble.com/Percentage-effects-in-logistic-regression-tp26269906p26272862.html
Sent from the R help mailing list archive at Nabble.com.




More information about the R-help mailing list