Dear David Winsemius, 

Thank you!  

The sample make no sense, I know. The real data is too big. So, I only want to 
understand how to plot marginal effects, to visualize them in a proper way. 

Best,


> 22 juli 2016 kl. 08:35 skrev David Winsemius <dwinsem...@comcast.net>:
> 
>> 
>> On Jul 21, 2016, at 2:22 PM, Faradj Koliev <farad...@gmail.com> wrote:
>> 
>> Dear all, 
>> 
>> I have two logistic regression models:
>> 
>> 
>>  • model <- glm(Y ~ X1+X2+X3+X4, data = data, family = "binomial")
>> 
>> 
>> 
>>  • modelInteraction <- glm(Y ~ X1+X2+X3+X4+X1*X4, data = data, family = 
>> "binomial")
>> 
>> To calculate the marginal effects (MEM approach) for these models, I used 
>> the `mfx` package:
>> 
>> 
>>  • a<- logitmfx(model, data=data, atmean=TRUE)
>> 
>> 
>> 
>>   •b<- logitmfx(modelInteraction, data=data, atmean=TRUE)
>> 
>> 
>> What I want to do now is 1) plot all the results for "model" and 2) show the 
>> result just for two variables: X1 and X2. 
>> 3) I also want to plot the interaction term in ”modelInteraction”.
> 
> There is no longer a single "effect" for X1 in modelInteraction in contrast 
> to the manner as there might be an "effect" for X2. There can only be 
> predictions for combined situations with particular combinations of values 
> for X1 and X4.
> 
>> model
> 
> Call:  glm(formula = Y ~ X1 + X2 + X3 + X4, family = "binomial", data = data)
> 
> Coefficients:
> (Intercept)           X1           X2           X3           X4  
>    -0.3601       1.3353       0.1056       0.2898      -0.3705  
> 
> Degrees of Freedom: 68 Total (i.e. Null);  64 Residual
> Null Deviance:            66.78 
> Residual Deviance: 62.27      AIC: 72.27
> 
> 
>> modelInteraction
> 
> Call:  glm(formula = Y ~ X1 + X2 + X3 + X4 + X1 * X4, family = "binomial", 
>    data = data)
> 
> Coefficients:
> (Intercept)           X1           X2           X3           X4        X1:X4  
>    90.0158     -90.0747       0.1183       0.3064     -15.3688      15.1593  
> 
> Degrees of Freedom: 68 Total (i.e. Null);  63 Residual
> Null Deviance:            66.78 
> Residual Deviance: 61.49      AIC: 73.49
> 
> Notice that a naive attempt to plot an X1  "effect" in modelInteraction might 
> pick the -90.07 value which would then ignore both the much larger Intercept 
> value and also ignore the fact that the interaction term has now split the X4 
> (and X1) "effects" into multiple pieces.
> 
> You need to interpret the effects of X1 in the context of a specification of 
> a particular X4 value and not forget that the Intercept should not be 
> ignored. It appears to me that the estimates of the mfx package are 
> essentially meaningless with the problem you have thrown at it.
> 
>> a
> Call:
> logitmfx(formula = model, data = data, atmean = TRUE)
> 
> Marginal Effects:
>       dF/dx Std. Err.       z   P>|z|  
> X1  0.147532  0.087865  1.6791 0.09314 .
> X2  0.015085  0.193888  0.0778 0.93798  
> X3  0.040309  0.063324  0.6366 0.52441  
> X4 -0.050393  0.092947 -0.5422 0.58770  
> ---
> Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> 
> dF/dx is for discrete change for the following variables:
> 
> [1] "X1" "X2" "X4"
>> b
> Call:
> logitmfx(formula = modelInteraction, data = data, atmean = TRUE)
> 
> Marginal Effects:
>            dF/dx   Std. Err.         z  P>|z|    
> X1    -1.0000e+00  1.2121e-07 -8.25e+06 <2e-16 ***
> X2     6.5595e-03  8.1616e-01  8.00e-03 0.9936    
> X3     1.6312e-02  2.0326e+00  8.00e-03 0.9936    
> X4    -9.6831e-01  1.5806e+01 -6.13e-02 0.9511    
> X1:X4  8.0703e-01  1.4572e+01  5.54e-02 0.9558    
> ---
> Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> 
> dF/dx is for discrete change for the following variables:
> 
> [1] "X1" "X2" "X4"
> 
> I see no sensible interpretation of the phrase "X1 effect" in the comparison 
> tables above. The "p-value" in the second table appears to be nonsense 
> induced by throwing a model formulation that was not anticipated. There is a 
> negligible improvement in the glm fits:
> 
>> anova(model,modelInteraction)
> Analysis of Deviance Table
> 
> Model 1: Y ~ X1 + X2 + X3 + X4
> Model 2: Y ~ X1 + X2 + X3 + X4 + X1 * X4
>  Resid. Df Resid. Dev Df Deviance
> 1        64     62.274            
> 2        63     61.495  1  0.77908
> 
> 
> So the notion that the "X1 effect" is now "highly significant" where it was 
> before not even suggestive of significance seem to point to either an error 
> in the underlying theory or a failure to anticipate and trap (and warn the 
> user) that an erroneous model (or at least an unanticipated model) is being 
> passed to a procedure.
> 
> At least the 'effects- package gives you a tiny warning about this issue, 
> although I think it really should throw an informative error when a user 
> attempts to estimate only a "main effect" in a model that has an interaction 
> involving such a covariate:
> 
>> library(effects)
> 
>> effect('X1', model)
> 
> X1 effect
> X1
>         0        0.2        0.4        0.6        0.8          1 
> 0.06706123 0.08582757 0.10923061 0.13805139 0.17299973 0.21459275 
>> effect('X1', modelInteraction)
> NOTE: X1 is not a high-order term in the model
> 
> X1 effect
> X1
>           0          0.2          0.4          0.6          0.8            1 
> 0.0002418661 0.0009864740 0.0040142251 0.0161843996 0.0629206979 0.2151098752 
>> effect('X1:X4', modelInteraction)
> 
> X1*X4 effect
>     X4
> X1            6         6.2          6.4          6.6          6.8            
> 7
>  0   0.1100479 0.005686142 0.0002643982 1.223058e-05 5.656287e-07 2.615838e-08
>  0.2 0.1285241 0.012352473 0.0010595321 8.994106e-05 7.628099e-06 6.469071e-07
>  0.4 0.1495811 0.026625017 0.0042357682 6.610806e-04 1.028639e-04 1.599803e-05
>  0.6 0.1734015 0.056446132 0.0167737545 4.841483e-03 1.385458e-03 3.954877e-04
>  0.8 0.2001225 0.115698003 0.0640377838 3.454327e-02 1.836677e-02 9.689636e-03
>  1   0.2298165 0.222481442 0.2153150766 2.083177e-01 2.014893e-01 1.948297e-01
> 
> -- 
> David.
> 
> 
> 
>> 
>> 
>> I have been looking around for the solutions but haven't been able to find 
>> any. I would appreciate any suggestions. 
>> 
>> A reproducible sample: 
>> 
>>> dput(data)
>> structure(list(Y = c(0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 
>> 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 
>> 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 
>> 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 
>> 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), X1 = c(1L, 0L, 1L, 
>> 0L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 
>> 1L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
>> 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 
>> 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
>> 1L, 0L), X2 = c(0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 
>> 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
>> 1L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 
>> 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
>> 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), X3 = c(0L, 0L, 0L, 0L, 0L, 
>> 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
>> 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 2L, 2L, 3L, 4L, 5L, 0L, 0L, 
>> 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 
>> 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L
>> ), X4 = c(6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
>> 6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L, 6L, 6L, 6L, 6L, 6L, 6L, 
>> 6L, 6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 
>> 7L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 
>> 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L)), .Names = c("Y", "X1", "X2", 
>> "X3", "X4"), row.names = c(NA, -69L), class = "data.frame")
>> 
>> 
>> 
>> 
>>      [[alternative HTML version deleted]]
>> 
>> ______________________________________________
>> R-help@r-project.org <mailto:R-help@r-project.org> mailing list -- To 
>> UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help 
>> <https://stat.ethz.ch/mailman/listinfo/r-help>
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html 
>> <http://www.r-project.org/posting-guide.html>
>> and provide commented, minimal, self-contained, reproducible code.
> 
> David Winsemius
> Alameda, CA, USA


        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
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.

Reply via email to