[R] Help Computing Probit Marginal Effects
(Ted Harding)
Ted.Harding at manchester.ac.uk
Sat Feb 27 09:38:44 CET 2010
On 27-Feb-10 03:52:19, Cardinals_Fan wrote:
>
> Hi, I am a stata user trying to transition to R. Typically I
> compute marginal effects plots for (example) probit models by
> drawing simulated betas by using the coefficient/standard error
> estimates after I run a probit model. I then use these simulated
> betas to compute first difference marginal effects. My question
> is, can I do this in R? Specifically, I was wondering if anyone
> knows how R stores the coefficient/standard error estimates after
> you estimate the model? I assume it's vector, but what is it
> called?
>
> Cheers
> --
Here is an example which sets up (X,Y) data using a probit mechaism,
then fits a probit model, and then extracts the information which
you seek.
set.seed(54321)
X <- 0.2*(-10:10)
U <- rnorm(21)
Y <- 1*(U <= X) ## binary outcome 0/1, = 1 if N(0,1) <= X
GLM <- glm(Y ~ X, family=binomial(link=probit)) ## fit a probit
Coef <- summary(GLM)$coef ## apply summary() to the fit
GLM is a list with a large number of components: enter the command
str(GLM)
and have a look at what you get! Only a few of these are displayed
when you apply print() to it:
print(GLM)
# Call: glm(formula = Y ~ X, family = binomial(link = probit))
# Coefficients:
# (Intercept) X
# 0.08237 0.56982
#
# Degrees of Freedom: 20 Total (i.e. Null); 19 Residual
# Null Deviance: 29.06
# Residual Deviance: 23.93 AIC: 27.93
Note that you do *not* get Standard Errors from this.
However, all the information in GLM is available for processing
by other functions. In particular, summary(GLM) produces another
list with several components -- have a look at the output from
str(summary(GLM))
One of these components (listed near the end of this output)
is "coef", and it can be accessed as summary(GLM)$coef as in the
above command
Coef <- summary(GLM)$coef
This is a matrix (in this case 2 named rows, 4 named columns):
Coef
# Estimate Std. Error z value Pr(>|z|)
# (Intercept) 0.0823684 0.2974595 0.2769063 0.78185207
# X 0.5698200 0.2638657 2.1595076 0.03081081
So there is one row for each coefficient in the model (here 2,
one for Intercept, one for variable X), and four columns
(for the Estimate itself of the coefficient, for its Standard
Error, for the z-value (Est/SE), and for the P-value).
Hence you can access the estimates as
Coef[,1] # (the first column of the matrix)
# (Intercept) X
# 0.0823684 0.5698200
and their respective SEs as
Coef[,2] # (the second column of the matrix)
# (Intercept) X
# 0.2974595 0.2638657
I have spelled this out in detail to demonstrate that the key
to accessing information in objects constructed by R lies in
its structures (especially lists, vectors and matrices). You
can find out what is involved for any function by looking for
the section "Value" in its help page. For instance, the function
summary() when applied to a GLM uses the method summary.glm(),
so you can enter the command
?summary.glm
and then read what is in the section "Value". This shows that
it is a list with components whose names are
call, family, deviance, ... , coefficients, ... , symbolic.cor
and a component with name "Name" can be accessed using "$Name" as
in "GLM$coef" (you can use "coef" instead of "coefficients" since
the first four letters are [more than] enough to identify the name
uniquely).
Once you get used to this, things become straightforward!
Ted.
--------------------------------------------------------------------
E-Mail: (Ted Harding) <Ted.Harding at manchester.ac.uk>
Fax-to-email: +44 (0)870 094 0861
Date: 27-Feb-10 Time: 08:38:41
------------------------------ XFMail ------------------------------
More information about the R-help
mailing list